Como uso FFmpeg e rav1e para criar arquivos AV1 de alta qualidade?

Como uso FFmpeg e rav1e para criar arquivos AV1 de alta qualidade?

Atualmente estou usando Ubuntu Focal Fossa 20.04 LTS e gostaria de criar arquivos AV1 de alta qualidade usando FFmpeg e librav1e. Fui estimulado peloAdiçãodo suporte rav1e ao FFmpeg como 'librav1e'.

O material com o qual tenho interesse em trabalhar é fornecido aqui:

  1. Vídeo do trailer de Sintel(720p não compactado 1,7 GB)
  2. Áudio do trailer Sintel(flac 5MB)

Ainda é cedo para o suporte rav1e no FFmpeg, sem muita documentação e experimentação publicada. Seria ótimo ver tudo funcionando em uma versão Ubuntu LTS!

Responder1

Parece que esse objetivo pode ser alcançado em 4relativamente fáciletapas, permitindo assim que o Ubuntu Focal Fossa 20.04 LTS se familiarize com a codificação AV1 com FFmpeg e rav1e!

1. Obtenha uma cópia recente do Rust...

Focal Fossa e rav1e se beneficiam de uma versão mais recente do Rust, então pegue uma cópia mais recente da seguinte maneira:

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

Siga os padrões (basta pressionar 'enter') e execute o seguinte para configurar seu shell atual:

source $HOME/.cargo/env

para permitir acesso instantâneo aos mais novos amigos e ferrugem. Lembre-se de atualizar esta instalação de tempos em tempos (especialmente se estiver atualizando o rav1e deste guia) executando:

rustup update

2. Instale rav1e

É melhor instalar o executável (o comando rav1e --fullhelpmostrará opções que podem ser usadas no FFmpeg com a -rav1e-paramsopção), bem como as bibliotecas que o FFmpeg usará para compilar e produzir librav1e com sucesso.

Primeiro o executável, usando um simples bloco de código de copiar e colar:

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

Em seguida, instale o cargo-cminiaplicativo, bem como as bibliotecas e o arquivo pkg-config necessários ao FFmpeg. Primeiro execute umúnicocomando para instalar cargo-c:

cargo install cargo-c

e então compile rav1ede novousando o 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

Melhor então remover o rav1ebibliotecas compartilhadas, Deixe obibliotecas estáticaspara o FFmpeg pegar (o FFmpeg tem um problema com as bibliotecas rav1e compartilhadasneste localno meu sistema):

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

3. Instale o FFmpeg

Agora vá parao site de rastreamento do FFmpege instale o FFmpeg conforme as instruções, lembrando de adicionar:

--enable-librav1e

para a ./configurecorda. Então o trabalho duro está feito :)

4. Execute o codificador

Uma codificação bastante razoável pode então ser executada nos arquivos de teste mencionados na pergunta 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

Coisas para manipular aqui seriam:

  • -qp 80: Usa o modo 'quantizador' para codificar com um intervalo de 0 a 255. Valores menores têm qualidade mais alta, o padrão é 100. 80 parece ser o ponto ideal para este clipe de mídia.
  • -speed 4: Seleciona a predefinição de velocidade (0-10) para codificação, 0 é a melhor qualidade enquanto 10 é a mais rápida. Esta configuração específica é um bom compromisso entre velocidade e qualidade no meu sistema (Threadripper de 2ª geração).
  • -tile-columns 2 -tile-rows 2Melhorias de velocidade bastante decentes podem ser feitas manipulando o rav1ecodificação baseada em bloco. O exemplo dado aqui divide a codificaçãoe decodificaçãoem 4 segmentos e parece uma escolha decente para o vídeo de entrada sugerido, mas sinta-se à vontade para experimentar.

Isso codifica muitas vezes a velocidade vista com FFmpeg e libaom-av1 e sem dúvida produz uma qualidade muito melhor. Sem dúvida, esta string de codificação pode ser ainda mais refinada e farei isso quando a codificação rav1e, FFmpeg e AV1 amadurecer ...

5. Captura de tela gratuita

OK, então há uma quinta etapa opcional; tirando uma captura de tela do arquivo de saída concluído em execução :)

insira a descrição da imagem aqui

Notas Adicionais...

  • Documentação FFmpeg: Os documentos sobre a implementação da codificação do FFmpeg com rav1e, isso também pode ser visto pesquisando nas páginas de manual do FFmpeg, man ffmpeg-allou man ffmpeg-codecs. Lembre-se de que as opções nativas do rav1e podem ser vistas rav1e --helpe adicionadas a qualquer linha de comando do FFmpeg usando a -rav1e-paramsopção...

informação relacionada