【问题标题】:Why is ffmpeg's hstack so much slower than overlay and pad?为什么ffmpeg的hstack比overlay和pad慢那么多?
【发布时间】:2021-01-22 17:01:06
【问题描述】:

我正在使用 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 而不是两个 overlays:

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(版本 N-99816-g3da35b7)和 the standard ffmpeg from brew 的 M1 原生构建上尝试过这个,hstack 都一样慢。

【问题讨论】:

  • 可能是因为第一个输入没有设置有效的 fps。切换hstack中的顺序并检查。

标签: ffmpeg


【解决方案1】:

就像@Gyan 评论的那样,问题是我的两个文件都没有设置有效的 fps。

他们来自Riverside.fm,最近添加了“一致帧率”视频文件输出。使用这些文件使 hstack 导出 3.5 到 4 倍。

我不确定如何在 ffmpeg 中为文件提供有效的帧速率,但现在我知道这就是 hstack 如此缓慢的原因。

【讨论】:

    猜你喜欢
    • 2016-11-12
    • 1970-01-01
    • 2013-02-01
    • 2013-06-05
    • 2019-12-05
    • 2019-06-26
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    相关资源
    最近更新 更多