剪映自动打关键帧

牙叔教程 简单易懂

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

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

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

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

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

关键帧参数的详细解释

mp.weixin.qq.com/s/7GnS3HnXC…

目前的使用效果

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

点击按钮, 即可打关键帧

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

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

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

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


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

第一步 鼠标点选图片

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

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

微信公众号 牙叔教程

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYsk4E4I' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片