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

and*_*.46 11 video ffmpeg transcode av1 20.04

我目前正在使用 Ubuntu Focal Fossa 20.04 LTS,我想使用 FFmpeg 和 librav1e 创建高质量的 AV1 文件。我一直沿着由刺激此外,作为“librav1e”到FFmpeg的rav1e支持。

我有兴趣使用的材料在这里提供:

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

FFmpeg 下的 rav1e 支持还处于早期阶段,没有很多文档和已发布的实验到位。很高兴看到这一切都在 Ubuntu LTS 版本下运行!

and*_*.46 21

看起来这个目标可以通过 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
Run Code Online (Sandbox Code Playgroud)

遵循默认值(只需按“回车”),然后运行以下命令来配置您当前的 shell:

source $HOME/.cargo/env
Run Code Online (Sandbox Code Playgroud)

允许即时访问最新的 Rust 和朋友。

2.安装rav1e

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

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

sudo apt-get install nasm build-essential libssl-dev && 
mkdir -pv $HOME/{bin,ffmpeg_sources,ffmpeg_build} && 
cd $HOME/ffmpeg_sources && 
wget https://github.com/xiph/rav1e/archive/refs/tags/p20210831.tar.gz && 
tar xvf p20210831.tar.gz && cd rav1e-p20210831 && 
cargo build --release && 
find target -name rav1e -exec install -m 755 {} $HOME/bin \; && 
strip ~/bin/rav1e && \
cd $HOME/ffmpeg_sources && rm -rfv rav1e-p20210831
Run Code Online (Sandbox Code Playgroud)

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

cargo install cargo-c
Run Code Online (Sandbox Code Playgroud)

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

cd $HOME/ffmpeg_sources && tar xvf p20210831.tar.gz && \
cd rav1e-p20210831 && \
cargo cinstall --release \
     --prefix=$HOME/ffmpeg_build \
     --libdir=$HOME/ffmpeg_build/lib \
     --includedir=$HOME/ffmpeg_build/include
Run Code Online (Sandbox Code Playgroud)

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

rm -v $HOME/ffmpeg_build/lib/librav1e.so*
Run Code Online (Sandbox Code Playgroud)

3.安装FFmpeg

现在转到FFmpeg trac站点并按照说明安装FFmpeg,记得添加:

--enable-librav1e
Run Code Online (Sandbox Code Playgroud)

./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
Run Code Online (Sandbox Code Playgroud)

在这里操作的事情是:

  • -qp 80:使用“量化器”模式以 0-255 的范围进行编码。值越小质量越高,默认值为 100。80 似乎是此媒体剪辑的最佳点。
  • -speed 4: 选择速度预设 (0-10) 进行编码,0 为最佳质量,10 为最快。这个特殊的设置是我的系统(第二代 Threadripper)速度和质量之间的一个很好的折衷。
  • -tile-columns 2 -tile-rows 2通过操作 rav1e 的基于 tile 的编码可以实现相当不错的速度增强。此处给出的示例将编码和解码分为 4 个部分,对于建议的输入视频来说似乎是一个不错的选择,尽管可以随意尝试..

这编码的速度是 FFmpeg 和 libaom-av1 的速度的许多倍,并且可以说产生更好的质量。毫无疑问,这个编码字符串可以进一步细化,随着 rav1e、FFmpeg 和 AV1 编码的成熟,我会这样做……

5.无偿截图

好的,所以有一个可选的第 5 步;截取运行完成的输出文件的屏幕截图:)

在此处输入图片说明

补充说明...

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