【问题标题】:Is it good to use minterpolate in FFmpeg for reducing blurred frames在FFmpeg中使用mininterpolate来减少模糊帧是否很好
【发布时间】:2022-03-31 01:09:03
【问题描述】:

我正在使用 FFMPEG 从视频中分割 png 文件。

根据某些视频元数据,我将 fps 的视频切片在 1-3 之间。 我可以看到,当视频中的主体快速移动或相机不稳定时,我会得到模糊的帧。我尝试研究如何解决它(这些帧的质量是我的主要目标)并解决了 mininterpolate 选项。

我认为,如果我将使用混合选项,这意味着 3 帧变为 1 帧,模糊对象的“噪点”将会减少。

所以我现在的命令是这样的:

./ffmpeg -i "/home/dev/ffmpeg/test/input/@3.mp4" -vf minterpolate=fps=1:mi_mode=blend,mpdecimate=hi=11456:lo=6720:frac=0.5 -vsync 0  "/home/dev/ffmpeg/test/output/3/(#%04d).png"

我说的对吗?你有没有更好的方法来使用 FFMPEG 来解决我的问题?

【问题讨论】:

  • 如果您的目标 fps 是原始 fps 的除数(例如,对于原始 fps=30,您可以选择目标 fps 1、3、5 等;对于 original=10,您可以选择 1、2 , 5) 您不需要插值,只需使用原始视频帧即可。如果您只从视频中选择每第 n 个原始帧而不进行插值,您也可以使用分数 fps(例如每 2 秒 3 帧)来实现这一点。
  • @Oliort。谢谢。您能否分享一个使用 FFMPEG 每 2 秒选择 1 帧的示例?

标签: image-processing ffmpeg mpdecimate


【解决方案1】:

如果在 ffmpeg 中使用mci 方法,而不是blend 方法,可以创建更好的插值结果。还有更先进的技术可用。

如果我对您的理解正确,您在两个非模糊图像之间有一个模糊图像(我们称之为 B,在中间)(我们称它们为左侧的 A 和右侧的 C)。现在您想用非模糊版本的 B 替换中间帧 B。

minterpolatefilter 用于在 ffmpeg 中进行插值。它有两种不同的方法。 blend 模式,A 淡出,C 淡入,为 B 生成新图像。

混合

如果我使用ffmpeg -i %02d.png -framerate 10 -vf minterpolate=fps=20:mi_mode=blend test-%02d.png 运行它,我会得到以下图像。

运动估计

您还可以使用运动估计或mci 模式,它允许您进行基于运动的插值。您可以通过更改模式来调用它:ffmpeg -i %02d.png -framerate 10 -vf minterpolate=fps=20:mi_mode=mci test-%02d.png 在中间生成一个圆圈。

走得更远

ffmpeg mci 模式使用classic 算法。有一些更高级的基于optical flowneural network 的方法可用。这可以提供更好的results 与更复杂的图像和更复杂的运动场。

【讨论】:

  • 非常感谢!这是我在 StackOverflow 中收到的信息量最大且最重要的答案:)感谢。
  • 非常感谢您如此顺利地解释不同方法的努力......谢谢伙计,这对我真的有用?
  • 这个答案太棒了
猜你喜欢
  • 1970-01-01
  • 2015-06-12
  • 1970-01-01
  • 2016-04-16
  • 2016-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多