Wie kann man MP4-Dateien mit unterschiedlichen Bitraten zusammenführen?

2941
Jacob

Ich möchte zwei oder drei MP4-Videos mit MPEG-4 AVC-Videocodec und MP3-Audiocodecs (manchmal MP3 Surround) zusammenführen. Audio und Video können unterschiedliche Bitraten haben. Wenn es möglich ist, ohne Umkodierung. Ich habe bereits versucht, FFmpeg, MP4Box und AviDemux zu verwenden, jedoch ohne Erfolg. Ich suche nach einer Lösung, die nur über die Befehlszeile ausgeführt werden kann.

Jeder Film wird von AviDemux mit der Two-Pass-Option codiert.

Ich habe versucht, es mit AviDemux zu tun:

avidemux --force-alt-h264 --load video1.mp4 --append video2.mp4 --output-format MP4 --save output.mp4 --quit 

Dort wie mit FFmpeg:

ffmpeg -y -f concat -i list.txt -c copy output.mp4 

Und wie mit MP4Box:

MP4Box -cat video1.mp4 -cat video2.mp4 -new output.mp4 

Manchmal schlug es überhaupt fehl, aber manchmal gab es ein Video, bei dem die erste Datei gut lief, aber die zweite Datei war beschädigt.

avprobe Der Befehl für die beiden Dateien gibt Folgendes zurück:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'ad.mp4': Metadata: major_brand : isom minor_version : 512 compatible_brands: isomiso2avc1mp41 creation_time : 1970-01-01 00:00:00 title : ad.mp4 encoder : Lavf52.78.3 Duration: 00:00:03.28, start: 0.000000, bitrate: 446 kb/s Stream #0.0(und): Video: h264 (High), yuv420p, 1280x720 [PAR 1:1 DAR 16:9], 312 kb/s, 25 fps, 25 tbr, 25025 tbn, 50 tbc Metadata: creation_time : 1970-01-01 00:00:00 Stream #0.1(und): Audio: mp3, 48000 Hz, 2 channels, s16p, 126 kb/s Metadata: creation_time : 1970-01-01 00:00:00 

 

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'ad-chipmunkove.mp4': Metadata: major_brand : isom minor_version : 512 compatible_brands: isomiso2avc1mp41 creation_time : 1970-01-01 00:00:00 title : ad-chipmunkove.mp4 encoder : Lavf52.78.3 Duration: 00:00:29.96, start: 0.000000, bitrate: 2946 kb/s Stream #0.0(und): Video: h264 (High), yuv420p, 1280x720 [PAR 1:1 DAR 16:9], 2813 kb/s, 25 fps, 25 tbr, 25025 tbn, 50 tbc Metadata: creation_time : 1970-01-01 00:00:00 Stream #0.1(und): Audio: mp3, 48000 Hz, 2 channels, s16p, 127 kb/s Metadata: creation_time : 1970-01-01 00:00:00 

Und FFmpeg fügt dies zusammen:

[concat @ 0xb03ae40] Estimating duration from bitrate, this may be inaccurate Input #0, concat, from 'list.txt': Duration: 00:00:00.00, start: 0.000000, bitrate: 440 kb/s Stream #0:0: Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 312 kb/s, 25 fps, 25 tbr, 25025 tbn, 50 tbc Stream #0:1: Audio: mp3 (mp4a / 0x6134706D), 48000 Hz, stereo, s16p, 126 kb/s Output #0, mp4, to 'output.mp4': Metadata: encoder : Lavf55.41.100 Stream #0:0: Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], q=2-31, 312 kb/s, 25 fps, 25025 tbn, 25025 tbc Stream #0:1: Audio: mp3 (i[0][0][0] / 0x0069), 48000 Hz, stereo, 126 kb/s Stream mapping: Stream #0:0 -> #0:0 (copy) Stream #0:1 -> #0:1 (copy) Press [q] to stop, [?] for help frame= 831 fps=0.0 q=-1.0 Lsize= 10961kB time=00:00:33.23 bitrate=2702.0kbits/s video:10414kB audio:518kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.266208% 

Der zweite Teil des Ergebnisvideos sieht so aus, aber das Audio funktioniert einwandfrei.

4
Wie wurden die Dateien erzeugt? Genau die gleichen Encoder- und Encoding-Einstellungen nur mit einer anderen Bitrate? Oder von verschiedenen Einstellungen? slhck vor 10 Jahren 0
Sie sind mit AviDemux codiert. Gleiche Auflösung, gleiche FPS, andere sind auch gleich. Nur andere Bitrate. Jacob vor 10 Jahren 0
Im Allgemeinen ist es möglich, wenn alle anderen Einstellungen gleich sind und wenn die Sequenzen alle mit einem I-Frame (oder genauer: IDR-Frame) beginnen. Ich bin nicht sicher über den MP3-Teil. MP3 wird in einem MP4-Container nicht unterstützt, denke ich. slhck vor 10 Jahren 0
@slhck MP3 [wird] (https://en.wikipedia.org/wiki/MPEG-4_Part_14#Data_streams) unterstützt, alles funktioniert auf jedem Gerät, das ich mir vorstellen kann - Xbox 360, Android, Windows Phone und Windows. Jacob vor 10 Jahren 0

1 Antwort auf die Frage

0
cconcolato

Das Verketten von MP4-Dateien, auch mit unterschiedlichen Bitraten, sollte funktionieren. Dies ist die Grundannahme des adaptiven HTTP-Streamings mit MPEG-DASH. Wenn die Decoder-Konfiguration genau gleich ist, wird sie beibehalten. Wenn es nicht genau das gleiche ist (aber kompatibel ist), enthält das Feld stsdfür die Musterbeschreibung mehrere Einträge.

Bei MP4Box sieht das nach einem Fehler aus. Ich schlage vor, dass Sie hier ein Problem mit Links zu einigen Beispieldateien einreichen .