Meu vídeo tem múltiplos áudios, mas eu só quero um. O que fazer?

Vocês já devem ter sacado que gosto muito de assistir filmes, documentários e séries. Já devem ter entendido também onde os obtenho. Meu problema é que minha TV (Sony Bravia Smart TV) não suporta codecs mais “exóticos”. Ela só “aguenta” o container MP4, o codec de vídeo h264 e o codec de áudio AC3.

Recentemente topei com um filme que contém múltiplos áudios:

$ ffprobe filme.mkv
...
Input #0, matroska,webm, from 'filme.mkv':
  Duration: 01:42:54.09, start: 0.000000, bitrate: 16271 kb/s
    Stream #0:0(eng): Video: h264 (High), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 23.98 fps, ...
    Stream #0:1(ger): Audio: ac3, 48000 Hz, stereo, s16, 384 kb/s (default)
    Stream #0:2(eng): Audio: ac3, 48000 Hz, 5.1(side), s16, 448 kb/s

Como podem observar, temos um áudio em alemão (ger) e um em inglês (eng). Não sei quanto a você, mas eu não entendo nada de alemão! Quero converter esse vídeo em formato Matroska em MP4. Só que quero reduzir os bitrates (para não gerar um arquivão maior que 4 GB) e, como não tenho um home theater 5.1, converer o áudio para 2 canais. Quero também selecionar apenas o áudio em inglês.

Ahhh, sim… note também que o ffmpeg diz que esse container é Matroska, mas também pode ser WebM, corroborando minha descoberta de que WebM é, na verdade, Matroska!

Fazer a conversão acima, com o ffmpeg, é muito simples:

$ ffmpeg -i filme.mkv -codec:v libx264 -codec:a ac3 -b:v 3000k -b:a 160k \
  -ac 2 -map 0:0 -map 0:2 filme.mp4

Reduzi o bitrate de vídeo de 16 Mb/s para 3 Mb/s. Reduzi o bitrate de áudio de 448 kb/s para 160 kb/s — um pouquinho acima de 64 kb/s por canal. Reduzi o número de canais para 2 (usando a opção -ac) e o truque para selecionar os streams é usar a opção -map. Na linha de comando acima mapeei os streams 0 e 2 da fonte 0 (o arquivo de vúdeo). A sintaxe de -map sempre toma dois números: fonte:stream.

Assim, meu vídeo final conterá apenas o stream de vídeo e o segundo stream de áudio (em inglês). Simples, depois que você entende o ffmpeg.

Existe uma série de opções que eu poderia usar para assegurar a qualidade do vídeo final. Do jeito que está ele é codificado com bitrate variável e um dos fatores de qualidade — a quantidade de quantizadores (fator q) — não costuma ficar ideal neste tipo de conversão. Eis o que a nova codificação me diz (até agora):

frame=31457 fps=  7 q=29.0 size=  493685kB time=00:21:49.85 bitrate=3087.6kbits/s

Qualquer coisa acima de 12 indica uma codificação de baixa qualidade (quanto mais quantizadores, menos compactado e mais artefatos, tipo mosaico, aparecerão no vídeo final — além de converter o vídeo mais lentamente, repare na taxa de frames por segundo, fps!). Mas não sou lá muito exigente… Noutro post mostro como controlar o quantizador (de algumas maneiras)…

frame=31457 fps=  7 q=29.0 size=  493685kB time=00:21:49.85 bitrate=3087.6kbits/s

Um comentário sobre “Meu vídeo tem múltiplos áudios, mas eu só quero um. O que fazer?

Deixe um comentário