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

13

Ich verwende ffmpeg, um meine Videos zu kodieren und sie ins Web hochzuladen. Ich habe diesen Beitrag über die Verwendung von ffmpeg gesehen, aber nicht ganz verstanden, wie man die Werte berücksichtigt.

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 sind 19-24? Ich würde mich sehr über Ihre Hilfe und Anleitung freuen.

Robin
quelle
Die Videokodierung ist eine Kunst, und es gibt Hunderte von Parametern, die beherrscht werden müssen. Beachten Sie, dass die Zwei-Pass-Codierung in den meisten Szenarien (viel) bessere Qualität und Komprimierung bietet als das Spielen mit Bitraten. Normalerweise hängen die endgültige Größe und die Video-Bitrate hauptsächlich von der Videoausgabegröße ab. ffmpeg ist normalerweise intelligent genug, um Max- 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 Pixel in den meisten Szenarien gut genug ist und dadurch viel mehr Bandbreite spart als beim Spielen mit Bitraten.
Earizon
1
@earizon Ich stimme zu, Videokodierung 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 keine CRT mit 640 x 480 mehr verwende. Es ist definitiv ein besserer Weg, um Größen zu reduzieren, als mit Bitraten zu spielen, aber auch hier mag ich Optionen.
Wyatt8740

Antworten:

20

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

bufsizewird bestimmen, wie religiös ffmpeg ist, um Ihre Bitrate konstant zu halten. Wenn Sie bufsizegemäß FFmpeg Wiki: Begrenzen der Ausgabe-Bitrate einen Wert von 64 KB festlegen , wird die aktuelle Bitrate alle 64 Kilobyte berechnet und entsprechend angepasst. Kleinere Größen für bufsizekönnen die Qualität beeinträchtigen, da zwischen den Überprüfungen für x264 nicht genügend Platz für plötzliche Änderungen vorhanden ist. Sie werden blockiert.

Wenn Sie maxrate640 KBit / s und 64 KBit / s haben, bufsizewird jede Zehntelsekunde x264 überprüft. Dies ist nicht optimal - FFmpeg Wiki: Die Codierung für Streaming-Sites empfiehlt, sie alle 1 bis 2 Sekunden auszuführen. Wenn dies keinen Sinn ergab, betrachten Sie es als maxrate/ bufsize= Häufigkeit der Überprüfungen. Halten Sie diese Frequenz als Faustregel zwischen 1 und 2 Sekunden.

Wenn Sie beide maxrateund einstellen bufsize, sollten Sie:

  • Satz maxratezu , was auch immer Ihre niedrigsten Upload - Geschwindigkeit wahrscheinlich sein wird (im ffmpeg Wiki Beispiel , das ist 80% der gesamten Upload - Geschwindigkeit, aber die Leistung kann variieren).
  • Stellen Sie bufsizeirgendwo zwischen dem gleichen Wert wie Ihre maxrate(eine Sekunde) und zweimal maxrate(2 Sekunden) ein. Wenn dies immer noch nicht niedrig genug ist, senken Sie Ihre maxrateund setzen Sie sie bufsizeentsprechend zurück.

Dann musst du ein bisschen maxrateherumspielen , aber da du irgendwo anfangen musst, würde ich einfach bei ungefähr 600 km anfangen, was normalerweise für mich befriedigend genug war, bevor ich crffür alles verwendet habe.

Wenn Sie möchten, können Sie beispielsweise bufsizealle drei oder vier Sekunden niedrigere Werte ausprobieren , um zu sehen, wie sich der Wert auf das Aussehen Ihrer Ausgabe ändert. Dann können Sie festlegen, wie sehr Sie sich für Ihr Video darum kümmern sollten.

Eigentlich gibt es keinen normalen Wert. Sie crfoptimieren die Ausgabe auf der Grundlage der ihrer Meinung nach besten Puffergröße, um die eingestellte Rate beizubehalten. Es wird versucht, die Dateigröße so gering wie möglich zu halten und gleichzeitig die Qualität beizubehalten, auf Kosten gelegentlicher Spitzen.

Wyatt8740
quelle
1
Sollte "Bufsize nicht auf einen Wert zwischen Ihrer Maximalrate (eine Sekunde) und der Hälfte Ihrer Maximalrate (2 Sekunden)" eingestellt sein, sollte "Bufsize auf einen Wert eingestellt werden, der zwischen Ihrer Maximalrate (eine Sekunde) und der doppelten Maximalrate (2 Sekunden) liegt Sekunden) "?
Ely
@Ely Ich denke du hast recht. Meins würde es jede halbe Sekunde tun. Ich werde das beheben!
Wyatt8740
@ Wyatt8740 Entschuldigung, ich war sehr beschäftigt. Nur eine Frage. Wenn ich verwende crf, muss ich nicht angeben bitrate, buffsizeund maxrate? Und wenn ja, was effizienter ist (Nutzung crfoder bitrate, buffsizeund maxrate)?
Robin
@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. Wenn Teile des Videos sehr komplex sind, wird die Bitrate himmelhoch aufgenommen, und das möchten Sie wahrscheinlich nicht. Setzen Sie also besser eine Sperre mit Bufsize und maxrate (aber nicht zu streng, oder Ihr Video wird wie Mist aussehen! :))
Ely
@Robin richtig, du solltest crf nicht mit den anderen verwenden müssen. Sie können dies jedoch tun, wenn Sie es einschränken möchten. crf versucht, die Qualität konstant zu halten - Sie können dies in Grenzen mit bufsizeund erzwingen maxrate. Das brauchst du aber nicht bitrate. Wie Ely sagte, wird es das Streaming verbessern.
Wyatt8740