Contêineres e codecs

Derek Herman
Derek Herman
Joe Medley
Joe Medley

Para oferecer suporte a vários navegadores, use o FFmpeg para converter o arquivo .mov em dois contêineres diferentes: um contêiner MP4 e um contêiner WebM. Na prática real, você provavelmente especificaria um codec ao mesmo tempo. Por enquanto, permitiremos que o FFmpeg use os padrões.

Se esses conceitos forem novos para você, leia Noções básicas de arquivos de mídia antes de continuar. Além disso, se você não tiver o FFmpeg instalado, leia Noções básicas de aplicativos de mídia para configurá-lo com o Docker.

Estamos usando a instalação sugerida do Docker e o arquivo glocken.mov de Preparar arquivos de mídia para a Web adicionados ao diretório media. Usamos a versão 4.3.2 do FFmpeg para todos os comandos desta seção.

Contêineres

Primeiro, precisamos criar nossos dois contêineres do arquivo .mov com as extensões de arquivo .mp4 e .webm com um stream de áudio e vídeo dentro do arquivo. Consulte Noções básicas sobre arquivos de mídia para saber mais sobre contêineres e transmissões, caso não saiba a diferença entre eles.

  1. MP4

    /media # ffmpeg -i glocken.mov glocken.mp4
    
  2. WebM

    /media # ffmpeg -i glocken.mov glocken.webm
    

O WebM leva mais tempo para ser criado do que o MP4. Isso não é surpreendente quando você analisa os resultados. Enquanto o MP4 é comprimido para cerca de 83% do tamanho do arquivo original, o WebM é reduzido para 78% do tamanho original, mas pode ser muito menor. Os resultados variam. É importante ressaltar que o FFmpeg 4.2.2 define a taxa de bits de vídeo padrão como 200k e, em 4.3.2, não define uma taxa de bits padrão. Assim, o vídeo não é mais mero4% do original. Você pode conferir isso usando o comando bash ls -a na pasta onde os arquivos de mídia estão localizados.

Exemplo:

/media # ls -l
-rw-r--r-- 1 root  root  12080306 Mar 7 12:16 glocken.mov
-rwx------ 1 root  root  10106446 Mar 7 12:33 glocken.mp4
-rwx------ 1 root  root   9503301 Mar 7 18:30 glocken.webm

Para gerar um arquivo pequeno, faça o seguinte:

/media # ffmpeg -i glocken.mov -b:v 200k glocken.webm
...
frame=  300 fps=3.6 q=0.0 Lsize=     483kB time=00:00:10.01 bitrate= 395.0kbits/s speed=0.121x
video:359kB audio:117kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.356068%
/media # ls -l
-rw-r--r-- 1 root  root  12080306 Mar 7 12:16 glocken.mov
-rwx------ 1 root  root  10106446 Mar 7 12:33 glocken.mp4
-rwx------ 1 root  root    494497 Mar 7 18:45 glocken.webm

Confira suas tarefas

Para verificar seus resultados, use o FFmpeg e o Shaka Packager, conforme mostrado em Noções básicas de aplicativos de mídia:

/media # packager input=glocken.mp4 --dump_stream_info
/media # ffmpeg -i glocken.mp4

Codecs

Em seguida, o codec. Conforme descrito nas Noções básicas sobre arquivos de mídia, um codec não é a mesma coisa que um contêiner (tipo de arquivo). Dois arquivos do mesmo tipo de contêiner podem conter dados compactados usando codecs diferentes. O formato WebM, por exemplo, permite que o áudio seja codificado usando Vorbis ou Opus. Para mudar o codec, usamos o FFmpeg. Por exemplo, este comando gera um arquivo .mkv com um codec de áudio vorbis e um codec de vídeo av1.

/media # ffmpeg -i glocken.mov -c:a vorbis -c:v av1 glocken.mkv

Neste exemplo, a flag -c:a e o -c:v são para especificar os codecs de áudio e vídeo, respectivamente.

A página Conversão de mídia lista os comandos necessários para converter codecs. As tabelas abaixo resumem as bibliotecas usadas no FFmpeg para realizar as conversões de codec de arquivos WebM e MP4. Esses são os formatos recomendados para DASH e HLS, respectivamente.

Vídeo

Codec Extensão Biblioteca
av1 WebM, mkv libaom-av1
h264 MP4 libx264
vp9 WebM libvpx-vp9

Áudio

Codec Extensão Biblioteca
aac MP4 aac
Opus WebM libopus
Vorbis WebM libvorbis

A seguir, vamos mostrar como mudar o bitrate dos arquivos recém-criados.