FFmpeg AV1 编码

本贴最后更新于 1150 天前,其中的信息可能已经东海扬尘

英文原文

libaom AV1 编码指南

libaom-av1 是用于支持由 AOM(Alliance for Open Media,开放媒体联盟)制定的 AV1 的编码器,一个开源、免版权费的编码器。相较于 VP9 和 H.265 / HEVC,在相同画质的情况下, libaom-av1 可以节约 30% 的带宽,而相较于 H.264 可节约 50% 的带宽。

要安装支持 libaom-av1 的 ffmepg,请查看 编码指南 ,并使用 --enable-libaom 选项编译 FFmepg。

libaom 提供以下速度控制控制模式,用于决定视频质量和体积大小:

  • 恒定质量(Constant Quality)
  • 约束质量(Constrained Quality)
  • 二压平均比特率(2-pass average bitrate)
  • 单压平均比特率(1-pass average bitrate)

要查看可用选项,运行 FFmpeg -h encoder=libaom-av1

提醒: libaom 版本低于 2.0.0 的用户需要使用 -strict experimental 选项(或者缩写 -strict -2

恒定质量(Constant Quality)

libaom-av1 有一个恒定质量(CQ)模式(就像是 x264 和 x265 的 CRF),可以确保每一帧画面都得到相应画质水平(视觉感知上的)下应得的比特率,而不是编码每一帧都达到指定比特率。这可以得到更好的总体质量。如果你不需要压缩到指定的文件体积,这应当是你的最佳选择。

要启用这个选项,你必须同时使用 -crf-b:v 0 这两个选项。-b:v 的值 必须0

ffmpeg -i input.mp4 -c:v libaom-av1 -crf 30 -b:v 0 av1_test.mkv

CRF 的值可以是 0–63,数字越小,画质越高,同时文件体积越大。

约束质量(Constrained Quality)

libaom-av1 也有一个约束质量模式,可以确保比特率低于某个数值或者在指定数值区间的同时,达到指定画质要求。这个方式对于使用一致要求批量编码视频很有用。

ffmpeg -i input.mp4 -c:v libaom-av1 -crf 30 -b:v 2000k output.mkv

视频画质由 -crf 决定,并且比特率由 -b:v 决定。-b:v 必须是非 0 值。

你也可以设置比特率的最小值和最大值:

ffmpeg -i input.mp4 -c:v libaom-av1 -minrate 500k -b:v 2000k -maxrate 2500k output.mp4

Note: 当编码到 MP4 容器时,如果这个文件是要用于推流,你最好加上 -movflags +faststart 参数。

二压(Two-Pass)

为了达到指定比特率,并且尽可能保证画质最高,你需要使用二压,也就需要运行 FFmpeg 2 次,使用几乎相同的选项,除了:

  • 在第一次和第二次压制中,分别使用 -pass 1-pass 2 选项
  • 在第一次压制中,输入到一个空文件描述符,而不是实际的文件。(这会生成一个日志文件,在第二次压制的时候会用到)
  • 在第一次压制的时候,你可以使用 -an 选项忽略音频
ffmpeg -i input.mp4 -c:v libaom-av1 -b:v 2M -pass 1 -an -f null /dev/null && \
ffmpeg -i input.mp4 -c:v libaom-av1 -b:v 2M -pass 2 -c:a libopus output.mkv

Note: windows 用户应当使用 NUL 替代 /dev/null and ,用 ^ 替代 \

平均比特率 (ABR)

libaom-av1 也提供简单的平均比特率或目标比特率模式,在这个模式中,他只会尝试达到指定的平均比特率,例如 2 MBit/s。

ffmpeg -i input.mp4 -c:v libaom-av1 -b:v 2M output.mkv

建议只有当文件体积远远比画质重要时再使用这个方式,否则,请使用上述提到的其他画质控制方式。

控制速度/质量

-cpu-used 设置压缩效率,默认值是 1,更低的数值表示更慢的编码速度和更好的画质。

-row-mt 1 启用基于行的多线程,以达到最大的 CPU 使用率,要启用快速编码性能,也加上 tile(例如 -tiles 4x1-tiles 2x2 启用 4 tiles)。启用 row-mt 只会在当 cpu 的线程数大于编码 tiles 时速度快些。

HDR

当编码 HDR 视频的时候,有必要将颜色信息传递:-colorspace-color_trc-color_primaries,例如,YouTube HDR 使用:

-colorspace bt2020nc -color_trc smpte2084 -color_primaries bt2020

更多信息

你可以在这里找到关于 AV1 的更多信息

  • FFmpeg

    FFmpeg 是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。

    22 引用 • 31 回帖 • 13 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...