【问题标题】:How do I reduce frames with blending in ffmpeg如何通过在 ffmpeg 中混合来减少帧数
【发布时间】:2014-03-20 23:25:15
【问题描述】:

我正在尝试将一些文件转换为 ProRes。 转换的一个相当重要的部分是:

  • 将帧数从 60 减少到 30
  • 将每 2 帧融合为一帧,实现更流畅的动作。 (一种简单的运动模糊)

我尝试了-blend 命令,但它未被识别为命令。

-i source.mp4 -r 30 -vcodec prores_ks -profile:v 0 Output.mov

如何在 ffmpeg 中使用混合来减少帧数?

【问题讨论】:

标签: ffmpeg frames frame-rate blending reducing


【解决方案1】:

简单的丢帧:

ffmpeg -i input.mov -r 30 output.mov

使用minterpolate 过滤器插入帧:

ffmpeg -i input.mov -vf minterpolate=fps=30 output.mov
  • 请参阅上面的链接,因为还有许多其他选项。

使用framerate 过滤器插入帧:

ffmpeg -i input.mov -vf framerate=fps=30 output.mov
  • 请参阅上面的链接,因为还有许多其他选项。

【讨论】:

  • 对我来说,framerateminterpolate 快 100 倍。
  • 有这样的速度增加是正常的@BenjaminH。一个在数学上建模和一个函数并在某个时间点对每个帧进行采样,而另一个则丢弃帧以对其进行近似。
【解决方案2】:

试试

ffmpeg -h

ffmpeg --help

你会得到一个简短的帮助。请阅读。 :)

试试

ffmpeg -filters

您将获得可用过滤器的列表

试试

ffmpeg -help filter=name

您将获得此过滤器的语法和参数


我已经需要做这样的事情,降低帧率。 如果你这样做了

ffmpeg -i "input" -r outputframerate [video encoding options...] [-y] "output"

注意:括号 [] 中的内容是可选的。

您将有一个简单的帧速率变化,可能会丢失输入帧。 而且,这尤其是你不想得到的。


要在不丢失输入帧的情况下更改帧率,您必须使用视频过滤器

tblend 过滤器混合连续的帧。如果源帧率是目标帧率的整数倍(例如:60→30、75→15、75→25、...),则使用该过滤器

ffmpeg -i "input" -vf tblend=all_mode=average [video encoding options...] -r outputframerate⁽¹⁾ [-y] "output"

⁽¹⁾ 如果我自己没有测试过这个过滤器,我确信输出帧率必须设置在某个地方。 tblend 过滤器没有 fps 参数。也许它只是混合了 2 个连续的帧?您应该检查这一点,并尝试一下吗?


还有另一个帧率转换器,更适合与任何 i/o 帧率一起使用:

minterpolate使用运动插值进行帧率转换。

所以,输入:

ffmpeg -i "input" -vf minterpolate=fps=outputframerate [video encoding options...] [-y] "output"

其他 mininterpolate 参数具有足够好的默认值,以确保良好的混合。用

检查它们
ffmpeg -help filter=minterpolate

如果您想在 mininterpolate 链中添加一些参数,您必须使用 ':' 作为参数分隔符。 假设您要使用 运动插值模式 = blend,而不是默认的 运动补偿插值 (mci),输入:

ffmpeg -i "input" -vf minterpolate=fps=outputframerate:mi_mode=blend [video encoding options...] [-y] "output"

如果您想使用多个视频过滤器,则不能链接 -vf 选项。最后一个将覆盖之前的。您必须(作为过滤器参数的“:”)使用“,”作为过滤器分隔符。例如:

ffmpeg -i "input" -vf minterpolate=fps=outputframerate:mi_mode=blend,filter2=param1=value1:param2=value2[...] [video encoding options...] [-y] "output"

给定过滤器的顺序很重要。


事情已经解决了

ffmpeg 版本 3.2.14-1~deb9u1 版权所有 (c) 2000-2019 FFmpeg 开发者

【讨论】:

  • ffmpeg -i "input" -vf tblend=all_mode=average [视频编码选项...] -r outputframerate⁽¹⁾ [-y] "output" 这个其实很好。比 mininterpolate 好得多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-24
  • 1970-01-01
  • 2013-09-01
  • 1970-01-01
  • 2018-11-18
  • 2019-11-18
  • 1970-01-01
相关资源
最近更新 更多