我正在使用 ffmpeg 将两个人聊天的视频并排拼接成一个视频,如下所示:
这是我目前用来完成这项工作的命令,它在我的 13"M1 MacBook Pro 上以大约 2.5 倍的速度运行:
ffmpeg -y -i left.mp4 -i right.mp4 -filter_complex "
[0:v] crop=w=in_w/2 [croppedLeft];
[1:v][1:v] overlay=x=overlay_w/4 [shiftedRight];
[shiftedRight][croppedLeft] overlay [vout];
[0:a][1:a] amix [aout]
" -map "[vout]" -map "[aout]" -ac 2 out.mp4
此命令将左侧视频裁剪为其原始宽度的一半(裁剪使视频居中),然后将右侧视频向右移动其宽度的四分之一,然后将左侧视频覆盖在输出的左半部分与右移视频合并。
有一天在我每周的娱乐时间通读 FFmpeg filters documentation我偶然发现了一个名为 hstack
的过滤器,这被描述为“比使用覆盖和垫过滤器创建相同的输出更快。”
我的前妻可以肯定,在我的生活中没有什么比走得更快更重要的了,所以我修改了我的 ffmpeg 脚本以使用 hstack
而不是两个 overlay
:
ffmpeg -y -i left.mp4 -i right.mp4 -filter_complex "
[0:v] crop=w=in_w/2 [croppedLeft];
[1:v] crop=w=in_w/2 [croppedRight];
[croppedLeft][croppedRight] vstack [vout];
[0:a][1:a] amix [aout]
" -map "[vout]" -map "[aout]" -ac 2 out.mp4
...但是该命令运行缓慢痛苦,比如 0.1 倍。渲染一秒钟需要几分钟。
那么呃这里发生了什么?为什么 hstack 本来应该更快,却花了这么长时间?
我已经在 OSXExperts 的两个 M1 原生版本上尝试过这个(版本 N-99816-g3da35b7)和 the standard ffmpeg from brew hstack 在每个上都一样慢。
最佳答案
就像@Gyan 评论的那样,问题是我的两个文件都没有设置有效的 fps。
他们来自Riverside.fm ,最近添加了“一致的帧率”视频文件输出。使用这些文件使 hstack
的导出速度在 3.5 到 4 倍之间。
我不确定如何在 ffmpeg 中为文件提供有效的帧速率,但现在我知道这就是 hstack
如此缓慢的原因。
关于ffmpeg - 为什么 ffmpeg 的 hstack 比 overlay 和 pad 慢那么多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65849531/