Die ffmpeg-Verkettung führt zu Videostottern, wirkt sich jedoch nicht auf Audio aus

Ich habe mehrere verschiedene Varianten dieses Prozesses durchlaufen und es bereitet mir immer Probleme. Ich habe es manchmal zum Laufen gebracht, aber es scheint nicht konsistent zu sein.

Ich habe eine Videokamera, die AVCHD in MTS-Dateien aufzeichnet, sie teilt Dateien bei 3,89 GB auf. Da das Mikrofon Mist ist, nehme ich auch Audio separat auf und muss sie vor der Bearbeitung wieder synchronisieren. Das Problem, das ich habe, ist, dass der Audiorekorder Dateien nicht gleichzeitig beschädigt, sodass ich normalerweise mit 3 Videodateien und 1 Audiodatei fertig werde.

Ich frage mich also, wo in diesem Prozess etwas schief läuft:

  1. Konvertiert alle H264 MTS-Dateien in ProRes MOV-Dateien. Der Editor verarbeitet ProRes besser als die komprimierten Dateien, also konvertiere ich. ffmpeg -i 00000.MTS -vf "yadif=3:-1:1,mcdeint" -vcodec prores -vprofile 2 -ar 48000 1.mov
  2. Verkettete die 3 .mov-Dateien miteinander. An diesem Punkt habe ich eine Datei mit Videostottern alle ~32 Minuten, aber der Ton bleibt mit dem Video synchron. ffmpeg -f concat -i mylist.txt -c copy full.mov
  3. Habe das Audio in FLAC extrahiert. In Audacity importiert, das externe Audio mit einem Klatschen ausgerichtet und auf Länge getrimmt. An diesem Punkt stimmen beide Audiospuren überein, die externe Spur ist am Ende immer noch synchron mit dem Kameraton. Exportieren Sie das neue externe Audio, das an den Start und die Länge des Original-Audios angepasst ist. ffmpeg -i full.mov -aq 256k full.flac
  4. Kombinieren Sie die große .mov-Datei mit dem neuen Audio. An diesem Punkt wird das Audio, das gerade mit dem Original-Audio aus den Videodateien synchronisiert war, jetzt nicht mehr synchron, wenn das Video stottert. ffmpeg -i full.mov -i full-tascam.flac -map 0:0 -map 1 -vcodec copy -ar 48000 full-tascam.mov

Was tun? Ich hatte das gleiche Problem vor der Einführung von ProRes, indem ich einfach die MTS-Dateien in MP4 verkettete, den Videostream kopierte und das neue Audio hinzufügte. Gibt es irgendetwas, das ich beim Verketten einstellen kann, um das Stottern zu entfernen oder um zu verhindern, dass das neue Audio asynchron wird, wenn ich diese Spur hinzufüge?

Es hört sich so an, als ob die Kamera jeder aufeinanderfolgenden .MTS-Datei ein wenig eine Handhabe gibt oder ein paar Frames zwischen den Segmenten fallen lässt. Machen Sie ein Experiment: Richten Sie die Kamera auf einen laufenden Timecode auf einem Fernseher und lassen Sie ihn einige Segmente aufzeichnen, und sehen Sie, ob sich die Timecodes überschneiden oder ob Zahlen ausgelassen werden.

Antworten (1)

Aus irgendeinem Grund denke ich, dass dies vermieden wird, wenn das concat PROTOCOL von ffmpeg ( ffmpeg -i "concat:..." ) anstelle des concat DEMUXER ( ffmpeg -f concat -i mylist.txt ) verwendet wird. Seltsamerweise ist es auch etwas bequemer, da ich für die Verwendung des Demuxers die Textdatei mit den darin enthaltenen Dateinamen erstellen muss, während ich sie beim Protokoll einfach in der Befehlszeile angeben kann, z. B.: ffmpeg -i "concat:00001.MTS| 00002.MTS|00003.MTS" -c Ausgabe kopieren.mts

Ich muss das später bestätigen, ich bin am falschen Computer, aber irgendetwas hat mich auf die Frage aufmerksam gemacht, also habe ich beschlossen, sie mit neuen Informationen zu aktualisieren.

Um mp4 verlustfrei zu verketten, verwenden Sie diese Schritte : ffmpeg -i input1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate1.ts´, then ffmpeg -i input2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate2.ts` und schließlich: ffmpeg -i "concat:intermediate1.ts|intermediate2.ts" -c copy -bsf:a aac_adtstoasc output.mp4.