|
|
本帖最后由 kli 于 2026-7-29 01:10 编辑
找 AI 用 python 写的 FFmpeg GUI 外壳
契机是 HandBrake 又又又又又又又又又换了.NET 10(软件开发框架) ,我的老Windows 10 ltsc 2021 装了.NET 10 ,运行 HandBrake还是要报错, 我当时就在想,一个破 FFmpeg 的外壳, 需要这么追新吗?
然后在52pj看到了另外一个 FFmpeg的 gui外壳 https://www.52pojie.cn/forum.php?mod=viewthread&tid=2099752&highlight=FFmpeg
也是用的.NET 10 ,我又用不了 -- 20260613 换方法运行体验了下上面这个,感觉好难用啊,进界面是队列,但是队列界面不能添加文件,如此种种.... 然后还会释放一个驱动,不知道一个FFmpeg外壳弄个驱动是要干嘛,膈应人,必须用powertool等内核软件才能删除
我一气之下就气了一下, 借着这个拼接命令的灵感 ,找 ai 根据我以前用的一个bat(里面是我各种FFmpeg命令的 的模版,每次都手动改了goto1234保存在发送文件运行) 写一个简易GUI
第一个版本居然就实现了我大部分的想法
后续又和Ai聊了半个月添加了各种功能,感觉已经实现了HandBrake 90% ,启动还快
第二页是轻量的mkvtoolnix, 没有实现轨道的默认 语言 这些设置, 只有简单的流复制和转码合并 ,画中画功能是聊了很久才聊成功的, 免费的ai不行,我也不会写代码,找bug都没办法
后续也是有点聊不动了,主要代码量有点多了,每次免费ai都偷工减料要我自己替换,不给我一次输出全部的,python的缩进又严格,天天出bug
可能不会更新别的功能了,现在的我自己是够用了,在复杂点我都直接去用shotcut了
使用硬件编码 (那些带_nvenc amf显卡后缀)的模式时,需要`FFmpeg`和显卡`api`对应,如果失败可以下载旧版 `FFmpeg` 或者更新显卡驱动重新尝试。后续会增加自定义`FFmpeg`目录功能
20260726 现在真感觉没啥可以更新的了
用的github预编译自动打包的,简单测试了下,好像没问题
需要自己准备FFmpeg全家桶
https://github.com/BtbN/FFmpeg-Builds/releases
推荐下载share版本的,因为我3个程序都用上了,共享运行库的版本体积小点,就是文件琐碎点
单文件版的每个都包含了全部运行库,加起来多了2倍体积,不推荐
国内 GUI外壳下载地址, 内附 FFmpeg 和一个mpv播放器脚本(无损切割和分段时间获取)
https://wwbow.lanzouu.com/b009i236id
密码:ccy5
有小更新,画中画从视频流添加了图片支持,用来添加水印,以前的那个也可以,只需要先把图片转成一个视频...
github地址,有pyw脚本源码,太长了,贴不出来,想要自己找ai话聊改功能的自己去下载吧
https://github.com/kli2013/FFmpegLiteGUI
小更新了下,添加了画中画时从视频流图片支持
画中画现在可以添加图片作为水印,初衷是舞台多机位融合的,后来才想起来最常用的功能是打水印
20260601更新了一些功能
1、mpv预览,mpv播放器可以拖动进度条,这样可以填截取时间
2、画中画功能添加了简易的绘制框,这样就能代替预览查看主从视频的位置和偏移,绘制和预览的时候会自动应用当前的裁剪属性(锁定绘制比例),应用后会自动更改缩放里的数值,
如果绘制框没有实时应用新的缩放比例,先保存一下重新打开,可以用iw/2测试,这个时候绘制框和预览框应该是显眼的一长条,
如果要用新裁剪重新绘制矩形,先关闭上一次的缩放(取消勾选)
多个从视频位置都可以相互预览
-20260624更新
第一页转换页面也加上了水印功能,在高级里,以前一直围着第二页合并页的画中画打转,忽略了第一页里的批量加水印应用场景
-20260701更新
1、可视化裁剪增加根据时间重新获取画面的功能,在外部设置页面启用了截取并设置了时间,可视化裁剪会直接使用该时间启动窗口
2、截取添加了 -ss 在 -i 之后的精确到帧模式(必须转码), 以前只是简单的集成截取,默认的 -ss 在 -i 之前的快速模式,这个模式可以copy无损截取,就是前后可能2-3秒出入,基于关键帧就近原则
3、附带了一个外挂程序,可以快速的给水印(画中画)编辑运动轨迹,支持多轨道一起,但是不建议搞太多,因为命令太长可能会达到FFmpeg的命令字符上限
尝试集成到主程序里的,但是每个轨道都要单独打开编辑,感觉太慢了,所以还是独立出来,反正用的人估计也不多
4、因为附带了外挂程序,所以改用文件夹模式打包,解压后结构是 程序exe和一个子文件夹_internal
FFmpeg三件套可以放exe同目录,也可以放_internal子文件夹里,当然最好的地方是系统的环境变量里, 环境变量里可以给其他程序用
报告一些已知bug
1、偶尔在子窗口打开太多又忘了关闭时,会窗口沉底,alt+tab切换不出来也唤醒不了,可以在任务管理器里找到进程右键置顶唤醒, 或者直接结束进程重新打开
2、因为前期集成水印功能时,为了解决动态水印和主视频时间不匹配,使用了无限循环,但是会结束不了转换进程(因为在无限输出),所以引入了shortest=1参数, 作用是按最短时长的视频结束, (主视频<无限循环) = 按主视频时间
shortest=1参数导致了一个问题是,
如果截取和水印功能一起使用,截取的-t会被shortest=1行为覆盖,转换结果会错乱,
比如一个15秒的主视频, 从3秒开始截取,同时开启水印(画中画), 转换结果会还是15秒, 不过会在12秒时定格, 也就是画面可能正常截取了,但是音频没有
其他错乱情况一时忘了
感觉要十分精通FFmpeg命令才能解决这么复杂的情况, 我截取功能用的太少 ,搅尽脑汁搞定水印的各种显示行为都谢天谢地了
总之,使用截取时不要同时打水印(画中画) ,真有这种复杂需求,最好分步骤先预处理或者直接使用其他非线性视频编辑器(pr、shotcut、剪映)
-----附赠2个图片处理小程序(转换和切割),逻辑都是先设置模板,然后按当前模板导入新图片到列表,列表里可以是不同的转换设置,
比如同一批图片有的想左转有的想右转,其他大部分转换程序都必须转完一批在重新添加一批,我这个程序的设计思路就可以一起添加完在同时转换
没有图片拼接是我不知道怎么把我的拼接思路描述给ai....(平时拼图片的情况少,没有相关体会)
-20260701 上传了个fix test版本,尝试解决截取问题
以前用的关键帧模式,所以无法计算准确时间,必须用shortest=1让FFmpeg自动兜底
但是精确模式下,好像能计算准确时间了,所以在精确模式下取消shortest=1,而是尝试计算每个对象的准确时间
优先解决的是转换页面,主视频启用了精确截取,就自动给音频也添加相关截取滤镜
合并页面的因为所有轨道都独立,联动相对复杂,音频轨道也可能更多,所以给音频新加了单独的截取设置, 在给主视频轨道截取的时候请手动给音频流添加同样的截取参数
主要平时截取功能用的太少了,我想不到更多的测试方法, 其他功能也希望有反馈
-20260707 水印问题好像都解决了
子视频/水印截取时从全局循环改为单独循环,测试了10多种情况,几乎覆盖完了所有场景,感觉没问题了,
唯一不完美的是截取后的片段循环时,首尾交接有点跳帧,暂时不知道原因
-20260717 更新汇总
1 自动去黑边现在会自动根据截取的起始时间获取相应片段的黑边,以前一直都是开头,不是很方便
2 可视化裁剪的缩略图从原始ppm换成了png,减少了读写次数和临时文件体积,8k视频测试下,显示窗口慢了0.1秒,相比减少的95%体积可以接受
3 转换页面添加了分段截取然后合并的功能,典型应用场景是去掉视频内部的广告,然后把2边组合起来,暂时只有精确帧模式,需要强制转码
4 合并页面添加了首尾串接模式,无损copy的时候使用 concat -i xxx.txt ,需要列表里的视频参数基本一致,不然可能会导致第一个视频播放完,后面连接的视频时间乱跳, 不确定素材参数就还是用转码模式吧
串接模式下的子视频一定要保留子视频的音频流 后续版本更新了个静音填充功能
以前只能并行封装合并,现在可以串行连接了,
个人使用场景是给某些短视频鬼畜重复几次, 因为是同一个文件,可以用无损copy,
其他视频连接需要测试,先无损copy连接,播放没问题就不管,有问题就换编码模式重新连接
5 增加了一些编码预设参数的选择(tune profile之类的)和 更多的高级滤镜 (降噪 锐化之类的)
6 精简了一些保存到预设的参数,然后把水印的参数独立出来单独保存,主预设里应该只保存编码质量之类的,时间、水印设置等现在都屏蔽了
-20260718
合并页面的拖拽行为优化,以前只有画中画模式,用按钮一个一个添加不觉得很麻烦,现在有串接模式了,大量要连接的还用按钮就太慢了
1 普通模式,拖拽单个或者多个视频,会询问那个为主视频,或者单纯只添加音频流(all)
2 画中画模式,拖拽单个或者多个,会询问是否一并添加音频流,否则只会添加视频流(图片),作为水印/子视频,画中画模式不会添加字幕流
3 串行模式,什么都不会问,会把拖拽文件里所有的流全添加进列表
-20260719
1 针对长视频的截取,添加组合跳转功能,一个 -i 前后双-ss的应用,
因为是前后-ss,后面的-ss在有第二个-i 时无法区分是作用于第一个还是第二个,所以该功能只能用于单个视频
2 引入预览防抖和数据缓存,解决一直存在的一个问题
水印模式下,手动在所有数据框输入都有点卡
以前一直都没发现,现在尝试改善
3 基于 -t 和 shortest 相互的纠葛,预设的按各种场景分支使用这2个参数可能无法覆盖所有情况
引入手动 -t 来兜底的方法,转换页面可以直接使用自定义参数追加 -t
合并页面在添加视频按钮后面加了个选项
-2026-07-20
1. 更改追加的这个 -t 功能的描述,因为不是用来精确控制的,原来的trim等已经能做到精确, 这个追加的 -t 是给我没想到的循环参数截断失败场景兜底的,现在已经够多判断了,但是我还是怕有没想到的
2. 增加了一个全局的停止FFmpeg进程的按钮,在信息页面里, 当在我没想到的场景里,输出无限循环不停止时,就可以用这个按钮发送q,优雅结束FFmpeg进程,避免去任务管理器找
3. 串接模式下,给每个视频添加可选静音填充功能,防止无音频视频在中间串接后前后音频错位,在视频流编辑窗口的新选项卡 音频绑定 里
- 不过更推荐的还是预先给无音频的视频封装一个静音后再来串接, 预处理后可以用无损 copy 串接, 不然只能重编码
4. 信息页面添加一个快速命令区,以前有临时修改的我都复制出去,打开cmd运行, 现在可以直接在这临时框里改了运行
-2026-07-21
1. 合并页面的普通模式下,给音频编辑添加混合选项,可以实现类似演唱和伴奏混和到一起的功能
2. 补充几条测试文件生成命令
3. 快速命令工具的输出目录,使用浏览按钮选择时会保存在预设里持久化,方便下次直接输出
- 修复快速工具启动的进程不会被停止按钮关闭的问题
4. 今天测试硬件编码的时候失败了,最后发现是FFmpeg和显卡api不兼容,下了个旧版FFmpeg可以用了,所以添加了一个自定义FFmpeg目录功能,方便切换版本
5. 缩放添加了个交换按钮,规范了一些路径显示
-2026-07-22
1. 修正gif 循环参数,以前错误的添加为普通图片的参数
2. 抠像添加滤镜切换, 色度键 和 纯色
3. 优化界面显示,为新手添加大量悬停提示,增加理解和防止歧义
4. 快速命令工具的预设命令添加大量冷门应用示例,并把命令外置,可以自己编辑增减,编辑出错可以删除`quick_cmds.json`,重启程序后会重建默认命令
5. 音频混合模式下补 -shortest 约束
-2026-07-23
1. 队列里已完成任务,现在不满意可以重新编辑了, 以前需要清空重新拖入
2. 合并主视频、从视频、水印的可视化位置编辑器,从视频和水印的逻辑现在相同了,以前水印的是简易实现,导致主界面打水印和画中画打水印体验不同
3. 转换页面主视频增加音频流检测, 现在没有音频的视频自动加 -an ,避免转换报错
-2026-07-24 早
1. 变速后面增加一个倒放滤镜 转换页面和 合并页面都各种测试通过 可能有遗漏情况
2. 高级增强里补上亮度、对比、饱和、伽玛、色相、色饱和度滤镜
3. 放宽分段拼接的时间阈值为0.001秒,以前太严格了,导致就算时间填写准确,并且看起来一样,也可能因为浮点小数超过而跳过
4. 修复水印和画中画的可视化位置编辑器对主视频尺寸的获取,以前一直都是原始尺寸,现在获取滤镜最终尺寸
-2026-07-24 下午
1. 改进和修复预览功能
2. 串联的重编码模式在最后一步统一引进全局滤镜(来源主视频),简单化,不然串联的每个视频都单独处理,就太非线性编辑了,而且很慢,还不如预先单独处理最后来copy串联
3. 分段拼接也补上全局滤镜
4. 修复变速功能想输入0.5时,刚输入0 就触发循环计算bug卡死, 现在0先忽略
5. 修复水印的重新绘制矩形功能,考虑水印本身的旋转,钳制新矩形比例
6. 修复部分功能的硬件解码参数添加
7. 修复分段拼接的仅音频判断
8. 修复部分刷新绑定
9. 修复gif编码功能 昨天修改少传递了个参数,导致功能丢失
-2026-07-25
1. 修复冷门编码的编码预设功能
2. 调整了滤镜处理顺序,修复了缩放和旋转同时启用后某些情况转换结果不符合期望的情况
3. 画中画模式的音频倒放改为独立控制
4. 音量控制现在改为普通模式和画中画模式都可用,以前只有在普通模式下的音频混合下才能用
快接近终结版了,功能上感觉没啥能加的,现在只能修修bug,但是我一个人自用发现bug的效率又比较低
-2026-07-26
1. 分段拼接的列表不扩展利用一下有点可惜,所以在分段拼接设置窗口下面添加了简易的分段切割功能,万一有人用的到呢
2. 优化预览功能,现在能正确跳转到截取选择的片段播放,ffplay基于关键帧,起始时间太短可能体验不到跳转效果
找AI话聊把自用的平替losslesscut的mpv脚本改造了一下,以前所有快捷键全暴露在外面挤占mpv本身的快捷键
现在只有 ctrl+m 是常用, n是条件占用,其他按键都是ctrl+m 进入标记模式才生效, 当条件关闭时,不让n暴露在外面, 那么就只有ctrl+m一个快捷键占用mpv本身快捷键
分享出来是为了增加FFmpegLiteGUI的易用性, 脚本标记时间后按v可以输出所有时间到剪贴板, 就可以在程序的分段拼接窗口右边输入,然后一次性分析导入所有片段
下载video_cut.lua 放到 mpv 的 portable_config\scripts\ 目录里, 可以打开脚本查看注释, 里面写了更详细的用法和介绍
-2026-07-27
1. 添加过滤转换日志无用信息的函数
2. 添加转换进度显示,单个任务和合并在右上日志里,队列的在队列状态里
3. 优化了下转换页面的拖拽行为, 现在拖动文件到上面2个路径框会自动填入, 其他地方才是添加到队列,方便单个文件的添加和转换
4. 添加了个清空按钮 一键清空输入文件和输出目录
-2026-07-28
1. 修复FFmpegLiteGUI程序的分段拼接窗口隐藏的分段切割功能,有几个参数传递错了,导致全是trim拼接模式
2. 升级水印轨迹编排器,现在严格按照原始命令的滤镜顺序,避免出错
然后添加了2个移动模式,
1. 跳跃 (在一个节点停留够时间就跳跃到下一个节点)
2. 混合 (自由决定2个节点之间用什么移动方式)
-2026-07-29
1. 优化不同页面对拖拽文件夹的行为和提示
1. 转换页面,会解析文件夹把合法文件加入队列
2. 合并页面拖拽文件夹全忽略, 3个模式需要自己拖拽各自相关文件
2. 一些小修复
1. 最大比特率和缓冲在其他模式的判断
2. 合并区也添加个手动刷新按钮
3. 快速命令再次增加一些不常用的命令
4. 快速命令增加一个从转换或合并预览区获取命令的按钮,方便修改了运行
3. 预览区的编辑状态加个开关
因为预览区的显示命令和实际运行的是不相关的,胡乱修改也不会影响勾选的那些参数内部运行,
所以我个人是一直开启可编辑的,方便我临时改点参数复制到快速窗口运行
但是为了让第一次使用的人不困惑,所以加个开关,默认关闭,让预览区只读,想开启的在信息页勾选
|
|