FFMPEG Como extrair um número variável de streams de áudio?

2

Estou tentando fazer um pequeno arquivo em lote que extrai todos os fluxos de áudio ao arrastar um vídeo para ele.

ffmpeg.exe -i "%1" -map 0:a? -c:a copy "%1~extracted.aac"

Mas isso parece estar sobrescrevendo o mesmo arquivo para cada fluxo de áudio que encontrar.

Eu não quero especificar o número de faixas de áudio, pois isso pode variar.

Agradecemos antecipadamente por sua ajuda!

    
por MurderOfPoes 25.07.2018 / 21:29

1 resposta

1

Não há uma maneira direta de fazer isso.

Existe uma solução um tanto tediosa que depende do tee muxer e um palpite do número máximo de fluxos de áudio que você pode encontrar. Digamos que seja 4.

Então, o comando é

ffmpeg -i in.mp4 -c copy -map 0:a?
       -f tee
              "[select='a\:0':onfail=ignore]in-0.aac|[select='a\:1':onfail=ignore]in-1.aac|
               [select='a\:2':onfail=ignore]in-2.aac|[select='a\:3':onfail=ignore]in-3.aac"

Todos os quatro arquivos serão criados, mas se o tamanho for zero, o fluxo não existe. Portanto, depois de excluir todas as saídas de tamanho zero, você terá extraído todos os fluxos. O FFmpeg não seleciona automaticamente o formato de saída, portanto, os fluxos precisam ser AAC. Use uma versão recente do ffmpeg, 4.0 +

    
por 25.07.2018 / 21:55