Schneiden Sie einen Teil der Audiospur in eine MP4-Datei

631

Ich habe eine .MP4-Datei mit einer Videospur (H.264, 25 FPS) und einer Audiospur (MP2). Die Gesamtlänge beträgt ~ 2: 52 (zwei Stunden, 52 Minuten). Ich habe festgestellt, dass A / V vor ~ 2: 34 synchron ist, danach aber asynchron, dh das Audio ist ~ 0,3 s spät.

Mein Plan war es

  1. Extrahieren Sie die Audiospur in .MP2
  2. Schneiden Sie die 0,3 s (mit mp3directCut, was gut funktioniert)
  3. Muxieren Sie die Videospur und die ausgeschnittene Audiospur.

Erledigt. Das Ergebnis war jedoch nicht zufriedenstellend, da A / V zu Beginn des Videos nicht synchron war. Ich habe mir die Originaldatei genauer angesehen und die Zeitstempel ausgegeben. Die kleinste PTS der Videospur beträgt 0,16 s, und die PTSs steigen alle um 0,04 und haben keine Lücke. Der kleinste PTS der Audiospur beträgt 0,212 s, und die meisten PTSs nehmen um 24 ms zu (normal für MP2), jedoch sind nur wenige Diffs kleiner oder größer als 24 ms unten)

Meine Fragen lauten: Verliere ich Zeitstempel beim Extrahieren in MP2? Dann ist mein ursprünglicher Plan vorgezogen. Welchen anderen Weg gibt es, um einen kleinen Teil einer Audiospur in einer MP4-Datei zu schneiden? Natürlich ohne Ton umkodieren. Ich bin mit FFmpeg und AviDemux vertraut.

3

2 Antworten auf die Frage

1
Gyan

Verliere ich Zeitstempel beim Extrahieren in MP2?

Ja. .mp2/.mp3hat keine Zeitstempel

Welchen anderen Weg gibt es, um einen kleinen Teil einer Audiospur in einer MP4-Datei zu schneiden?

Alle Container mit Zeitstempeln, die MP2 unterstützen, z. B. MPEG-TS, MP4 / MOV, MKV. Es kann andere geben.


Versuchen Sie den concat Demuxer,

ffmpeg -i in.mp4 -f concat -i audio.txt -map 0:v -map 1:a -c copy out.mp4 

wo audio.txtist

file in.mp4 outpoint 2:34:00 file in.mp4 inpoint 2:34:00.30 
Oh, warum habe ich nicht darüber nachgedacht? Vielleicht, weil ich damit rechne, einen Teil der Spur zu schneiden, aber die Zeitstempel beizubehalten, was zu einer Audiolücke von 0,3 Sekunden führen würde und der Rest an seinem alten Ort liegen würde. Ich habe Ihren Vorschlag ausprobiert und ein paar dieser Nachrichten erhalten: `Nicht-monotones DTS im Ausgabestrom 0: 1; ...... Dies kann zu falschen Zeitstempeln in der Ausgabedatei führen. `Ich habe die Zeitstempel der neuen Datei ausgegeben und analysiert: In Bezug auf die Audiospur sind jetzt mehrere PTS-Werte gleich. Da der Platz in den Kommentaren hier sehr begrenzt ist, ist dies alles vorerst; Ich analysiere und werde wiederkommen. TIA. vor 6 Jahren 0
Tatsächlich erhöht FFmpeg den PTS-Wert um 1, was 1 / 48.000 s bedeutet. Da die gedumpten Werte jedoch mit einer Auflösung von 1 ms formatiert werden, waren sie gleich. Wenn ich das weiß, werde ich jetzt mit den ungerundeten Werten fortfahren und kann anders vorgehen. Ich komme wieder.... vor 6 Jahren 0
Ist das resultierende A / V synchron? Gyan vor 6 Jahren 0
Mulvya, nur der 1. Teil vor dem Schnitt ist synchron. Deshalb analysiere ich immer noch. Status quo: Die Zeitstempel des 2. Teils (nach dem Schnitt) werden um -2.589 Sekunden verschoben. Infolgedessen gibt es überlappende PTS-Werte, und es erscheinen die Meldungen "Nicht monotones DTS". Ich versuche gerade herauszufinden, warum bis -2.589 s. (Vielleicht schaue ich mir mal die Quelle von ffmpeg an.) Ich werde mein Ergebnis melden, sobald ich mehr Informationen habe. Vielen Dank. vor 6 Jahren 0
Versuchen Sie, nur den nachgeschnittenen Teil zu extrahieren: `ffmpeg -i in.mp4 -c kopiert -vn -ss X out.m4a`, wobei X um 2: 34: 0,3 liegt. Sobald Sie den richtigen Startpunkt haben. Ersetzen Sie durch die neue Datei im concat (Entfernen der Inpoint-Direktive). Gyan vor 6 Jahren 0
Ich verstehe Ihre Vorgehensweise, aber ich hatte bereits die gleiche Idee, den Post-Cut-Teil zu extrahieren, und erhielt die Fehlermeldung `[ipod @ 0000026d666b4f40]. Tag mp4a ist mit der Ausgabecodec-ID 86017 ([0] [0] [0] [0] nicht kompatibel ]) `Dieses Mal habe ich` -f mp4` hinzugefügt, und es hat funktioniert. Die Zeitstempel in der resultierenden Datei beginnen bei Null. Fein. Nach dem Verketten ist der Nachschnitt nur noch Stille. Beim Betrachten der Dateigröße ist es offensichtlich, dass dieser Audioteil fehlt. Bestätigt durch Ablegen der Zeitstempel. Versuchte FFmpeg stabil und nachts. Bitte geben Sie mir noch etwas Zeit, um Dinge auszuprobieren. Danke noch einmal. vor 6 Jahren 0
0

Die Lösung war:

  1. Extrahieren Sie den ersten Teil der Audiospur in part1.mp4
  2. Extrahieren Sie den zweiten Teil der Audiospur in part2.mp4
  3. Concat part1.mp4 und part2.mp4 zum Abschließen von .mp4
  4. Mux-Video aus der Originaldatei und Audio aus complete.mp4

Siehe die Kommentare von @ Mulvya zu den spezifischen FFmpeg-Befehlen. Nochmals vielen Dank an ihn für die Unterstützung.