我目前正在使用 Ubuntu Focal Fossa 20.04 LTS,我想使用 FFmpeg 和 librav1e 创建高质量的 AV1 文件。我一直受到添加对 FFmpeg 的 rav1e 支持作为“librav1e”。
我感兴趣的材料如下:
- Sintel 预告片(720p 未压缩 1.7GB)
- 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-all
。man ffmpeg-codecs
请记住,可以rav1e --help
使用选项查看本机 rav1e 选项并将其添加到任何 FFmpeg 命令行中-rav1e-params
...