Ich möchte ein Video mit einer Länge von 60 Sekunden auf ein Ziel oder eine maximale Größe von 10 MB codieren .
Ich kenne zwei Ansätze. Einer wird im FFMPEG-Wiki erklärt, der andere in der Dokumentation. Leider habe ich keine Erklärung gefunden, wann welche Methode anzuwenden ist.
Wird eine dieser Methoden empfohlen? Wenn nicht, welche Vor- und Nachteile hat jede Methode?
1) Berechnen Sie Bitrate und stellen Sie es so ein, dass es der Länge des Videos entspricht, wie im ffmpeg-Wiki erläutert
(10 MB * 8192 [konvertiert MB in Kilobit]) / 60 Sekunden = ~ 1365 kbit / s Gesamtbitrate 1365k - 128k (gewünschte Audio-Bitrate) = 1237k Video-Bitrate
ffmpeg -y -i input -c:v copy -preset medium -b:v 1237k -pass 1 -c:a copy -b:a 128k -f mp4 /dev/null && \
ffmpeg -i input -c:v libx264 -preset medium -b:v 1237k -pass 2 -c:a libfdk_aac -b:a 128k output.mp4
2) Verwenden Sie den -fs
Parameter und lassen Sie ffmpeg es herausfinden.
ffmpeg -i input -c:v copy -c:a copy -preset medium -crf 23 -fs 10485760 output.mp4
libx264
als verwendenc:v
. In diesemfs
Beispiel wird das Video nicht transkodiert, da-c:v copy
es verwendet wird. Also haben diepreset
undcrf
auch keine Wirkung.