[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,一般

参考

对于上述过程有疑问的话,请留言

posted @ 2022-11-18 18:04  Startu  阅读(2702)  评论(0编辑  收藏  举报