Wie beschleunige ich langsamere Video-Frameraten mit ffmpeg und erhalte volle 240 fps und keine abgeschnittenen Videos?

Ich habe eine ganze Reihe von Sportvideoclips, die jeweils zwischen 6 und 25 Sekunden lang sind, alle mit 240 fps aufgenommen, aber auf 23,97, 25, 29,97 und 30 fps verlangsamt (also in Superzeitlupe). Ich muss sie wieder beschleunigen.

Ich habe folgenden Befehl bekommen:

ffmpeg -i input.mov -vf "setpts=(PTS-STARTPTS)/10" -crf 18 output.mov

...aus einer anderen Stackexchange-Frage.

Ich konnte dies erfolgreich verwenden, aber ich habe 3 Fragen:

1) Wie erhalte ich alle Frames? Das resultierende Video hat nur 30 fps, was bedeutet, dass beim Konvertierungsprozess die überwiegende Mehrheit der Frames verloren gegangen ist - ich hätte gerne volle 240 fps.

2) Einige der Videos wurden am Ende abgeschnitten. Beispielsweise endet ein 11-Sekunden-Video, das ursprünglich einen ganzen Tennis-Vorhandschwung zeigte, vor dem Ende des Schwungs.

3) Ich habe die Dokumentation wahrscheinlich gut 30 Minuten lang gelesen, um herauszufinden, was "-crf 18" tut, und konnte es für mein ganzes Leben nicht - würde mich freuen, wenn jemand das erklären könnte!

Antworten (1)

Verwenden

ffmpeg -i input.mov -vf "setpts=N/240/TB" -r 240 -crf 18 output.mov

Das einzige, was der setpts-Filter tut, ist das Retimen von Frames, aber die festgelegte Framerate des Streams ist immer noch seine ursprüngliche Framerate, was auch immer das ist (25,30..). Verwenden Sie den fps-Filter, um dies zu ändern - der fps-Filter kann auch Frames löschen oder duplizieren, aber nicht in diesem Fall. Es gibt einen Fehler im fps-Filter, der ihn für diesen Zweck unwirksam macht. Ausgabe verwenden -r.

Der Standard-Encoder für MOV in FFmpeg ist libx264. Sein Standard-Ratensteuerungsmodus ist CRF. Niedrigere Werte bewahren mehr von der ursprünglichen Qualität, erzeugen aber größere Dateien – 18 bis 28 ist ein anständiger Bereich. Dies hat keinen Einfluss darauf, welche Frames in Ihrer Ausgabe enthalten sind.

Vielen Dank Gian! Dies funktioniert, außer dass das resultierende Video dieselbe Länge wie das Originalvideo hat. Sie sehen den 1-Sekunden-Tennisschwung und dann weitere 13 Sekunden des letzten eingefrorenen Frames.
Hat das Audio?
Wenn jemand nur ein wenig mehr Hilfe geben könnte, wäre ich so dankbar. Ich habe die Dokumentation eine halbe Stunde lang durchgesehen und nach Dingen gesucht, die sich auf die Zielvideolänge beziehen, aber ich habe immer noch keine Ahnung, wie ich ffmpeg anweisen soll, die Videolänge um den gleichen Anteil zu verkürzen, in dem sie beschleunigt wird. Hier ist das alte Video: link Hier ist das neue Video: link Hier wurde dieser Befehl verwendet:ffmpeg - i inputfile -vf "setpts=(PTS-STARTPTS)/10" -crf 18 outputfile
OMG, mir ist gerade aufgefallen, dass du eine Frage gestellt hast! Nein, ich habe absichtlich Audio aus den Clips entfernt, weil es einfach nicht benötigt wird. Ich hoffe, das vereinfacht die Sache noch mehr. Tut mir leid für meinen Neuling hier ... Ich dachte: "Hat das Audio?" Frage war etwas, das von der StackExchange-Website generiert wurde und mich fragte, ob ich meinen Kommentar oder etwas verbalisieren wollte. Sorry, sehr dumm von mir...
Gyan, du bist mein Retter. <Füße küssen> Ich strebe danach, mehr über ffmpeg zu erfahren, aber es scheint eine ziemlich hohe Lernkurve zu geben ... es war nicht möglich, dies in absehbarer Zeit ohne Ihre Hilfe zu erledigen.