Verwenden Sie ffmpeg, um mpeg2-Dateien mit pcm_dvd-Audio zusammenzuführen

730
tyleha

Ich habe eine DVD mit 4 aufgenommenen mpeg2-Videodateien mit pcm_dvd-kodiertem Audio. Ich möchte diese 4 Dateien zusammenstellen, einschließlich der Audioströme. Wenn ich jedoch diese Dateien mit ffmpeg und dem concat demuxer zusammenhalte, hat die .mpg-Ausgabedatei einen beschädigten Audiostream, der nun behauptet, im mp2-Format zu sein.

Hier ist die Ausgabe von ffprobe in einer der 4 Eingabedateien:

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 

Und hier ist der Befehl, den ich verwendet habe, um diese Dateien zusammenzustellen:

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

Dabei ist /tmp/files.txt eine Liste der 4 Dateiteile, wie in der concat- Dokumentation definiert.

Die Ausgabedatei sieht dann so aus:

[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 

Der mp2-Header fehlt (weiß nicht, warum er jetzt mp2 ist) und wenn das Video mit vlc abgespielt wird, ist das Audio sicherlich beschädigt. Wie muss ich diese Dateien verketten, um Audio richtig zu kodieren? Beachten Sie, dass ich auch versucht habe, das concat-Protokoll anstelle des Demuxers zu verwenden, mit dem gleichen Ergebnis

2

1 Antwort auf die Frage

2
Gyan

Zu diesem Zeitpunkt schreibt ffmpeg den Header für LPCM-Streams in MPEG-1/2 beim Streamcopying nicht.

Benutzen

ffmpeg -f concat -safe 0 -i /tmp/files.txt -c copy -c:a pcm_s16be -y out.mpg 
Vielen Dank. Eine Frage - ist dieses Problem für alle LPCM-Streams vorhanden? Ist es auch für MPEG-4 ein Problem? Ich bekomme viele verschiedene Arten von Video / Audio von Kunden, die ich neu codieren muss. tyleha vor 6 Jahren 0
Ja, ffmpeg schreibt nur verschlüsselte pcm_s16be in mpeg-1/2-Container. Für MP4 wird LPCM überhaupt nicht unterstützt. Gyan vor 6 Jahren 1