剪映自动打关键帧

简介: 点击按钮, 即可自动打关键帧

牙叔教程 简单易懂

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

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

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

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

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


关键帧参数的详细解释

https://mp.weixin.qq.com/s/7GnS3HnXCiPO4owgGZLSsA

目前的使用效果

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

点击按钮, 即可打关键帧

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

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

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

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



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

第一步 鼠标点选图片

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

不是说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 行代码


微信公众号 牙叔教程


相关文章
剪映一秒批量打关键帧
剪映打关键帧, 一百张图片, 只需要一秒钟
1618 0
|
虚拟化 Windows
Windows 10 version 22H2 中文版、英文版下载 (2025 年 6 月更新)
Windows 10 version 22H2 中文版、英文版下载 (2025 年 6 月更新)
2955 0
CPU的工作原理基于其内部结构,通过执行指令来完成各种任务
CPU的工作原理基于其内部结构,通过执行指令来完成各种任务
532 3
|
11月前
|
存储 缓存 自然语言处理
智能客服进阶:基于DeepSeek与PHP的多轮对话与上下文管理
本文基于前文构建的DeepSeek和PHP智能客服系统,深入探讨了多轮对话与上下文管理的实现。通过维护会话状态(如使用PHP的`$_SESSION`),系统能记住对话历史,提供连贯的回答。具体案例展示了如何处理书籍推荐及后续查询,如“这本书的作者是谁”。此外,还介绍了优化方向,包括实体识别、对话策略调整和持久化存储,以提升智能客服的复杂需求处理能力。
|
存储 监控 安全
网络设备日志记录
网络设备日志记录是追踪设备事件(如错误、警告、信息活动)的过程,帮助IT管理员进行故障排除和违规后分析。日志详细记录用户活动,涵盖登录、帐户创建及数据访问等。为优化日志记录,需启用日志功能、管理记录内容、区分常规与异常活动,并使用专用工具进行事件关联和分析。集中式日志记录解决方案可收集并统一管理来自多种设备和应用的日志,提供简化搜索、安全存储、主动监控和更好的事件可见性,增强网络安全。常用工具如EventLog Analyzer能灵活收集、存储和分析日志,确保高效管理。
729 5
|
Docker 容器
docker的导入本地镜像和导出本地镜像
本文介绍了如何使用Docker对本地镜像进行导入和导出操作,包括从本地导入`nginx.tar`镜像以及将`open-webui`镜像导出并压缩为`open-webui.tar.gz`。
1474 1
|
JavaScript Java 开发工具
Electron V8排查问题之接近堆内存限制的处理如何解决
Electron V8排查问题之接近堆内存限制的处理如何解决
857 1
|
并行计算 开发工具
【Deepin 20系统】切换cuda版本命令
文章提供了在Deepin 20系统中切换不同CUDA版本的方法,包括删除旧的软链接和创建指向所需CUDA版本的新软链接,并展示了如何查看当前安装的CUDA版本。
298 2
|
存储 分布式计算 Hadoop
【分布式计算框架】Hadoop伪分布式安装
【分布式计算框架】Hadoop伪分布式安装
241 2
|
数据库连接 网络安全 Nacos
Nacos 的配置文件中修改了数据库的连接地址
Nacos 的配置文件中修改了数据库的连接地址