Используйте ffmpeg для объединения файлов mpeg2 с аудио pcm_dvd

652
tyleha

У меня есть DVD, содержащий 4 записанных видеофайла в формате mpeg2 со звуком в кодировке pcm_dvd. Я хочу объединить эти 4 файла вместе, включая аудио потоки. Однако, когда я объединяю эти файлы с помощью ffmpeg и демультиплексора concat, выходной файл .mpg содержит поврежденный аудиопоток, который теперь утверждается, что он имеет формат mp2.

Вот вывод ffprobe для одного из 4 входных файлов:

Stream #0:0[0x1e0]: Video: mpeg2video (Main), yuv420p(tv), 720x480 [SAR 32:27 DAR 16:9], 29.97 fps, 29.97 tbr, 90k tbn Stream #0:1[0xa0]: Audio: pcm_dvd, 48000 Hz, 2 channels, s16, 1536 kb/s 

И вот команда, которую я использовал для объединения этих файлов:

ffmpeg -f concat -safe 0 -i /tmp/files.txt -c copy -y out.mpg 

где /tmp/files.txt - это список из 4 частей файла, как определено в документации concat .

Выходной файл тогда выглядит так:

[mp2 @ 0x2af9d00] Header missing Last message repeated 282 times [mpeg @ 0x2af66e0] decoding for stream 1 failed [mpeg @ 0x2af66e0] Could not find codec parameters for stream 1 (Audio: mp2, 0 channels, s16p): unspecified frame size Consider increasing the value for the 'analyzeduration' and 'probesize' options Input #0, mpeg, from 'out.mpg': Duration: 03:15:36.75, start: 0.533367, bitrate: 7184 kb/s Stream #0:0[0x1e0]: Video: mpeg2video (Main), yuv420p(tv), 720x480 [SAR 32:27 DAR 16:9], 29.97 fps, 29.97 tbr, 90k tbn Stream #0:1[0x1c0]: Audio: mp2, 0 channels, s16p 

Отсутствует заголовок mp2 (не знаю, почему он теперь mp2), и при воспроизведении видео с помощью vlc звук, безусловно, поврежден. Как мне объединить эти файлы для правильного кодирования звука? Обратите внимание, что я также попытался использовать протокол concat вместо demuxer, с тем же результатом

2

1 ответ на вопрос

2
Gyan

В настоящее время ffmpeg не записывает заголовок для потоков LPCM в MPEG-1/2 при копировании потока.

использование

ffmpeg -f concat -safe 0 -i /tmp/files.txt -c copy -c:a pcm_s16be -y out.mpg 
Спасибо. Вопрос - присутствует ли эта проблема для всех потоков LPCM? Это проблема и для MPEG-4? Я получаю много разных видов видео / аудио от клиентов, которые мне нужно перекодировать. tyleha 6 лет назад 0
Да, ffmpeg записывает только закодированные pcm_s16be в контейнеры mpeg-1/2. Для MP4 LPCM вообще не поддерживается. Gyan 6 лет назад 1