rav1e
最快速和最安全的 AV1 编码器。
概述
rav1e 是一个 AV1 视频编码器。它旨在最终覆盖所有用例,尽管在其当前形式下,它最适合 libaom(参考编码器)太慢的情况。
特性
- 帧内、帧间和切换帧
- 64x64 超级块
- 4x4 到 64x64 RDO 选择的方形和矩形块
- DC、H、V、Paeth、平滑和所有方向预测模式
- DCT、(FLIP-)ADST 和恒等变换(分别最大 64x64、16x16 和 32x32)
- 8、10 和 12 位深度色彩
- 4:2:0、4:2:2 和 4:4:4 色度采样
- 11 种速度设置(0-10,从穷尽到接近实时)
- 恒定量化器和目标比特率(单遍和多遍)编码模式
- 静态图片模式
文档
在 doc/
中查找文档
发布
在可预见的未来,rav1e 的每周预发布版本将于每周二发布。
构建
工具链:Rust
rav1e 目前需要 Rust 1.74.0 或更高版本才能构建。
依赖:NASM
一些特定于 x86_64
的优化需要 NASM 2.14.02
或更新版本,并默认启用。
如果可用,将使用 strip
来移除汇编对象中的本地符号。
CI 正在测试 nasm 2.15.05
,因此其他版本可能会出现错误。如果你发现了问题,请开启一个 issue!
安装 nasm
ubuntu 20.04 (nasm 2.14.02
)
sudo apt install nasm
ubuntu 18.04 (nasm 2.14.02
)
sudo apt install nasm-mozilla
# 将 nasm 链接到 $PATH
sudo ln /usr/lib/nasm-mozilla/bin/nasm /usr/local/bin/
fedora 31, 32 (nasm 2.14.02
)
sudo dnf install nasm
windows (nasm 2.15.05
)
在系统 PATH 中添加 NASM 二进制文件。
$NASM_VERSION="2.15.05" # 或更新版本
$LINK="https://www.nasm.us/pub/nasm/releasebuilds/$NASM_VERSION/win64"
curl --ssl-no-revoke -LO "$LINK/nasm-$NASM_VERSION-win64.zip"
7z e -y "nasm-$NASM_VERSION-win64.zip" -o "C:\nasm"
# 为当前会话设置路径
set PATH="%PATH%;C:\nasm"
macOS (nasm 2.15.05
)
brew install nasm
发布二进制文件
要在 target/release/rav1e
中构建发布二进制文件,请运行:
cargo build --release
不稳定功能
可以通过使用 unstable
功能来启用实验性 API 和功能。
cargo build --features <feature>,unstable
当前不稳定功能
- Channel API:
cargo build --features channel-api,unstable
这些功能和 API 可能会发生变化和演变,请不要依赖它们在不同版本之间保持不变。
特定目标构建
如果 Rust 编译器可以在通用代码中使用 avx2
、bmi1
、bmi2
、fma
、lzcnt
和 popcnt
,它可以生成速度快 11%-13% 的二进制文件,你可以通过以下方式启用:
RUSTFLAGS="-C target-cpu=native" cargo build --release
# 或
RUSTFLAGS="-C target-cpu=x86-64-v3" cargo build --release
生成的二进制文件将无法在不支持相同扩展集的 CPU 上运行。
注意:你可以使用
rustc --print target-cpus
来检查 CPU 是否受支持,如果不支持,-C target-cpu=native
将不会产生任何效果。
构建 C-API
rav1e 提供了一套 C 兼容的库、头文件和 pkg-config 文件。
要构建和安装它,你可以使用 cargo-c:
cargo install cargo-c
cargo cinstall --release
请参考 cargo-c 的安装说明。
使用
压缩视频
输入视频必须是 y4m 格式。不支持单色格式。
cargo run --release --bin rav1e -- input.y4m -o output.ivf
(在 tests/small_input.y4m
或 http://ultravideo.cs.tut.fi/#testsequences 找到用于测试的 y4m 文件)
解压视频
编码器输出应该与任何符合 v1.0.0 规范的 AV1 解码器兼容。你可以使用 dav1d 进行解码,现在已经在。
dav1d -i output.ivf -o output.y4m
配置
rav1e 有几个可选功能,可以通过向 cargo 传递 --features
来启用。不建议使用 --all-features
。
功能
在 Cargo.toml
的功能表中找到完整列表
asm
- 默认启用。启用时,会为支持的平台构建汇编。x86_64
:需要nasm
。aarch64
- 需要
gas
- 替代方案:通过设置
CC=clang
使用clang
汇编器
- 需要
注意:在 x86_64
上始终启用 SSE2
,在 aarch64 上始终启用 neon
,你可以在运行时设置环境变量 RAV1E_CPU_TARGET
为 rust
以禁用所有汇编优化的例程。
贡献
请阅读我们的 rav1e 贡献指南。
联系我们
来 Libera.Chat 上的 #daala IRC 频道与我们聊天!你也可以使用网页客户端通过网络浏览器加入。