Wie man die Bitrate, -maxrate und -bufsize eines Videos für das Web berücksichtigt

18168
Robin

Ich verwende ffmpeg, um meine Videos zu kodieren, um sie im Web hochzuladen. Ich habe diesen Beitrag über die Verwendung von ffmpeg gesehen, konnte mich aber nicht so recht mit den Werten auseinandersetzen.

Angenommen, ich habe ein Video mit einer Größe von 70 MB und einer Dauer von 4 Minuten. Wie würde ich den Wert für diese Flags berücksichtigen: -b:v, -maxrateund -bufsizefür diesen Befehl?

ffmpeg -i input -codec:v libx264 -profile:v main -preset slow -b:v ? -maxrate ? -bufsize ? -vf "scale=720:trunc(ow/a/2)*2" -threads 0 -codec:a libfdk_aac -movflags +faststart output 

Oder gibt es einen normalen Wert, wie für die crfWerte 19-24? Ich würde mich sehr über Ihre Hilfe und Anleitung freuen.

8
Videocodierung ist eine Kunst, und es gibt Hunderte von Parametern, die man beherrschen muss. Beachten Sie, dass die Zwei-Pass-Kodierung in den meisten Szenarien (viel) bessere Qualität und Komprimierung bietet als das Spielen mit Bitraten. Normalerweise hängt die endgültige Größe und die Video-Bitrate hauptsächlich von der Video-Ausgabegröße ab. ffmpeg ist normalerweise intelligent genug, um Maxrate und Bitrate zu wählen, wenn Sie die gleiche Videoqualität beibehalten. Beachten Sie auch, dass das Erstellen eines Videos mit einer Breite von 480 Pixeln in den meisten Szenarien gut genug ist und dadurch viel mehr Bandbreite eingespart wird als mit Bitraten. earizon vor 8 Jahren 0
@earizon Ich stimme zu, Videocodierung ist eine Kunst und 480 ist normalerweise gut genug. Ich mag es jedoch auch, höhere Auflösungen zur Verfügung zu haben, da ich bei 640x480 keine CRT mehr verwende. Es ist definitiv eine bessere Möglichkeit, die Größe zu reduzieren, als mit Bitraten zu spielen, aber ich mag Optionen. Wyatt8740 vor 8 Jahren 1

1 Antwort auf die Frage

13
Wyatt8740

Das hängt wirklich von Ihrer Upload-Geschwindigkeit ab.

bufsizebestimmt, wie religiöses ffmpeg Ihre Bitrate konstant hält. Wenn Sie bufsizegemäß FFmpeg-Wiki einen Wert von 64 KB festlegen : Durch Begrenzung der Ausgabebitrate wird die aktuelle Bitrate alle 64 Kilobyte berechnet und entsprechend angepasst. Kleinere Größen von bufsizekönnen für die Qualität schädlich sein, indem sie für x264 nicht genügend Platz zwischen den Überprüfungen zulassen, um plötzliche Änderungen vorzunehmen - Sie werden blockiert.

Wenn Sie maxrate640 KBit / s haben und 64 KB, bufsizedann würde jedes Zehntel einer Sekunde x264 prüfen. Dies ist nicht optimal - FFmpeg Wiki: Die Kodierung für Streaming-Sites empfiehlt, es alle 1 bis 2 Sekunden auszuführen. Wenn dies keinen Sinn ergibt, stellen Sie sich das als maxrate/ bufsize= Häufigkeit der Überprüfungen an. Halten Sie diese Frequenz als Faustregel zwischen 1 und 2 Sekunden.

Wenn Sie beide gesetzt maxrateund bufsize, sollten Sie:

  • gesetzt maxrate, was auch immer Ihre niedrigste Upload - Geschwindigkeit wahrscheinlich sein wird (im ffmpeg Wiki Beispiel ist dies 80% der gesamten Upload - Geschwindigkeit, aber die Leistung kann variieren).
  • Stellen Sie bufsizeeinen Wert ein, der zwischen Ihrer maxrate(eine Sekunde) und der zweiten maxrate(2 Sekunden) liegt. Wenn dies immer noch nicht niedrig genug ist, senken Sie den Wert maxrateund stellen Sie ihn bufsizeentsprechend ein.

Dann müssen Sie ein bisschen maxrateherumspielen, aber da Sie irgendwo anfangen müssen, würde ich bei 600k anfangen, was für mich in der Regel zufriedenstellend genug war, bevor ich crfalles verwendete.

Wenn Sie möchten, können Sie bufsizefür alle drei oder vier Sekunden niedrigere Werte ausprobieren, nur um zu sehen, wie sich der Wert ändert, wie Ihre Ausgabe aussieht. Dann können Sie bestimmen, wie viel Sie sich für Ihr Video sorgen sollten.

Es gibt eigentlich keinen normalen Wert. Die crfOptimierung der Ausgabe hängt davon ab, was die beste Puffergröße für die Aufrechterhaltung der eingestellten Rate ist. Es wird versucht, die Dateigröße so gering wie möglich zu halten und gleichzeitig die Qualität auf Kosten gelegentlicher Spitzen zu bewahren.

Sollte "Bufsize nicht auf einen Wert zwischen der maximalen Rate (eine Sekunde) und die Hälfte Ihrer maximalen Rate (2 Sekunden) eingestellt sein", sollte "Bufsize auf einen Wert zwischen der maximalen Rate (eine Sekunde) und der doppelten maximalen Rate (2) eingestellt werden Sekunden) "? Ely vor 8 Jahren 1
@Ely Ich glaube du hast recht. Meiner würde es jede halbe Sekunde tun. Ich werde das reparieren! Wyatt8740 vor 8 Jahren 0
@ Wyatt8740 Entschuldigung, ich war sehr beschäftigt. Nur eine Frage. Wenn ich "crf" verwende, brauche ich nicht "bitrate", "buffsize" und "maxrate" anzugeben. Und wenn ja, was ist effizienter (verwenden Sie "crf" oder "bitrate", "buffsize" und "maxrate")? Robin vor 8 Jahren 0
@Robin Sie können bufsize und maxrate mit crf verwenden. Denken Sie daran, dass crf die Bitrate im laufenden Betrieb an eine bestimmte Qualität anpasst, und wenn Teile des Videos sehr komplex sind, wird die Bitrate himmelhoch schießen und Sie möchten dies wahrscheinlich nicht, also sollten Sie lieber mit bufsize "sperren" und maxrate (aber nicht zu streng, oder dein video sieht scheiße aus :)) Ely vor 8 Jahren 0
@Robin richtig, du solltest crf nicht mit den anderen verwenden müssen. Sie können es jedoch, wenn Sie es einschränken möchten. crf versucht, eine konstante Qualität zu gewährleisten - Sie können dies mit "bufsize" und "maxrate" innerhalb der Grenzen erzwingen. Sie brauchen jedoch keine "Bitrate". Wie Ely sagte, wird es für Streaming besser. Wyatt8740 vor 8 Jahren 0
@ Wyatt8740 Ok. Ich glaube, ich verstehe das. Ich habe gerade diesen Beitrag gesehen (http://trac.ffmpeg.org/wiki/Encode/H.264#CRFwithmaximumbitrate). Wie Sie gesagt haben, sollte die Frequenz zwischen 1 und 2 Sekunden liegen, aber da die "-maxrate" 400k und die "-bufsize" 1835k beträgt, ist das Ergebnis 0,2. Was ist denn hier los? Robin vor 8 Jahren 0
@Robin Meine Empfehlung war einfach eine Faustregel. In diesem Beispiel wird eine aggressivere (und möglicherweise weniger effiziente) Überprüfungsrate verwendet. Es erlaubt nicht so viele Qualitätsschwankungen wie bei mir - Sie möchten ihm etwas Spielraum geben, aber nicht genug, dass die Größe von Minute zu Minute erheblich abweicht. Ich würde die 0,5-Regel empfehlen, aber das heißt nicht, dass es nicht anders geht. Bei einigen Videoquellen, die sich kaum ändern (z. B. Farbbalken oder Standbilder), kann dies akzeptabel sein. Aber ich würde sowieso näher bei 0,5 sein, und wenn irgendetwas einer Sekunde näher kommt als niedriger. Wyatt8740 vor 8 Jahren 0