¿Cómo uso FFmpeg y rav1e para crear archivos AV1 de alta calidad?

¿Cómo uso FFmpeg y rav1e para crear archivos AV1 de alta calidad?

Actualmente estoy usando Ubuntu Focal Fossa 20.04 LTS y me gustaría crear archivos AV1 de alta calidad usando FFmpeg y librav1e. He sido impulsado por elsumade soporte rav1e para FFmpeg como 'librav1e'.

El material con el que estoy interesado en trabajar se proporciona aquí:

  1. Vídeo del tráiler de Sintel(720p sin comprimir 1,7 GB)
  2. Audio del tráiler de Sintel(flac 5MB)

Aún es temprano para el soporte rav1e bajo FFmpeg y no hay mucha documentación ni experimentación publicada. ¡Sería fantástico verlo todo funcionando en una versión Ubuntu LTS!

Respuesta1

Parece que este objetivo se puede lograr en 4relativamente fácilpasos, permitiendo así que Ubuntu Focal Fossa 20.04 LTS se familiarice con la codificación AV1 con FFmpeg y rav1e.

1. Obtenga una copia reciente de Rust...

Focal Fossa y rav1e se benefician de una versión más nueva de Rust, así que obtenga una copia más nueva de la siguiente manera:

sudo apt-get install curl
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Siga los valores predeterminados (simplemente presione 'enter') y luego ejecute lo siguiente para configurar su shell actual:

source $HOME/.cargo/env

para permitir el acceso instantáneo a los últimos Rust y amigos. Recuerde actualizar esta instalación de vez en cuando (especialmente si actualiza rav1e desde esta guía) ejecutando:

rustup update

2. Instalar rav1e

Lo mejor es instalar tanto el ejecutable (el comando rav1e --fullhelpmostrará opciones que se pueden usar desde FFmpeg con la -rav1e-paramsopción) como las bibliotecas que FFmpeg usará para compilar y producir librav1e con éxito.

Primero el ejecutable, usando un simple bloque de código de copiar y pegar:

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

A continuación, instale el cargo-csubprograma, así como las bibliotecas y el archivo pkg-config que necesita FFmpeg. Primero ejecuta unúnicocomando para instalar cargo-c:

cargo install cargo-c

y luego compilar rav1ede nuevousando el instalado 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

Lo mejor es luego quitar el rav1e.bibliotecas compartidas, dejándo elbibliotecas estáticaspara que FFmpeg lo retome (FFmpeg tiene un problema con las bibliotecas compartidas de rav1e)en esta ubicaciónen mi sistema):

rm -v $HOME/ffmpeg_build/lib/librav1e.so*

3. Instale FFmpeg

Ahora ve ael sitio de seguimiento de FFmpege instale FFmpeg según las instrucciones, recordando agregar:

--enable-librav1e

a la ./configurecuerda. Entonces el trabajo duro estará hecho :)

4. Ejecute el codificador

Luego se puede ejecutar una codificación muy razonable en los archivos de prueba mencionados en la pregunta original:

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

Las cosas a manipular aquí serían:

  • -qp 80: Utiliza el modo 'cuantizador' para codificar con un rango de 0-255. Los valores más pequeños son de mayor calidad; el valor predeterminado es 100. 80 parece ser el punto óptimo para este clip multimedia.
  • -speed 4: Selecciona la velocidad preestablecida (0-10) para codificar, 0 es la mejor calidad mientras que 10 es la más rápida. Esta configuración en particular es un buen compromiso entre velocidad y calidad en mi sistema (Threadripper de segunda generación).
  • -tile-columns 2 -tile-rows 2Se pueden realizar mejoras de velocidad bastante decentes manipulando los botones de rav1e.codificación basada en mosaicos. El ejemplo dado aquí divide la codificación.y decodificandoen 4 segmentos y parece una opción decente para el video de entrada sugerido, aunque siéntete libre de experimentar.

Esto codifica a muchas veces la velocidad que se ve con FFmpeg y libaom-av1 y posiblemente produce una calidad mucho mejor. Sin duda, esta cadena de codificación se puede refinar aún más y lo haré cuando la codificación rav1e, FFmpeg y AV1 esté madura...

5. Captura de pantalla gratuita

Bien, entonces hay un quinto paso opcional; tomando una captura de pantalla del archivo de salida completo en ejecución :)

ingrese la descripción de la imagen aquí

Notas adicionales...

  • Documentación de FFmpeg: Los documentos sobre la implementación de FFmpeg de codificación con rav1e, esto también se puede ver buscando en las páginas de manual de FFmpeg, ya sea man ffmpeg-allo man ffmpeg-codecs. Recuerde que las opciones nativas de rav1e se pueden ver rav1e --helpy agregar a cualquier línea de comando FFmpeg usando la -rav1e-paramsopción...

información relacionada