如何使用 FFmpeg 和 rav1e 创建高质量 AV1 文件?

如何使用 FFmpeg 和 rav1e 创建高质量 AV1 文件?

我目前正在使用 Ubuntu Focal Fossa 20.04 LTS,我想使用 FFmpeg 和 librav1e 创建高质量的 AV1 文件。我一直受到添加对 FFmpeg 的 rav1e 支持作为“librav1e”。

我感兴趣的材料如下:

  1. Sintel 预告片(720p 未压缩 1.7GB)
  2. Sintel 预告片音频(5MB)

目前 FFmpeg 对 rav1e 的支持还处于早期阶段,文档和已发布的实验还不多。如果 Ubuntu LTS 版本能够支持这一切就太好了!

答案1

看起来这个目标可以在 4 年内实现相对容易步骤,从而允许 Ubuntu Focal Fossa 20.04 LTS 使用 FFmpeg 和 rav1e 掌握 AV1 编码!

1. 获取最新的 rust 副本...

Focal Fossa 和 rav1e 受益于较新版本的 rust,因此请按如下方式获取较新的副本:

sudo apt-get install curl
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

遵循默认设置(只需按“enter”),然后运行以下命令来配置当前 shell:

source $HOME/.cargo/env

以便即时访问最新的 rust 和 friends。记得不时更新此安装(特别是如果从本指南更新 rav1e),方法是运行:

rustup update

2. 安装rav1e

最好安装可执行文件(该命令rav1e --fullhelp将显示可在 FFmpeg 内部使用该-rav1e-params选项的选项)以及 FFmpeg 将用于成功编译和生成 librav1e 的库。

首先是可执行文件,使用简单的复制和粘贴代码块:

sudo apt-get install nasm build-essential pkg-config libssl-dev && 
mkdir -pv $HOME/{bin,ffmpeg_sources,ffmpeg_build} && 
cd $HOME/ffmpeg_sources && 
wget https://github.com/xiph/rav1e/archive/refs/tags/v0.6.3.tar.gz && 
tar xvf v0.6.3.tar.gz && cd rav1e-0.6.3 && 
cargo build --release && 
find target -name rav1e -exec install -m 755 {} $HOME/bin \; && 
strip ~/bin/rav1e && \
cd $HOME/ffmpeg_sources && rm -rfv rav1e-0.6.3

接下来安装cargo-c小程序以及 FFmpeg 所需的库和 pkg-config 文件。首先运行一次性安装命令cargo-c

cargo install cargo-c

然后编译rav1e再次使用已安装的cargo-c

cd $HOME/ffmpeg_sources && tar xvf v0.6.3.tar.gz && \
cd rav1e-0.6.3 && \
cargo cinstall --release \
     --prefix=$HOME/ffmpeg_build \
     --libdir=$HOME/ffmpeg_build/lib \
     --includedir=$HOME/ffmpeg_build/include

最好删除 rav1e共享库,留下静态库供 FFmpeg 使用(FFmpeg 的共享 rav1e 库存在问题在这个位置在我的系统上):

rm -v $HOME/ffmpeg_build/lib/librav1e.so*

3. 安装 FFmpeg

现在去FFmpeg trac 网站并根据说明安装 FFmpeg,记得添加:

--enable-librav1e

./configure字符串。然后艰苦的工作就完成了:)

4. 运行编码器

然后可以对原始问题中提到的测试文件运行非常合理的编码:

ffmpeg -i sintel_trailer_2k_720p24.y4m -i sintel_trailer-audio.flac \
       -c:v librav1e -qp 80 -speed 4 \
       -tile-columns 2 -tile-rows 2 \
       -c:a libfdk_aac -b:a 128k \
       sintel_trailer_av1.mp4

这里需要操作的是:

  • -qp 80:使用“量化器”模式进行编码,范围为 0-255。值越小,质量越高,默认值为 100。80 似乎是此媒体剪辑的最佳值。
  • -speed 4:选择编码时的速度预设 (0-10),0 表示质量最好,10 表示速度最快。在我的系统 (第二代 Threadripper) 上,此特定设置在速度和质量之间取得了良好的平衡。
  • -tile-columns 2 -tile-rows 2通过操纵rav1e,可以实现相当不错的速度提升基于图块的编码。此处给出的示例拆分了编码和解码分成 4 个片段,对于建议的输入视频来说似乎是个不错的选择,不过请随意尝试一下……

它的编码速度是 FFmpeg 和 libaom-av1 的很多倍,而且可以说质量要好得多。毫无疑问,这个编码字符串可以进一步完善,我会在 rav1e、FFmpeg 和 AV1 编码成熟后再做这件事……

5. 免费截图

好的,所以有一个可选的第 5 步;对正在运行的完成的输出文件进行截图:)

在此处输入图片描述

补充笔记...

  • FFmpeg 文档:有关使用 rav1e 进行编码的 FFmpeg 实现的文档,也可以通过搜索 FFmpeg 手册页来查看,或者man ffmpeg-allman ffmpeg-codecs请记住,可以rav1e --help使用选项查看本机 rav1e 选项并将其添加到任何 FFmpeg 命令行中-rav1e-params...

相关内容