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!
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.
OstinatoFreak
Gyan
OstinatoFreak
ffmpeg - i inputfile -vf "setpts=(PTS-STARTPTS)/10" -crf 18 outputfile
OstinatoFreak
OstinatoFreak