FFmpeg -map 0 falha com erro “O número de mapas de fluxo deve corresponder ao número de fluxos de saída”

1

Estou tentando usar o ffmpeg do Ubuntu para converter um arquivo em MKV ao copiar todos os streams de vídeo e legenda, mas convertendo todos os fluxos de áudio para o AC3.

Usando este comando:

ffmpeg -i input.mkv -map 0 -vcodec copy -scodec copy -acodec ac3 -ab 256k output.mkv

falha com

Number of stream maps must match number of output streams

Remover o -map 0 corrige o problema, mas nem todos os fluxos de legenda estão no arquivo de saída.

Editar

Aqui está a saída completa do console:

user@laptop:~/$ ffmpeg -i input.mkv -map 0 -vcodec copy -scodec copy -acodec ac3 -ab 256k output.mkv
ffmpeg version 0.8.5-6:0.8.5-0ubuntu0.12.10.1, Copyright (c) 2000-2012 the Libav developers
  built on Jan 24 2013 14:49:20 with gcc 4.7.2
*** THIS PROGRAM IS DEPRECATED ***
This program is only provided for compatibility and will be removed in a future release. Please use avconv instead.
[matroska,webm @ 0xa0cb20] Estimating duration from bitrate, this may be inaccurate
Input #0, matroska,webm, from 'input.mkv':
  Duration: 00:10:56.88, start: 0.000000, bitrate: 1536 kb/s
    Stream #0.0(eng): Video: h264 (High), yuv420p, 1920x1080, PAR 1:1 DAR 16:9, 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)
    Stream #0.1(eng): Audio: dca (DTS), 48000 Hz, 5.1, s16, 1536 kb/s (default)
    Stream #0.2(eng): Subtitle: pgssub (default)
    Stream #0.3(fre): Subtitle: pgssub
    Stream #0.4(spa): Subtitle: pgssub
Number of stream maps must match number of output streams
    
por sashoalm 18.03.2013 / 20:25

1 resposta

2

O comportamento que você está vendo realmente não faz sentido, mas dado que você está usando o quebrado e "falso" ffmpeg que é realmente do Libav e não o negócio real , é provavelmente um erro que tem longo foi corrigido. Apenas uma questão de usar uma versão recente, onde isso funciona normalmente.

Faça o download de uma versão estática recente da página inicial do FFmpeg ou compile você mesmo .

Você pode reduzir o comando para:

ffmpeg -i in.mkv -c copy -c:a ac3 -map 0 out.mkv

O FFmpeg agora copia automaticamente todos os fluxos e mapeia todos eles para a saída, por ex. assim:

Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (aac -> ac3)
  Stream #0:2 -> #0:2 (copy)
  Stream #0:3 -> #0:3 (copy)
  Stream #0:4 -> #0:4 (copy)
    
por 18.03.2013 / 20:47

Tags