
Ich verwende ffmpeg 4.2.4.
Ich habe zwei kurze Videoausschnitte, die ich beide mit meinem Handy aufgenommen habe. Aus dem ersten habe ich einen Abschnitt ausgeschnitten (beginnend bei 18 Sekunden und auch 18 Sekunden lang – die Ausgabe scheint 18,02 Sekunden lang zu sein):
ffmpeg -i VID_20201205_135951.mp4 -ss 00:18 -t 00:18 1.mp4
Und ich verwende den gesamten zweiten Teil, der 13,55 Sekunden lang ist:
cp VID_20201205_140804.mp4 2.mp4
Ich habe eine Datei concat.txt geschrieben:
file '1.mp4'
file '2.mp4'
Und habe den Concat-Filter verwendet, um sie zusammenzuführen:
ffmpeg -f concat -i concat.txt -c copy 12.mp4
Das resultierende Video hat keinen Ton und ist 3 Minuten und 2,35 Sekunden lang! Wenn ich es mir ansehe, sind die ersten 18 Sekunden richtig (allerdings ohne Ton), dann friert es ein und zeigt das letzte Bild des ersten Teils bis 1:47, an diesem Punkt beginnt die Wiedergabe des zweiten Teils, allerdings sehr langsam, bis zum Ende des Videos.
Irgendeine Idee, was ich falsch mache? Oder wie ich das debuggen könnte?
Hier sind die Informationen, die ffmpeg für die erste Eingabe druckt:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '1.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.29.100
Duration: 00:00:18.02, start: 0.000000, bitrate: 17735 kb/s
Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc), 3840x2160 [SAR 1:1 DAR 16:9], 17678 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
Metadata:
handler_name : VideoHandle
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, mono, fltp, 69 kb/s (default)
Metadata:
handler_name : SoundHandle
Der zweite Eingang:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '2.mp4':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: isommp42
creation_time : 2020-12-05T14:08:20.000000Z
com.android.version: 11
Duration: 00:00:13.55, start: 0.000000, bitrate: 40373 kb/s
Stream #0:0(eng): Video: h264 (Baseline) (avc1 / 0x31637661), yuvj420p(pc, smpte170m), 3840x2160, 42298 kb/s, SAR 1:1 DAR 16:9, 30.02 fps, 30 tbr, 90k tbn, 180k tbc (default)
Metadata:
rotate : 180
creation_time : 2020-12-05T14:08:20.000000Z
handler_name : VideoHandle
Side data:
displaymatrix: rotation of -180.00 degrees
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, mono, fltp, 96 kb/s (default)
Metadata:
creation_time : 2020-12-05T14:08:20.000000Z
handler_name : SoundHandle
Und die Ausgabe:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '12.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.29.100
Duration: 00:03:02.35, start: 0.000000, bitrate: 4734 kb/s
Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc), 3840x2160 [SAR 1:1 DAR 16:9], 4719 kb/s, 5.07 fps, 30 tbr, 15360 tbn, 60 tbc (default)
Metadata:
handler_name : VideoHandle
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, mono, fltp, 80 kb/s (default)
Metadata:
handler_name : SoundHandle
Antwort1
Alle Eingänge müssen dieselben Attribute haben. Ihre haben unterschiedliche H.264-Profile (Baseline vs. High) und Bildraten.
Sorgen Sie dafür, dass ein Video zum anderen passt:
ffmpeg -i 2.mp4 -c:v libx264 -r 30 -c:a copy 2b.mp4
„High Profile“ wird standardmäßig ausgewählt, Sie müssen es also nicht manuell hinzufügen. Wenn Sie jedoch „Baseline“ möchten, verwenden Sie -profile:v baseline
.
Oder konvertieren Sie alle Videos in einen Kommentarsatz mit Attributen, unabhängig von den Eingabeattributen. SieheWie verkettet man Videos mit unterschiedlichen Attributen in ffmpeg?