用于将静止图像转换为视频以进行存档的 ffmpeg 设置

Max*_*rov 2 video ffmpeg video-encoding

我需要将一组静止图像(指向道路的静态摄像机)转换为视频。

我考虑过视频编解码器,例如 Theora、H.264、VP8、VP9、HEVC、Snow。

视频应具有最小尺寸和最大图像质量。现在,从所有可用的命令行参数中,我使用的是帧速率 (fps)、b:v(比特率)和s(宽度*高度)。此外,对于 H.264 和 HEVC,还有-crf-preset

还有哪些其他命令行参数可用于实现我所追求的目标?在 ffmpeg 中,有几十个命令行参数并且解析每个参数可能需要很长时间。

slh*_*hck 6

如果您想要最高质量和最小文件大小,您应该使用压缩效率高的编解码器。但是,您首先必须考虑是否要进行(数学上)无损、视觉无损或有损编码:

  • 无损编码当然会导致更大的文件大小,但它们提供了保留原始数据的好处。然后,您可以从视频中提取单个帧,而不会造成任何质量损失。在这里,可以使用诸如 HuffYUV 或FFV1 之类的编解码器。这些通常用于存档目的,需要保存原始材料,避免产生损失libx264(H.264), libx265(HEVC)libvpx-vp9也可以在无损模式下使用:

    ffmpeg -i <input> -c:v huffyuv output.avi
    ffmpeg -i <input> -c:v ffv1 output.avi
    ffmpeg -i <input> -c:v libx264 -crf 0 output.mp4
    ffmpeg -i <input> -c:v libx265 -x265-params lossless=1 output.mp4
    ffmpeg -i <input> -c:v libvpx-vp9 -lossless 1 output.webm
    
    Run Code Online (Sandbox Code Playgroud)
  • 视觉无损编码会丢弃一些数据,但以一种人类可能不会注意到原始视频和编码视频之间的任何差异的方式保持质量。所谓的“中间”编解码器,例如 ProRes(请参阅此处)通常用于此目的。您还可以使用libx265libx264通过指定足够低的 CRF 值(此处对 CRF 的解释)进行视觉无损编码,例如,对于 x264,介于 10 和 18 之间。

    ffmpeg -i <input> -c:v prores -profile:v 3 output.mov
    ffmpeg -i <input> -c:v libx264 -crf 10 -preset ultraslow output.mp4
    ...
    
    Run Code Online (Sandbox Code Playgroud)
  • 有损编解码器,有很多。如果可以牺牲质量,则可以大大减小文件大小。VP9 和 HEVC 在需要多少空间方面比 H.264 更有效,但它们可能需要更长的时间进行编码。忘记 Theora 和 VP8。使用 VP9、HEVC 和 H.264(至少使用 ffmpeg 中可用的编码器),您可以设置 CRF 参数,为您提供所需的质量。您需要目视检查您的输出,以确保损失量对于您的目的来说不是太严重。对于libx264,介于 18 和 23 之间的 CRF 值看起来“不错”。

    ffmpeg -i <input> -c:v libx264 -crf 23 -preset ultraslow output.mp4
    ffmpeg -i <input> -c:v libvpx-vp9 -crf 10 -b:v 0 output.webm
    ...
    
    Run Code Online (Sandbox Code Playgroud)

通常,如果您的目标是归档内容,则不应仅指定目标比特率。相反,您希望使用恒定质量模式,在这种模式下,编码器可以自由使用尽可能多的位来保持图像的质量(在一定范围内)。特别是对于 H.264 或 HEVC 编码器libx264libx265-b:v不推荐用于单遍编码,因为它可能会随着时间的推移导致巨大的质量变化。(我在这里写了一篇关于不同速率控制模式的文章。)总而言之,如果您正在存档,只需选择一个恒定的 CRF 值。

不调整视频大小也非常重要,因为这会导致模糊(放大时)或丢弃数据(缩小时)。-s:v除非您的图像对于视频来说太大,否则只需省略该选项。

最后,在执行视觉无损或有损编码时,您可以在速度与压缩效率之间进行权衡。换句话说,如果您等待更长时间,则可以使文件大小更小。在这里,preset选项开始发挥作用:如果您选择像 那样的预设ultraslow,编码过程将需要很长时间,但生成的文件(假设给定的 CRF)会更小,即使它具有相同的质量。VP9 有不同的选项来控制速度,请参阅此处

还有一件事:使用libx264,您可以使用该-tune stillimage选项来优化图像的编码。此外,当然,选择所需的最低帧速率将有助于节省文件大小。

一些文档: