Ich habe diese Videodatei, die an einer Stelle eine Asynchronität von ~ 1 Sekunde einführt. Also habe ich versucht, es zum Laufen zu bringen, indem ich an dieser Stelle ein kurzes Segment dupliziert habe, da es dort still ist:
$ ffmpeg -i DFW.mp4.mkv -filter_complex '
[0:a] aselect=n=3:e=lt(t\,18*60+42.100)+gt(t\,18*60+41)*2 [as] [ae] [am];
[am] asplit [am1] [am2];
[as] asetpts=PTS-STARTPTS [as];
[am1] asetpts=PTS-STARTPTS [am1];
[am2] asetpts=PTS-STARTPTS [am2];
[ae] asetpts=PTS-STARTPTS [ae];
[as] [am1] [am2] [ae] concat=n=4:a=1:v=0 [a]' -map 0:v -map '[a]' -c:v copy DFW-1.mp4
Mit anderen Worten, ich habe
as
Beginn bis 18:41.000ae
Ende ab 18:42.100am
der Mittelteil zwischen 18:41.000 und 18:42.100, der einmal wiederholt werden sollDie Segmentierung funktioniert, der verkettete Hörteil klingt gut. Stellt sich jedoch ae
als nur ~5 Sekunden heraus und ffmpeg
beginnt spammige "Buffer queue overflow, dropping"-Zeilen zu drucken. Das gesamte Video ist 1h30 lang und lässt mich bis zum Ende mit viel Stille zurück.
Mit anderen Worten, Video und Audio sind bis etwa 18:48.000 in Ordnung und die restlichen 1h11 des Videos haben keinen Ton.
Warum ist ffmpeg
das so und wie kann ich es beheben?
Ich habe auch versucht, stattdessen ein stilles Audiosegment als Plan B einzufügen, aber es ist fehlgeschlagen.
Unter der Annahme, dass das Audio keine Zeitstempelunterbrechungen enthält, sollten ein einfaches atrim und ein Nullsegment funktionieren.
ffmpeg -i DFW.mp4.mkv -filter_complex '
[0:a]asplit[a][b];
[a]atrim=0:1122.1[pre];
[b]atrim=1122.1,asetpts=PTS-STARTPTS[post];
anullsrc,atrim=0:1.1[seg];
[pre][seg][post]concat=n=3:a=1:v=0[a]' -map 0:v -map '[a]' -c:v copy DFW-1.mp4
atrim
s.atrim
s ausgeführt.
Gyan
sjngm
ae
jedoch ~5 Sekunden lang, was seltsam ist.