【问题标题】:Using ffmpeg to encode a high quality video [closed]使用 ffmpeg 编码高质量视频 [关闭]
【发布时间】:2011-04-03 11:12:34
【问题描述】:

我有一组视频帧保存为目录中的图像,我正在尝试将它们编码为高质量的视频,但是我尝试的每种设置和每种格式都会产生非常明显的伪影。

基本命令是这样的:

ffmpeg -r 25 -i %4d.png myvideo.mpg

我已经尝试了 minrate 和 maxrate 标志。任何 {mpg, avi, mov, flv} 格式都可以。

对设置有什么建议吗?最终文件大小不是问题。

【问题讨论】:

  • 在我的 Mac 上,我使用以下命令:ffmpeg -r 20 -f image2 -i myImage%04d.png -f mp4 -q:v 0 -vcodec mpeg4 -r 20 myVideo.mp4。我发现要强制帧速率,我必须为输入和输出文件指定它。这个编解码器似乎对我有用——你可能不需要指定它。我只是想包括我所做的,因为我已经花了很多时间来研究它。唯一的缺点是我的输入图像对比度很高(白色背景上的蓝色和红色球),而在电影后期,这些球开始全部变成相同的深色——一种不需要的对比效果。
  • 谢谢@jvriesem!这对我很有用。
  • 我建议在StackOverflow for Multimedia Systems提出这个问题
  • c++ 版本 stackoverflow.com/a/43464269/6180077 访问此链接以获取工作 FFMPEG c++ mp4 格式的屏幕录像机应用程序。
  • 查看此链接,该链接演示了以编程方式使用 FFMPEG 库编写视频文件:stackoverflow.com/a/43464269/6180077

标签: video ffmpeg video-encoding


【解决方案1】:

有几点:

  • 您需要设置视频比特率。我从未使用过 minrate 和 maxrate,所以我不知道它们是如何工作的,但是通过使用 -b 开关设置比特率,我可以获得高质量的视频。你需要想出一个比特率,在压缩和视频质量之间提供一个很好的权衡。您可能需要对此进行试验,因为这完全取决于视频内容中的帧大小、帧速率和运动量。请记住,对于 720x480,DVD 的平均速度往往在 4-5 Mbit/s 左右,所以我通常从那里开始并决定是否需要更多或更少,然后只是进行试验。例如,您可以在命令行中添加 -b 5000k 以获得更多或更少的 DVD 视频比特率。

  • 您需要指定视频编解码器。如果你不这样做,ffmpeg 将默认为 MPEG-1,它已经很老了,并且不提供接近 MPEG-4 或 H.264 的压缩量。如果您的 ffmpeg 版本是使用 libx264 支持构建的,您可以指定 -vcodec libx264 作为命令行的一部分。否则-vcodec mpeg4 也会比 MPEG-1 做得更好,但不如 x264。

  • 还有许多其他高级选项可帮助您以最低比特率获得最佳质量。看看here 的一些例子。

【讨论】:

  • 恒定比特率不利于质量。使用恒定速率因子更好(它是 x264 操作模式之一)。例如:ffmpeg -i … -c:a copy -c:v libx264 -crf 18 -preset veryslow …。 18 是质量损失很小的 CRF,但比特率可能会很低。如果您需要更小的文件大小,您可以尝试更大的 CRF 值。如您所见,这非常简单。
  • 注意 -b 必须在视频之前,但在输入 -i 之后
【解决方案2】:

您需要指定 -vb 选项以增加视频比特率,否则您将获得默认值,这会产生较小的视频但具有更多的伪影。

试试这样的:

ffmpeg -r 25 -i %4d.png -vb 20M myvideo.mpg

【讨论】:

    【解决方案3】:

    在创建视频之前确保 PNG 完全不透明

    例如使用 imagemagick,给它们一个黑色背景:

    convert 0.png -background black -flatten +matte 0_opaque.png
    

    根据我的测试,如果您提供具有透明度的 ffmpeg PNG,则任何比特率或编解码器都不足以使视频看起来不错

    【讨论】:

    • 这解决了我的问题。
    • 这个提示解决了一个非常烦人的低视频质量。非常感谢。
    • 如果制作具有透明度的视频会怎样?
    【解决方案4】:

    除非您进行某种后期处理工作,否则视频永远不会比原始帧更好。就像翻书一样,如果你在关键帧之间有一个很大的“跳跃”,它看起来会很有趣。您通常需要在关键帧之间有足够的“补间”来提供流畅的动画。高温

    【讨论】:

    • 图像最初来自视频序列。他们刚刚使用 imagemagick 进行了一些裁剪、缩放和其他操作。效果肯定是压缩伪影。现在看到这个帖子,好像有答案了:stackoverflow.com/questions/3158235/…
    • @CakeMaster 我没有提到有损压缩,因为您的示例中有“.png”图像。 .png 可能是有损的,但我发现它们通常不是。 .jpg 几乎总是有损的,因此使用它们时会出现伪影。如果可以的话,您可以使用无损压缩重新保存您的 .png。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-07
    • 2021-10-27
    • 2015-03-24
    • 1970-01-01
    • 2016-09-17
    • 2013-03-15
    相关资源
    最近更新 更多