剪映自动打关键帧

news2024/11/23 22:28:10

牙叔教程 简单易懂

这是给单张图片打关键帧的教程,

给图片打关键帧有四个步骤

  1. 鼠标点选图片
  2. 打起始帧
  3. 跳转到图片末尾
  4. 打结束帧

打帧是一件很费手的事情, 所以我写了个自动化的代码,

专门用来打关键帧, 使用的软件是 AutoHotkey

关键帧参数的详细解释

剪映 自动打关键帧 AutoHotkey

目前的使用效果

鼠标点击图片, 播放头放图片第一帧,

点击按钮, 即可打关键帧

只适用于打简单的关键帧,

如果想要图片中的人物的脸一直漏出来,

那么就需要接入人脸识别, 识别图片中的人脸区域

关键帧打多了, 觉得没必要上人脸识别


我们看看四个步骤, 哪些可以自动化

第一步 鼠标点选图片

这个做不了自动化, 我也是手动点的,

不是说AutoHotkey点不了鼠标,

而是不能判断应该点击哪里

第二步 打起始帧

这个只有两个动作

  • 点击
  • 输入框输入数字

这必然是可以自动化的

第三步 跳转到图片末尾

在第二步做完的时候, 播放头在图片的第一帧,

我们记下此时的图片特征,

我自己选择的特征是, 以图片中心为参考系, 取9个点的颜色,

以此为图片特征

然后, 按快捷键 ↓ , 播放后会移动,

那么图片变不变呢? 这就要靠图片特征来判断了,

如果按了 ↓ , 图片没有变化, 那么我们就继续按 ↓ ,

这就要加一个循环判断操作

这必然是可以自动化的, 看我咋写的 跳到结束帧

跳到结束帧() {
  图片特征current := 获取当前图片特征()
  Send "{Down}"
  ; Sleep delayBetweenKeys
  Sleep 200
  foundIt := False
  loop 10 {
    图片特征afterTouchDownKey := 获取当前图片特征()
    if (图片特征current == 图片特征afterTouchDownKey) {
      OutputDebug "图片特征current == 图片特征afterTouchDownKey"
      图片特征current := 获取当前图片特征()
      Send "{Down}"
      Sleep 200
    }else{
      OutputDebug "图片特征current != 图片特征afterTouchDownKey"
      foundIt := True
      break
    }
  }
  if (!foundIt) {
    OutputDebug "没有找到结束帧"
    SoundBeep 666
    Sleep 500
    SoundBeep 666
    Sleep 200
    Exit ;
    return
  }
  Send "{Left}"
  Sleep delayBetweenKeys
}

获取图片特征的代码

获取当前图片特征() {
  图片特征点 := config.剪映.图片特征点
  center := 图片特征点.center
  distance := 图片特征点.distance

  ; 生成包含九个点坐标的数组
  points := []
  for _, yOffset in [-1, 0, 1] {
    y := center.y + distance * yOffset
    for _, xOffset in [-1, 0, 1] {
      x := center.x + distance * xOffset
      points.Push({ x: x, y: y })
    }
  }

  ; 获取九个点的颜色
  colors := []
  for index, point in points {
    color := PixelGetColor(point.x, point.y)
    colors.Push(color)
  }
  ; 构建字符串格式的返回值
  result := ""
  for index, point in points {
    result .= point.x "," point.y "," colors[index] "|"
  }
  result := SubStr(result, 1, StrLen(result) - 1)  ; 去除最后一个分隔符 "|"

  return result

}

第四步 打结束帧

这个和打开始帧是一样的, 就不说了


目前我测试, 自己是在用的,

只是那些出现半个脑袋的

需要手动重新打帧,

综合来讲, 我自己比较满意


总结 要使用的AutoHotkey命令

点击命令 用于点击关键帧, 还有输入框

MouseClick "left", x, y, 1

输入数据, 用于输入关键帧数值

Send "134"

延时 用于动作之间的等待时间

Sleep 200

回车键, 输入框输入后要点击回车键

Send "{Enter}"

方向键 用于跳转到图片的尾帧

Send "{Down}"
Send "{Left}"

获取图片特征 也就是对比固定点的颜色

color := PixelGetColor(point.x, point.y)

循环

; 生成包含九个点坐标的数组
points := []
for _, yOffset in [-1, 0, 1] {
  y := center.y + distance * yOffset
  for _, xOffset in [-1, 0, 1] {
    x := center.x + distance * xOffset
    points.Push({ x: x, y: y })
  }
}

基本代码就是有以上几条命令组成,

实际上我写了四个文件

分别是

  • 配置文件, 主要是各个按钮的坐标
  • UI界面, 也就是这几个按钮

  • main文件, 主流程
  • service 服务函数
  • utils 工具函数

这一个小小的打关键帧功能, 大概 500 行代码

微信公众号 牙叔教程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/617783.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能python:Python中如何精确表示小数

Python中如何精确表示小数 在日常的数学计算过程中,小数是不可避免的。然而,由于计算机在存储和处理小数时的固有限制,会导致精度上的问题。Python作为一种通用的编程语言,也具有这样的限制。但是,在Python中&#xf…

基于层次的聚类算法

尽管基于划分的聚类算法能够实现把数据集划分成指定数量的簇,但是在某些情况下,需要把数据集划分成不同层上的簇:比如,作为一家公司的人力资源部经理,你可以把所有的雇员组织成较大的簇,如主管、经理和职员…

三维重建 医学图像的可视化 PyQt Python VTK 四视图(横断面,冠状面,矢状面,3D)

本文实现了 Python C 版本 的 四视图,横断面,冠状面,矢状面,3D 主要功能: 1:可以通过进度条换层 2:鼠标双击放大/缩小窗口 3:按住鼠标中键拖动图像 4:鼠标右键滑动放大/缩小图像 效果: 视频&#…

数据库期末复习(7.1) 查询执行

目标 了解各种查询执行的方法和记住各种查询执行的IO代价,了解支持算法最少的空间(页数多少)。 一趟归并排序的代价和改进方案笔记 数据库 查询执行(1) 多路归并_旅僧的博客-CSDN博客 创建归并段过程的IO代价是2B(R) 并且会在页面中新开辟一段run为了存放已经排好序的归并…

c语言的一些小题目(初阶),持续分享......

文章目录 1.打印杨辉三角形 2.打印X形图案 3.打印菱形 4.字符串左旋 5.倒置字符串 文章内容 1.杨辉三角形是一道非常经典的题目,观察下面的图片中红色与蓝色方块的关系我们不难发现,两个红色方框里的数字相加等于蓝色方框里的数字,找到…

十、RGBA数据转NV21格式存储

1、介绍 首先为什么要去了解RGBA转NV21格式的,因为在软编码X264的时候就需要yuv格式作为输入源进行编码。 NV21格式的回顾:也是YUV420SP格式,存储两个plane,Y,VU交叉存储,内存大小为w * h w * h/ 4 * 2w…

力扣高频SQL50题(基础版)——第七天

力扣高频SQL50题(基础版)——第七天 1 查询结果的质量与占比 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 SELECT q.query_name,ROUND(AVG(q.rating/q.position),2) quality, ROUND(100*(SELECT count(*) FROM Queries WHERE rating<3 AND que…

国产品牌:中国牙科市场的美好未来

牙菌斑是口腔疾病主要元凶&#xff0c;我国口腔患者人数逐年增加。根据国家卫健委的资料&#xff0c;常见的口腔疾病主要是由附着在牙齿上的牙菌斑引起&#xff0c;因此&#xff0c;口腔护理主要达到清除牙菌斑、保护牙齿及牙周健康的目的。根据天猫发布的《2021 天猫口腔护理消…

【SpinalHDL快速入门】4.4、基本类型之Enum

文章目录 1.1、描述1.2、声明1.2.1、编码1.2.2、示例 1.3、运算符1.3.1、比较&#xff08;Comparison&#xff09;1.3.2、类型&#xff08;Types&#xff09;1.3.3、类型转换 1.1、描述 枚举类型对应于命名值列表。 1.2、声明 枚举数据类型的声明如下&#xff1a; object E…

vscode搭建Python环境

文章目录 安装Python解释器vscode 所需插件PythonCode Runner vscode调试Python官网的中文文档 安装Python解释器 打开Python官网 https://www.python.org/ 在 Downloads 下面选择自己的对应系统&#xff0c;本文以 Windows 为例 可以选择最新版本 下载可执行文件类型的安…

【Linux服务器编程总结】网络编程基础知识 (udp初级)

一.预备知识 1.主机字节序和网络字节序: 其实本质就是大小端。通常在网络传输的时候会将要发送的数据转同一转换成大端后再发送。在linux中提供了如下四个函数进行大小端转换。 2. 网络套接字&#xff1a; 我们在网络编程的时候会使用到socktet 套接字。对此我们需要了解so…

SQL语句之DQL语言(一)

说明&#xff1a;DQL&#xff08;Data Query Language&#xff0c;数据查询语言&#xff09;&#xff0c;用来查询数据库表中的记录。有的书中&#xff0c;会把DQL语言放入到DML&#xff08;Data Manipulation Language&#xff0c;数据操作语言&#xff1a;数据的增删改&#…

初识TypeScript -基础一

前言 在开始工作之前&#xff0c;就听朋友提过TypeScript&#xff0c;之前也没多想学习&#xff0c;直到vue3出来之后&#xff0c;感觉TypeScript 后面会成为主流&#xff0c;只能硬着头皮学学吧。 读完本片文章&#xff0c;你会收获 1、TypeScript的历史及其优势 2、TypeScri…

Day_39关键路径

目录 一. 关于关键路径 1. 有向无环图 2. AOV网 3. 拓补排序 4. 关键路径 二. 如何实现寻找关键路径 三. 关键路径的代码实现 1. 正向计算 1.1 计算每个节点的入度 1.2 拓扑排序&#xff08;计算每个节点最早开始的时间&#xff09; 2. 反向计算 2.1 计算每个节点的出度&…

基于jupyter的线性回归练习

文章目录 练习1&#xff1a;线性回归介绍1 实现简单示例函数1.1 提交解决方案 2 单变量线性回归2.1 绘制数据2.2 梯度下降2.2.1 更新公式2.2.2 实现2.2.3 计算成本J(θ)2.2.4 梯度下降 2.3 可视化成本函数 选做练习3 多变量线性回归3.1 特征标准化3.2 梯度下降 总结 练习1&…

第六章:多表查询

第六章&#xff1a;多表查询 ​ 多表查询&#xff0c;也称为关联查询&#xff0c;指两个或更多个表一起完成查询操作。 ​ 前提条件&#xff1a;这些一起查询的表之间是有关系的(一对一、一对多)&#xff0c;它们之间一定是有关联字段&#xff0c;这个关联字段可能建立了外键…

SciencePub学术 | 人工智能类重点SCIEI征稿中

SciencePub学术 刊源推荐: 人工智能类重点SCI&EI征稿中&#xff01;影响因子高&#xff0c;对国人友好。信息如下&#xff0c;录满为止&#xff1a; 一、期刊概况&#xff1a; 人工智能类重点SCI&EI 【期刊简介】IF&#xff1a;7.5-8.0&#xff0c;JCR1区&#xff0…

chatgpt赋能python:Python如何获取图片的尺寸

Python如何获取图片的尺寸 如果你在使用Python编程&#xff0c;常常需要获取图片的尺寸&#xff0c;本文将介绍如何使用Python获取图片的尺寸&#xff0c;同时还会介绍一些常用的Python库用于图像处理。 PIL库 PIL&#xff08;Python Imaging Library&#xff09;是Python中…

chatgpt赋能python:Python中如何设置空格

Python中如何设置空格 作为一门流行的编程语言&#xff0c;Python被广泛地应用于各种领域。在编写Python代码时&#xff0c;空格的使用非常重要。适当的空格设置可以让代码易读易懂&#xff0c;同时也有助于提高代码的可维护性和可重用性。 什么是空格 在Python中&#xff0…

shell脚本:循环结束语句二

shell脚本-循环结束语句二 二、循环结束语句&#xff1a;1.break&#xff1a;跳出循环。2.continue&#xff1a;3.while&#xff1a;4.until&#xff1a;条件不成立时&#xff0c;跳出循环。5.总结&#xff1a; 三、操作演练&#xff1a; 二、循环结束语句&#xff1a; 1.brea…