
Ich muss also viel Platz auf meiner Festplatte sparen, also kodiere ich PNG-Dateien in verlustfreie Videos, damit ich die PNG-Dateien löschen kann. Ich kodiere eine mit 72 fps und eine leicht verlangsamt auf 60 fps.
Nehmen wir an, dies ist der Befehl, den ich zum Kodieren auf 72 fps verwende:
ffmpeg -framerate 72 -i png/%%06d.PNG -i audio/72.m4a^
-c:v libx265 -c:a copy -pix_fmt yuv444p -crf:v 0^
video/72.mkv
Dies ist der 60fps-Befehl:
ffmpeg -framerate 60 -i png/%%06d.PNG -i audio/60.m4a^
-c:v libx265 -c:a copy -pix_fmt yuv444p -crf:v 0^
video/60.mkv
Was wäre das Äquivalent des 60fps-Befehls, wenn ich es aus der 72fps-Videodatei statt aus den PNG-Dateien kodieren möchte, da diese gelöscht wurden, das Video aber auf 60fps verlangsamen möchte, ohne Frames zu verlieren? Wenn möglich, möchte ich ihm sagen, dass er genau mit 60fps kodieren soll, ohne den setpts
Videofilter zu verwenden, und/oder den Videostream mit einer anderen Framerate kopieren soll (wobei ich nicht sicher bin, ob das überhaupt möglich ist).
Antwort1
Der Grundbefehl ist
ffmpeg -itsscale 1.2 -i video/72.mkv -i audio/60.m4a^
-map 0:v -map 1 -c copy video/60.mp4
Dies verwendet die Eingabeoption, itsscale
um Zeitstempel neu zu skalieren, wobei 1.2
die Dezimaldarstellung von ist 72/60
. Beachten Sie, dass dies dem Ausgabe-Writer keinen neuen Framerate-Wert liefert. Bei Formaten wie MKV wird also die alte Rate mit ffprobe angezeigt, aber die Wiedergabe erfolgt mit der neuen Rate. Bei MP4 sollten Sie die neue Rate sehen.