ffmpeg - 为什么 ffmpeg 的 hstack 比 overlay 和 pad 慢那么多?

标签 ffmpeg

我正在使用 ffmpeg 将两个人聊天的视频并排拼接成一个视频,如下所示:

left.mp4 + right.mp4 = out.mp4

这是我目前用来完成这项工作的命令,它在我的 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/

相关文章:

java - 关闭应用程序JAVA后ffmpeg工作

android - FFMPEG for Android 从图像中编码视频质量很差(不清楚)

video - 使用 ffmpeg 将带有不连续标记的 HLS 转换为 MP4

iphone - 在 iOS 中将 h263 转换为 h264

ffmpeg - 从 RTSP 流中抓取一系列帧

ffmpeg - 为输出流 #0.0 打开编码器时出错 - 可能是不正确的参数,例如 bit_rate、rate、width 或 height

ffmpeg - FFMPEG 无法丢弃媒体中的无效数据流。为什么它会留下来以及如何丢弃它?

video - ffmpeg调整大小+连接

python - 如何使用ffmpeg和python为给定值(100%以外)的音频创建淡入/淡出效果?

找不到libavcodec.so所需的ffmpeg libswresample.so.2