剪映自动打关键帧

news/2024/11/24 21:35:33/

牙叔教程 简单易懂

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

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

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

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

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

关键帧参数的详细解释

剪映 自动打关键帧 AutoHotkey

目前的使用效果

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

点击按钮, 即可打关键帧

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

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

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

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


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

第一步 鼠标点选图片

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

不是说AutoHotkey点不了鼠标,

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

第二步 打起始帧

这个只有两个动作

  • 点击
  • 输入框输入数字

这必然是可以自动化的

第三步 跳转到图片末尾

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

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

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

以此为图片特征

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

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

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

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

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

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

获取图片特征的代码

获取当前图片特征() {图片特征点 := config.剪映.图片特征点center := 图片特征点.centerdistance := 图片特征点.distance; 生成包含九个点坐标的数组points := []for _, yOffset in [-1, 0, 1] {y := center.y + distance * yOffsetfor _, xOffset in [-1, 0, 1] {x := center.x + distance * xOffsetpoints.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 * yOffsetfor _, xOffset in [-1, 0, 1] {x := center.x + distance * xOffsetpoints.Push({ x: x, y: y })}
}

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

实际上我写了四个文件

分别是

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

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

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

微信公众号 牙叔教程


http://www.ppmy.cn/news/253828.html

相关文章

icall,bcall,ecall

icall:就是一般性的道路服务了,通过车载平台拨打给客服做一些服务,比如导航等. bcall:是道路救援,比如汽车抛锚了 ecall:出事故自动拨打,防止车主已经没有自主能力拨打电话 tbox2.0:和server端,都是通过udp,socket方式,server主…

O(1) LCA

基本思想 按欧拉序将子树对应映射到序列上&#xff0c;求lca(x,y)&#xff0c;pos[x]--pos[y]中深度最小的点就是答案。 具体实现 先dfs一遍&#xff0c;处理出深度并完成映射。 然后用st表求出区间深度最小的点。 最后回答模仿st表即可。 代码 #include<iostream>…

基于单片机MAX30100血氧、心率检测系统设计-整套资料

基于美信MAX30100/MAX30102传感器设计的血氧和心率检测&#xff0c;以单片机STM32F103CBT6为主控核心&#xff0c;其中涉及电源模块、心率血氧模块、蓝牙模块。电源模块是提供所有系统的供电&#xff0c;心率血氧是整个系统功能的实现&#xff0c;MCU读取心率血氧信号&#xff…

【OCC学习10】ANC101.tcl脚本解读

在OCC的sample\tcl目录下有很多tcl脚本&#xff0c;是学习Draw很好的资源。本文分析一下ANC101.tcl脚本&#xff0c;学习基本的CAD建模方式。最终的成品见下图&#xff1a; 建模核心流程先创建合适的体&#xff0c;不断进行布尔运算得到想要的结果&#xff0c; 局部进行倒角操作…

单片机设计_心率血氧仪(STM32 TFT液晶屏)

想要更多项目私wo!!! 一、电路设计 此电路有STM32最小系统板、TFT液晶屏、MAX30102传感器和蜂鸣器电路组成。 硬件资料 MAX30102是一个集成的脉搏血氧仪和心率监测模块。它包括内部发光二极管&#xff0c;光电探测器&#xff0c;光学元件&#xff0c;以及低噪音的电子设备。M…

ECALL,BCALL,ICALL

eCall的基本原理可以描述为&#xff1a;在发生车祸的时候&#xff0c;车载系统自动拨打紧急呼救电话&#xff0c;同时通过语音通道将车祸相关信息发送到呼叫中心。 这里面有3个名词&#xff0c;看英文文档的时候经常会用到&#xff0c;翻译如下&#xff1a; 车载系统&#xff…

TCL和ELTCL?CDNEXT和CMRL?

2022年4月8日&#xff0c;一客户来电咨询在使用DSX2-8000选择测试标准的时候有“PoE”和“All”选项&#xff0c;不知和普通不带此符号的标准的区别在哪&#xff1f;不得不提的是&#xff0c;这和之前DTX系列&#xff0c;比如DTX-1800&#xff0c;测试结果区别所在了&#xff0…

TCL 基础

置换 TCL 解释器运用规则把命令分成一个个独立的单词&#xff0c;同时进行必要的置换。 TCL置换分为以下三类&#xff1a; 变量置换&#xff1a;$ TCL解释器会认为 $ 后面为变量名&#xff0c;将变量置换成它的值。 命令置换&#xff1a;[ ] [ ]内是一个独立的TCL语句 set a…