ffmpeg: desativa um dos vários streams de áudio

4

Eu tenho um arquivo de vídeo com dois audiostreams:

Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 960x540, 58 kb/s, 29.97 fps, 29.97 tbr, 90k tbn, 180k tbc
Metadata:
  creation_time   : 2012-07-21 06:10:08
Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 164 kb/s
Metadata:
  creation_time   : 2012-07-21 06:10:08
Stream #0:2(eng): Audio: ac3 (ac-3 / 0x332D6361), 48000 Hz, 5.1(side), fltp, 640 kb/s
Metadata:
  creation_time   : 2012-07-21 06:10:08

Existe uma maneira de desativar apenas um deles? O que eu realmente preciso é obter um arquivo desse tipo:

Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 960x540, 58 kb/s, 29.97 fps, 29.97 tbr, 90k tbn, 180k tbc
Metadata:
  creation_time   : 2012-07-21 06:10:08
Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 164 kb/s
Metadata:
  creation_time   : 2012-07-21 06:10:08

Obrigado

    
por hdf 05.12.2014 / 21:42

2 respostas

9

Seleção de fluxo

Por padrão, ffmpeg seleção de fluxo mapeará apenas um fluxo por tipo de fluxo com base nos seguintes critérios:

  • vídeo - o fluxo com a maior resolução
  • audio - o stream com mais canais
  • legendas - o primeiro fluxo de legendas

No caso em que vários fluxos do mesmo tipo são iguais, o fluxo com o menor índice é escolhido.

O uso da -map option substituirá esse comportamento, conforme mostrado abaixo.

Exemplo 1: mapeamento explícito

Diga a ffmpeg exatamente quais fluxos você deseja consultando os índices do fluxo de entrada:

ffmpeg -i input -map 0:1 -map 0:2 -c copy output
  • -c copy stream copy (re-mux) cada fluxo mapeado em vez de recodificar.

Ou use especificadores de fluxo :

ffmpeg -i input -map 0:v -map 0:a:0 -c copy output
  • O uso dos especificadores de fluxo é mais flexível porque você não precisa saber o índice de fluxo exato e pode ajudar a evitar mapeamentos acidentais, como a tentativa de mapear vídeo para um formato somente de áudio

  • -map 0:v mapeará todos os fluxos de vídeo da entrada 0 ( ffmpeg começa a contar a partir de 0, então 0 é a primeira entrada e a única entrada no seu caso).

  • -map 0:a:0 mapeará o primeiro fluxo de áudio da entrada 0.

Exemplo 2: mapeamento negativo

Diga a ffmpeg para mapear tudo e escolha o que excluir:

ffmpeg -i input -map 0 -map -0:a:1 -c copy output
  • -map 0 mapeia todos os fluxos da entrada 0.

  • -map -0:a:1 excluirá o segundo fluxo de áudio da entrada 0.

por 05.12.2014 / 23:19
-1

Você pode usar os especificadores de fluxo para selecionar um tipo de fluxo e um fluxo específico. Mais informações aqui ...

link

    
por 05.12.2014 / 22:10