Especificando diferentes perfis AAC para diferentes fluxos de áudio no ffmpeg

0

Estou tentando gravar um vídeo com dois fluxos de áudio e comprimir o primeiro em estéreo a 48 kbps com codificação AAC HEv2, e o segundo em mono a 40 kbps usando HEv1. Meu código é essencialmente o seguinte:

set STREAM_01=-map 0:a:0 -b:a:0 48000 -ac 2 -c:a:0 libfdk_aac -profile:a aac_he_v2 
set STREAM_02=-map 0:a:1 -b:a:1 40000 -ac 1 -c:a:1 libfdk_aac -profile:a aac_he 
set SPECS=-ar 48000 -sample_fmt s16 -cutoff 20000
ffmpeg.exe -i input.mkv -map 0:v:0 -c:v copy %SPECS% %STREAM_01% %STREAM_02% output.mkv

Mas o programa parece executar apenas qualquer um dos dois perfis especificados anteriormente - ambos os fluxos saem do HEv1 ou ambos saem do HEv2. Isso é sem dúvida porque a instrução de perfil omite um especificador de fluxo, mas quando tento escrever as opções de perfil no formulário "-profile:a:1 aac_he_v2"ou "-profile:a:2 aac_he"recebo uma mensagem de erro "Erro ao abrir o codificador para o fluxo de saída # 0: 1". O que estou perdendo aqui?

Wally Walters
fonte

Respostas:

0

aac_he_v2 codifica fluxos estéreo e sua opção de layout de canal não é qualificada para fluxo.

set STREAM_01=-map 0:a:0 -b:a:0 48000 -ac:a:0 2 -c:a:0 libfdk_aac -profile:a:0 aac_he_v2 
set STREAM_02=-map 0:a:1 -b:a:1 40000 -ac:a:1 1 -c:a:1 libfdk_aac -profile:a:1 aac_he 
Gyan
fonte
Obrigado, Mulvya, embora não tenha muita certeza do que significa "qualificado para transmissão". O que eu sei é que, se eu omitir o fluxo 1 ou o fluxo 2 da linha ffmpeg, o comando funcionará conforme o esperado - ou seja, recebo um fluxo estéreo com a codificação he_v2 se eu remover% STREAM_02% ou um fluxo mono com he_v1 se eu remover% STREAM_01%.
Wally Walters
Uma configuração que se aplica apenas ao fluxo especificado.
Gyan
Então isso sugere que minha melhor aposta seria processar cada fluxo separadamente e remuxar no final, algo como ffmpeg.exe -i -map 0:v -c:v copy -an "VIDEO_01.mkv" ffmpeg.exe -i input.mkv -vn %SPECS% %STREAM_01% AUDIO_01.m4a ffmpeg.exe -i input.mkv -vn %SPECS% %STREAM_02% AUDIO_02.m4a ffmpeg.exe -i VIDEO_01.mkv -i AUDIO_01.m4a -i AUDIO_02.m4a -map 0 -map 1 -map 2 -c copy output.mkv E funciona; simplesmente não é tão simples. De qualquer forma, obrigado novamente.
Wally Walters
Eu não entendo; meu comando não funcionou?
Gyan
Meu erro; isso funciona. Houve um erro na minha digitação. Mais uma vez, meus agradecimentos.
Wally Walters