Tornar o processo do ffmpeg o primeiro fluxo de áudio diferente de todos os outros

0

Estou tentando escrever um comando para que o ffmpeg execute uma determinada instrução para o primeiro fluxo de áudio em um arquivo e uma instrução diferente para qualquer um e todos os outros. No caso de teste abaixo, por exemplo, eu quero o primeiro fluxo copiado para o arquivo de saída e todos os outros convertidos em mono. Se eu escrever dessa maneira

ffmpeg -i INPUT -map 0 -c copy -map 0:a:0 -c:a:0 copy -map -0:a:0? -c:a libfdk_aac -ac 1 OUTPUT

o primeiro fluxo de áudio é ignorado quando o mapeamento é sobrescrito posteriormente na linha de comando. Mas se eu mover a instrução para esse fluxo para depois dos outros '

ffmpeg -i INPUT -map 0 -c copy -map -0:a:0? -c:a libfdk_aac -ac 1 -map 0:a:0 -c:a:0 copy OUTPUT

ele não é mais ignorado, mas se torna o último fluxo de áudio no arquivo. Eu sei que estou perto daqui; Eu simplesmente não consigo ver o que estou fazendo errado.

    
por Wally Walters 16.06.2017 / 03:07

1 resposta

3

Use

ffmpeg -i INPUT -map 0 -c copy -c:a libfdk_aac -c:a:0 copy -ac 1 OUTPUT

Você só precisa mapear um stream uma vez. É a ordem das opções de codec que devem ser configuradas corretamente. Primeiro definido para copiar todos os fluxos. Em seguida, substitua a configuração de áudio com o codificador, mas depois restaure o primeiro áudio para copiar novamente.

Veja a lógica genérica que se aplica às opções que usam especificadores de fluxo, por exemplo, -b:v, -c:a -map 0:s:1 ..etc

Digamos que você tenha três fluxos de vídeo e três fluxos de áudio, mapeados na ordem da primeira coluna. A tabela abaixo mostra o que acontece quando você aplica opções na ordem da primeira linha:

(stream)    -c copy     -c:a:0 aac      -c:a libfdk_aac     -c:4 mp3
0:v:0       copy        copy            copy                copy
0:v:1       copy        copy            copy                copy
0:v:2       copy        copy            copy                copy
0:a:0       copy        aac             libfdk_aac          libfdk_aac
0:a:1       copy        copy            libfdk_aac          mp3
0:a:2       copy        copy            libfdk_aac          libfdk_aac
    
por 16.06.2017 / 07:05

Tags