FFMPEG-Standardtranscodierungseinstellungen

Ich arbeite an einem Projekt, das den Benutzern Video-Streaming über das Internet sowohl auf Webbrowsern als auch auf mobilen Geräten bietet.

Ich verwende folgenden Beispielbefehl FFMPEGfür transcodedas Video:

ffmpeg -y -i inputvideo.mp4 -async 1 -metadata:s:v:0 start_time=0 
-s 1280x720 -vcodec libx264 -strict experimental -pix_fmt yuv420p 
-profile:v baseline -movflags +faststart -acodec aac -profile:a aac_low 
-b:v 2000k -refs 6 -coder 1 -sc_threshold 40 -flags +loop -me_range 16 
-subq 7 -i_qfactor 0.71 -qcomp 0.6 -qdiff 4 -trellis 1 -b:a 128k outputvideo.mp4

Der Befehl wird dynamisch mithilfe der Programmiersprache generiert, nachdem die Videodetails nach dem Hochladen abgerufen wurden. Was ich tue, ist, einfach Bitrate, Höhe und Breite des Videos mit den folgenden Einstellungen zurückzusetzen:

Wenn height >= 720Sie es dann auf einstellen 720, wird die Breite automatisch entsprechend der Höhe eingestellt und beträgt bit-rate,5000k

Wenn height >= 480Sie es dann auf einstellen 480, wird die Breite automatisch entsprechend der Höhe eingestellt und beträgt bit-rate,2500k

Wenn height >= 360Sie es dann auf einstellen 360, wird die Breite automatisch entsprechend der Höhe eingestellt und bit-ratewird sein1000k

Ich habe diese Logik von diesem Link .

Ich möchte jedoch die Videoqualität um 25-30 % mehr herabstufen, da Standbilder größer sind, als ich nach der Transcodierung vermute, und die Datengebühren mehr kosten.

Bei der Suche danach habe ich einen anderen Link gefunden , der eine andere Bitrate hat als der, den ich verwende. Ich bin mir nicht sicher, welches besser ist.

Kann mir jemand vorschlagen, wie ich die Videos um 25-30 % mehr als die aktuelle Einstellung verkleinern kann, ohne die Qualität des Videos mehr zu beeinträchtigen?

Antworten (1)

Anstatt eine konstante Bitrate zu verwenden, versuchen Sie es mit einer konstanten Qualität (AKA Constant Rate Factor oder crf).

Also anstatt zu -b:v 2000verwenden -crf 23(Anzahl anpassen, um die Qualität zu ändern, höher ist kleiner/geringere Qualität und niedriger ist größer/bessere Qualität).

Konstante Qualität gibt Ihnen normalerweise mehr Leistung für Ihre Bits, da die Bitrate dort gespart wird, wo sie nicht wirklich benötigt wird. Es macht auch zusätzliches Scripting für unterschiedliche Größen überflüssig, da es automatisch die Bitrate für kleinere Frame-Größen senkt.

Sie können auch die x264-Voreinstellungen wie -preset sloweroder verwenden -preset veryslow, um x264 zu erhalten, um mehr Zeit mit der Optimierung zu verbringen. Außerdem entfällt die Notwendigkeit, alle zusätzlichen Codierungs-Flags hinzuzufügen – die Voreinstellungen sind im Grunde fertige Codierungs-Flags (vermutlich von Leuten erstellt, die wissen, was sie tun). Mehr zur x264-Kodierung hier

Ihr Befehl könnte also so aussehen:

ffmpeg -y -i inputvideo.mp4 -async 1 -metadata:s:v:0 start_time=0 -s 1280x720 -vcodec libx264 -pix_fmt yuv420p -profile:v baseline -movflags faststart -profile:a aac_low -preset slower -crf 23 -b:a 128k outputvideo.mp4

Ich glaube nicht, dass Sie das -strict-experimentalFlag brauchen, es sei denn, Sie haben eine alte Version von ffmpeg.

+1 für -crf. Wenn Sie die Zeit haben, können -crf 23 und veryslow sehr kompakte Dateien mit ziemlich guter Qualität liefern.