Ich habe Tausende dieser Warnungen mit einer bestimmten Codierung erhalten. Ich habe 1080p-Video auf 480p verkleinert. An einem Bearbeitungspunkt, an dem es aufgrund eines Defekts in der Quell-Laserdisc ein zweifelhaftes Video gab, tauchten diese Meldungen auf und erschienen, glaube ich, für jedes Frame danach. Sie gingen weiter und weiter, wie dieser kurze Auszug:
Past duration 0.901115 too large= 535031kB time=00:54:15.06 bitrate=1346.5kbits/s dup=0 drop=19 speed=1.15x
Last message repeated 31 times
Past duration 0.901115 too large= 535031kB time=00:54:15.62 bitrate=1346.3kbits/s dup=0 drop=19 speed=1.15x
Last message repeated 34 times
Past duration 0.901115 too large= 535031kB time=00:54:16.21 bitrate=1346.0kbits/s dup=0 drop=19 speed=1.15x
Last message repeated 36 times
Past duration 0.901115 too large= 535338kB time=00:54:16.83 bitrate=1346.5kbits/s dup=0 drop=19 speed=1.15x
Last message repeated 39 times
Der ursprüngliche ffmpeg-Aufruf lautete wie folgt:
ffmpeg -i input.mp4 -s 720x480 -c:v libx264 -preset slower -crf 17 -c:a copy -y output.mkv
Den folgenden Vorschlägen folgend habe ich zuerst -framerate 60000/1001 zum Eingang hinzugefügt. Das hat nichts verbessert. Ich habe -framerate beibehalten und -r 60000/1001 zur Ausgabe hinzugefügt. Das hat noch nichts verbessert. Beibehaltung beider habe ich schließlich -async 1 -vsync 1 hinzugefügt. Dies führte dazu, dass ich eine einzige Warnung erhielt, und das ist alles. Diese Anrufung war:
ffmpeg -i input.mp4 -framerate 60000/1001 -s 720x480 -c:v libx264 -preset slower -crf 17 -c:a copy -y output.mkv -r 60000/1001 -async 1 -vsync 1
Der einzige Unterschied, den ich in einem detaillierten Speicherauszug von MediaInfo gefunden habe, war das Entfernen dieser Zeile, die im ursprünglichen Aufruf gefunden wurde, aber nicht im zweiten:
Delay relative to video : -33ms
Ich habe jedoch die A / V-Synchronisierung am Anfang der Dateien und am Ende überprüft, und es gab keinen erkennbaren Unterschied in der Synchronisierung zwischen den beiden Dateien. Ihre Laufzeiten waren ebenfalls gleich, aber das wurde in VLC nur auf die nächste Sekunde genau gemessen. Also habe ich die Anzahl der Frames mit ffmpeg wie folgt überprüft:
ffmpeg -i output.mkv -map 0:v:0 -c copy -f null -
und suchen Sie nach "frame = #" am Ende der Ausgabe.
Es stellte sich heraus, dass das Quellvideo 375226 Frames lang war, der ursprüngliche Aufruf 375195 Frames ergab und der zweite Aufruf 375200 ergab. Der zweite Aufruf mit erheblich weniger Warnmeldungen ließ also auch 5 Frames weniger fallen.
Nachfolgende Tests zeigten, dass -framerate und -r nicht erforderlich waren und nur die Verwendung der beiden Synchronisierungsflags ausreichend war. Dies führte zu identischen Ergebnissen wie der zweite Aufruf oben. Der dritte und einfachste Aufruf, den ich zur Lösung des Problems gefunden habe, lautet wie folgt:
ffmpeg -i input.mp4 -s 720x480 -c:v libx264 -preset slower -crf 17 -c:a copy -y output.mkv -async 1 -vsync 1
Und noch eine andere Datei erzeugte später eine Reihe dieser Warnungen, selbst mit den Synchronisierungsflags, aber das Hinzufügen der Ratenflags "reparierte" sie (erzeugte nur zwei statt Tausende von Warnungen). Manchmal funktioniert der zweite Aufruf, wenn der dritte nicht funktioniert. Für meine unmittelbaren Zwecke werde ich mich auf den zweiten Aufruf einigen und hoffe, dass er die meisten dieser Probleme behebt.
Dies war alles mit ffmpeg Version 4.0.