Wie kann man die FPS von Videos und die Geschwindigkeit mit ffmpeg richtig erhöhen?

500
jstq

Ich habe ein 5-fps-Video mit keyint 120 und 2,5 Stunden lang, das ich 6-mal beschleunigen möchte, wobei seine fps = 30 ist

Ich habe es mit diesem Befehl gemacht, den ich irgendwo auf dieser Website gefunden habe

ffmpeg -i "...local_Record.mkv" -filter:v "fps=30, setpts=PTS/6" "...output1.mkv" 

Die Ausgabe kam laggy, es wurde 3-5 Sekunden gespielt und dann eingefroren. Wenn ich vor- oder zurückspringe, wird es für weitere 3-5 Sekunden freigegeben und friert dann wieder ein. Nachdem ich es auf Youtube hochgeladen hatte, stellte ich fest, dass es dort nicht zurückbleibt, jedoch zeigt Youtube seine Länge als ursprüngliche 2,5 Stunden. Es zeigt auch, dass der Verarbeitungsprozentsatz 95% für 12+ Stunden beträgt (was bedeutet, dass dieses Video zu 100% fehlerbehaftet ist und niemals verarbeitet wird, da es 90 MB und 20 Minuten lang ist und Youtube Videos mit einer Geschwindigkeit von 5 GB und Stunden verarbeiten kann lang in 10 Minuten)

Dann habe ich versucht, das mit diesem Befehl erhaltene Video erneut zu kodieren

ffmpeg -i "...mkv" -c:v libx264 -crf 18 -preset veryfast -max_muxing_queue_size 1024 output.mp4 

Was mir ein Ergebnis von 133 MB gab, das auf youtube ebenfalls als 2,5 Stunden angezeigt wird und die Verarbeitung nie abschließt (kann abgespielt werden, aber es ist unsichtbar, im Videomanager sagen beide Videos, dass seine 95% verarbeitet wurden).

Wie mache ich das richtig, damit das Video nicht zurückbleibt und Youtube seine Länge richtig bekommt?

Bearbeiten - Ich habe herausgefunden, was das Problem war - es gab ein Geräusch im Container, obwohl eigentlich überhaupt kein Geräusch vorhanden sein sollte (ich habe es mit obs aufgenommen, ohne dass der Sound aktiviert war). Nachdem ich diesen Sound mit mmg entfernt hatte, öffnete mpc es korrekt und zeigte an, dass es 26 Minuten lang ist, und YouTube hat es in wenigen Minuten erfolgreich verarbeitet

0

1 Antwort auf die Frage

1
Gyan

Die Reihenfolge sollte umgekehrt werden.

ffmpeg -i in -filter:v "setpts=PTS/6,fps=30" out 

Wenn der fps-Filter zuerst verwendet wird, fügt ffmpeg pro Sekunde 25 doppelte Frames ein, um 5 fps in 30 umzuwandeln, und beschleunigt sie dann um das 6-fache. In der richtigen Reihenfolge komprimiert ffmpeg den Stream auf 30 Quell-Frames pro Sekunde. Anschließend müssen alle fps-Filter * die Stream-Metadaten in 30 fps ändern.

* unter der Annahme einer konstanten Bildratenquelle.

Beachten Sie auch, dass YT alle Videos neu codiert, sodass Ihre codierte Keyint nicht von YT übernommen wird.

Wenn Sie Audio haben, müssen Sie diese Geschwindigkeit auch erhöhen,

ffmpeg -i in -vf "setpts=PTS/6,fps=30" -af "atempo=6" out 

Beachten Sie, dass Atempo bis vor kurzem ein Limit von 2 hatte, so dass Sie es für ältere Versionen von ffmpeg verwenden würden

ffmpeg -i in -vf "setpts=PTS/6,fps=30" -af "atempo=2,atempo=2,atempo=1.5" out 
Leider musste ich 6 GB Quellvideos löschen, sodass ich Ihren Befehl im Moment nicht testen kann, dies aber für zukünftige Versuche tun werde. Ich habe meine Frage mit den Versuchen aktualisiert, dieses Video bereits zu beschleunigen. Ich habe einen Befehl zum Umcodieren von Videos in der Hoffnung gefunden, diesen endlosen Youtube-Verarbeitungsfehler zu beheben, der mir aufgefallen ist, aber er hat nicht funktioniert. Kennen Sie einen Weg, dieses Video zu "reparieren", vielleicht einen anderen Weg, um es neu zu kodieren, damit Youtube die Videobearbeitung beenden kann, und vielleicht sogar bemerkt, dass es keine 2,5 Stunden ist, sondern nur 26 Minuten? jstq vor 5 Jahren 0
Egal, ich fand heraus, was das Problem war - es gab ein Geräusch im Container, obwohl eigentlich gar kein Geräusch zu hören war (ich habe es mit obs aufgenommen, ohne dass der Sound aktiviert war). Nachdem ich diesen Sound mit mmg entfernt hatte, stellte mpc fest, dass seine 26 Minuten und Youtube es in wenigen Minuten erfolgreich verarbeitet haben jstq vor 5 Jahren 0
Wenn Sie dies auf Ihre Weise tun (Setpts zuerst), wird mir diese Warnung angezeigt, nachdem die Codierung abgeschlossen ist: 100000 Puffer wurden in out_0_0 in eine Warteschlange gestellt. und es ist stundenlang da und lädt alle meine CPU-Kerne zu 100% aus. Wenn ich es storniere, kann das Video nicht abgespielt werden jstq vor 5 Jahren 0
Teilen Sie das vollständige Protokoll. Gyan vor 5 Jahren 0