剪映自动打关键帧

news/2024/5/20 14:16:25/文章来源:https://blog.csdn.net/snailuncle2/article/details/131078787

牙叔教程 简单易懂

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

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

  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.luyixian.cn/news_show_690750.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Azure Log Analytics:与Power BI集成

注:本文最初发布于https://d-bi.gitee.io, 2023年6月迁移至CSDN 前述 Azure Log Analytics是Azure Monitor中的一项分析服务。本文将讲述通过Log Analytics与Power BI集成的方式,获取Power BI工作区内的日志信息,包括各PBI数据集的CPU消耗&a…

Web安全总结

目录 网站架构一般web服务器结构相比于传统的网络攻击,基于web的攻击有什么不同?HTTP协议HTTP响应拆分攻击HTTPS针对HTTPS协议的攻击那么如何保证证书的唯一性? HTTP会话Cookie和Session的关系HTTP会话攻击解决方案 Web访问中的隐私问题Web应…

chatgpt赋能python:Python如何空一行:介绍

Python如何空一行:介绍 在Python编程中,经常需要在输出文字或代码时进行空行分隔。一个常用的场景就是在代码中加入注释,将注释与代码分开,使代码逻辑更加清晰易懂。在某些情况下,也需要在输出文字时进行空行分割&…

ChatGPT-Plugins-Searchable

ChatGPT Plus 用户应该都知道Plus已经开放了插件功能,但是在插件商店里存在一个较大的问题插件数量超过100款,却没有便捷的搜索功能。 而我们在查找一款插件时,需要从插件商店的第一页点击到最后一页一个个找,显然这非常的麻烦。 …

JUC基础-0606

9.ReentrantReadWriteLock读写锁 9.1 锁的基本概念 悲观锁:不支持并发,效率低,但是可以解决所有并发安全问题 乐观锁:支持并发读,维护一个版本号,写的时候比较版本号进行控制,先提交的版本号…

【Vue】三:Vue组件: 组件使用和组件嵌套

文章目录 1.第一个组件1.1不使用组件前1.2创建组件1.3注册组件1.4使用组件1.5 细节 2.组件嵌套 1.第一个组件 1.1不使用组件前 1.2创建组件 Vue.extends({该配置项和new Vue的配置项几乎相同})区别: (1)创建Vue组件的时候,不能使…

Kubernetes之pod

Kubernetes之pod 在通过docker运行程序时,我们通常会制作Dockerfile文件构建镜像。也可以基于某个镜像运行容器在容器中安装组件之后,再基于容器生成镜像 使用如下命令可生成镜像,想了解更多参数请添加–help docker build -f Dockerfile路…

【Leetcode -138.复制带随机指针的链表 -2130.链表最大孪生和】

Leetcode Leetcode -138.复制带随机指针的链表Leetcode -2130.链表最大孪生和 Leetcode -138.复制带随机指针的链表 题目:给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。 构…

4种普遍的机器学习分类算法

朴素贝叶斯分类 朴素贝叶斯分类是基于贝叶斯定理与特征条件独立假设的分类方法,发源于古典数学理论,拥有稳定的数学基础和分类效率。它是一种十分简单的分类算法,当然简单并不一定不好用。通过对给出的待分类项求解各项类别的出现概率大小&a…

企业应该如何选择适合自己的直播平台?

企业应该如何选择适合自己的直播平台?本文将从功能需求、可靠性与稳定性、用户体验、技术能与售后服务能力等方面进行综合考虑,帮助您做出明智的决策,或是说提供选型方面的参考。 企业在选择一家直播平台时应考虑以下因素: 1. 企…

【链表的分类】

链表是一种常用的数据结构,它由一系列节点组成,每个节点包含一个数据元素和指向下一个节点的指针。根据节点的连接方式和节点的性质,链表可以分为多种类型。 单向链表(Singly Linked List) 单向链表是最基本的链表类…

PyGame游戏编程

Python非常受欢迎的一个原因是它的应用领域非常广泛,其中就包括游戏开发。而是用Python进行游戏开发的首选模块就是PyGame。 1. 初识Pygame PyGame是跨平台Python模块,专为电子游戏设计,包含图像、声音等,创建在SDL(…

sms开发文档

sms系统设计参考毕业设计-----------学生选课管理系统的设计 一、使用axios 来实现网页中ajax请求 首先说到axios,是一个类库,他的底层基于ajax库,通常用于ajax请求 ajax又是什么 ajax是一种创建快速动态网页的技术, 传统的页…

LeetCode 24. 两两交换链表中的节点

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 示例 1: 输入:head [1,2,3,4] 输出:[2,1,4…

chatgpt赋能python:Python如何使用空行优化SEO

Python 如何使用空行优化 SEO 在网页排名算法中,空行的使用可以对网页的排名产生影响。在 Python 中,空行的使用也被用来优化代码和提高代码的可读性。本文将介绍如何在 Python 中使用空行来优化代码和优化 SEO。 空行的作用 在 Python 中&#xff0c…

直播问答功能(互动功能接收端JS-SDK)

功能概述 本模块主要用于展示问答模块。 初始化及销毁 在实例化该模块并进行使用之前&#xff0c;需要对SDK进行初始化配置&#xff0c;详细见参考文档。 在线文件引入方式 // script 标签引入&#xff0c;根据版本号引入JS版本。 <script src"https://websdk.vi…

OA系统,企业数字化转型的重要工具,用现成还是自己搭建呢

什么是OA系统 OA系统是办公自动化系统的简称&#xff0c;它是指一种基于计算机技术的办公工作管理系统&#xff0c;用于协调和规划企业内部各部门的信息发布、通信、人员流动、文档管理等方面的工作。它可以有效地提高企业办公效率和工作效益&#xff0c;优化企业内部沟通协作…

Java之旅(五)

运算符 算术运算符 加法&#xff08;&#xff09;减法&#xff08;-&#xff09;乘法&#xff08;*&#xff09;除法&#xff08;/&#xff09;取余&#xff08;%&#xff09;一元运算符 自增运算符&#xff08;&#xff09;自减运算符&#xff08;--&#xff09;变量前就先运…

元宇宙应用领域-教育

教育是一个国家发展的基础&#xff0c;在科技发展的时代&#xff0c;元宇宙将会帮助教育行业实现跨越式发展。 元宇宙与教育的结合将会对传统的教学模式带来翻天覆地的变化。它能将线上教学、线下体验、远程互动等优势集于一身&#xff0c;也能把教师从繁重的重复劳动中解放出…

公司来了个新的测试员,本以为是个菜鸡,没想到......

最近公司来了个新同事&#xff0c;学历并不高&#xff0c;而且大学也不是计算机专业的&#xff0c;今年刚满30岁。。 本以为也是来干点基础的活混混日子的&#xff0c;结果没想到这个人上来就把现有项目的性能测试了一遍&#xff0c;直接给公司节省了不少成本&#xff0c;这种…