Até agora, já transcodifiquei dezenas, se não centenas de arquivos com FFMPEG, mas tenho um arquivo em particular que está me dando problemas e não consigo descobrir o porquê.
Para testar, estou usando um trecho de 10 segundos do meu arquivo original (eu o carregaria como parte desta pergunta se isso fosse um recurso aqui). Este arquivo de teste de origem se parece com isto:
Input #0, matroska,webm, from 'Trimmed.mkv':
HD.MA.5.1-RARBG
ENCODER : Lavf61.9.106
Duration: 00:00:10.26, start: 0.000000, bitrate: 33873 kb/s
Chapters:
[[excluded for relevance]]
Stream #0:0(eng): Video: h264 (High), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 1k tbn
Metadata:
DURATION : 00:00:10.260000000
Stream #0:1(eng): Audio: dts (dca) (DTS-HD MA), 48000 Hz, 5.1(side), s32p (24 bit) (default)
Metadata:
DURATION : 00:00:10.005000000
Stream #0:2(eng): Audio: dts (dca) (DTS), 48000 Hz, 5.1(side), fltp, 1536 kb/s
Metadata:
DURATION : 00:00:10.005000000
Stream #0:3(eng): Audio: ac3, 48000 Hz, stereo, fltp, 192 kb/s
Metadata:
DURATION : 00:00:10.016000000
Posso abrir o arquivo acima no player VLC e confirmar que cada um dos fluxos de áudio (e o fluxo de vídeo) são reproduzidos corretamente. No entanto, muitos players não são tão compatíveis quanto o VLC (não têm tantos codecs incorporados), e preciso oferecer suporte a mais do que isso. No meu caso, preciso oferecer suporte ao Windows Media Player integrado, que (pelo menos no meu computador) não pode reproduzir nenhum dos dois primeiros fluxos de áudio (não pode reproduzir 0:1
dts (dca) (DTS-HD MA)
ou 0:2
dts (dca) (DTS)
). (Tecnicamente, preciso oferecer suporte à reprodução do Chrome, mas ambos os aplicativos parecem ter o mesmo problema aqui, e o Windows Media Player é mais fácil para eu testar.)
Consegui contornar isso em todos os casos anteriores duplicando o fluxo que eu quero e transcodificando a cópia como AAC. Para esse fim, usei o seguinte comando:
ffmpeg -i Trimmed.mkv -map 0:v -map 0:a -map 0:a:0 -c copy -c:a:3 aac Converted.mkv
Eu copio o fluxo de vídeo e todos os fluxos de áudio, e então mapeio o primeiro fluxo de áudio uma segunda vez. Eu defino o codec para todos os fluxos para 'copiar', mas então sobrescrevo esse fluxo de áudio final para usar AAC.
A saída da execução desse comando é a seguinte:
[aost#0:4 @ 000001f6a555fb40] Multiple -codec/-c/-acodec/-vcodec/-scodec/-dcodec options specified for stream 4, only the last option '-codec:a:3 aac' will be used.
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Stream #0:1 -> #0:1 (copy)
Stream #0:2 -> #0:2 (copy)
Stream #0:3 -> #0:3 (copy)
Stream #0:1 -> #0:4 (dts (dca) -> aac (native))
Press [q] to stop, [?] for help
[aac @ 000001f6a591c240] Using a PCE to encode channel layout "5.1(side)"
Output #0, matroska, to 'Converted.mkv':
HD.MA.5.1-RARBG
encoder : Lavf61.9.106
Chapters:
[[excluded for relevance]]
Stream #0:0(eng): Video: h264 (High) (H264 / 0x34363248), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 23.98 fps, 23.98 tbr, 1k tbn
Metadata:
DURATION : 00:00:10.260000000
Stream #0:1(eng): Audio: dts (DTS-HD MA) ([1] [0][0] / 0x2001), 48000 Hz, 5.1(side), s32p (24 bit) (default)
Metadata:
DURATION : 00:00:10.005000000
Stream #0:2(eng): Audio: dts (DTS) ([1] [0][0] / 0x2001), 48000 Hz, 5.1(side), fltp, 1536 kb/s
Metadata:
DURATION : 00:00:10.005000000
Stream #0:3(eng): Audio: ac3 ([0] [0][0] / 0x2000), 48000 Hz, stereo, fltp, 192 kb/s
Metadata:
DURATION : 00:00:10.016000000
Stream #0:4(eng): Audio: aac (LC) ([255][0][0][0] / 0x00FF), 48000 Hz, 5.1(side), fltp, 394 kb/s (default)
Metadata:
encoder : Lavc61.32.101 aac
DURATION : 00:00:10.005000000
[out#0/matroska @ 000001f6a4be8840] video:37636KiB audio:5207KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: 0.053611%
frame= 244 fps=203 q=-1.0 Lsize= 42866KiB time=00:00:10.00 bitrate=35098.3kbits/s speed=8.32x
[aac @ 000001f6a591c240] Qavg: 7222.731
Novamente, posso abrir o 'Converted.mkv' resultante no VLC e confirmar que todas as quatro trilhas de áudio são reproduzidas. Mas quando testo esse novo arquivo no Windows Media Player, esse novo, 4º, fluxo AAC fica silencioso. É diferente dos dois primeiros fluxos não suportados, que não consigo selecionar. Esse novo fluxo pode ser selecionado, ele fica apenas silencioso.
O que poderia estar acontecendo que faria com que essa faixa não tocasse corretamente? Por onde eu começaria a depurar isso?