我如何通过在ffmpeg minterpolate帧速率中进行混合来减少帧数

问题描述 投票:10回答:2

我正在尝试将某些文件转换为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
2个回答
1
投票

尝试

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参数。也许它只是融合了两个连续的帧?您应该检查这一点,然后尝试一下?


[存在另一个帧速率改变器,更适合与任何I / O帧速率一起使用:

minterpolate

使用运动插值的帧率转换。因此,键入:

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

其他minterpolate参数具有足够好的默认值,以确保良好的混合。用[]检查它们

ffmpeg -help filter=minterpolate

如果要在minterpolate链中添加一些参数,则必须使用':'作为参数分隔符。假设您要使用

运动插值模式

= 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.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

    请参阅上面的链接,因为还有许多其他选项。

0
投票
简单丢帧:
© www.soinside.com 2019 - 2024. All rights reserved.