[Linux ] 编译 ffmpeg 使用 AV1 编码 svt_av1 编码器
编译带 AV1 编码器的 ffmpeg
- 安装 aom
git clone --depth 1 https://aomedia.googlesource.com/aom
mk build
cmake -G "Unix Makefiles" -DENABLE_TESTS=OFF -DENABLE_NASM=on ../
make -j30
sudo make install
- 安装 svt-av1 编码器
git clone --depth=1 https://gitlab.com/AOMediaCodec/SVT-AV1.git
cd SVT-AV1
cd Build
cmake .. -G"Unix Makefiles" -DCMAKE_BUILD_TYPE=Release
make -j30
sudo make install
- 生成 ffmpeg 的 Makefile 文件 (prefix 参数指定 make install 时的安装位置)
# 克隆代码 (我用的是 5.12 版本)
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
# 生成Makefile
./configure \
--prefix=/usr/ffmpeg \
--pkg-config-flags="--static" \
--extra-libs="-lpthread -lm" \
--ld="g++" \
--enable-gpl \
--enable-libaom \
--enable-libass \
--enable-libfdk-aac \
--enable-libfreetype \
--enable-libmp3lame \
--enable-libopus \
--enable-libdav1d \
--enable-libvorbis \
--enable-libvpx \
--enable-libx264 \
--enable-libx265 \
--enable-nonfree \
--enable-libsvtav1
# 编译
make -j16
-
过程中缺少什么就安装什么 或者无脑执行下面的命令
apt-get install ffmpeg libaom-dev nasm yasm libx264-dev libx265-dev libnuma-dev libfdk-aac-dev libopus-dev libass-dev libdav1d-dev libmp3lame-dev libvorbis-dev libvpx-dev
-
编译完成后安装
sudo make install
-
如果指定了安装位置,那么可能需要建立软链 或者添加路径到 PATH,也即是在 .bashrc 文件中添加
export PATH=$PATH:/usr/ffmpeg/bin
-
还可能出现错误
ffmpeg: error while loading shared libraries: libSvtAv1Enc.so.1: cannot open shared object file: No such file or directory
那就在 .bashrc 文件中再加一行
export LD_LIBRARY_PATH+=":/usr/local/lib"
有一个支持显卡加速的 AV1 编码器
av1_nvenc
,但是还没研究
尝试编码
ffmpeg -i 1.mp4 -c:v libsvtav1 -crf 50 svtav1_test.mp4
更多的详细说明见下面参考第三条
以下是从官方参考里面复制来的
-
快速编码
ffmpeg -i infile.mkv -c:v libsvtav1 -preset 10 -crf 35 -c:a copy outfile.mkv
-
用于个人使用
ffmpeg -i infile.mkv -c:v libsvtav1 -preset 5 -crf 32 -g 240 -pix_fmt yuv420p10le -svtav1-params tune=0:film-grain=8 -c:a copy outfile.mkv
-
网络传输
ffmpeg -i infile.mkv -c:v libsvtav1 -preset 2 -crf 25 -g 24 -pix_fmt yuv420p10le -svtav1-params tune=0:film-grain=8 -c:a copy outfile.mkv
preset
是预设,越小相同的码率下文件体积更小,但是需要花费更多的时间;crf
用来控制质量,取值范围0-63
,一般
参考
-
ffmpeg 使用 AV1 的指南 (包含三个编码器的说明)
https://trac.ffmpeg.org/wiki/Encode/AV1 -
ffmpeg 编译支持 AV1 包含两个编码器的编译过程参考
https://noulin.net/blog/linux/2022/05/25/encoding-videos-in-av1-with-ffmpeg.html -
svtav1 的 ffmpeg 相关说明
https://gitlab.com/AOMediaCodec/SVT-AV1/-/blob/master/Docs/Ffmpeg.md
对于上述过程有疑问的话,请留言