Variable Bitraten mit den Einstellungen „-vb“ und „minrate“ / „maxrate“ in FFmpeg

10

Beim Rendern ist die Zeit sehr unterschiedlich.

  • -b 3500K -minrate 0K -maxrate 8000K dauert 1 Stunde und 17 Minuten
  • vb=3000k dauert 2,5 Stunden

Was ist vb 3000k und wie unterscheidet es sich von -b 3500K -minrate 0K -maxrate 8000K? Sind diese Einstellungen für die variable Bitrate?

Wenn ich zu -b 3500K -minrate 3500K -maxrate 3500Kist das eine konstante Bitrate?

Scott Downey
quelle

Antworten:

15

Bitte Lesen Sie die Dokumentation für FFmpeg und ausführen ffmpeg -h full für die Liste der Optionen. Schau dir auch diesen Artikel an, den ich geschrieben habe Unterschiede zwischen den Ratensteuerungsmodi in Encodern wie x264 und x265.

Im Allgemeinen bedeuten die Optionen:

  • -b:v (oder -vb, das gleiche) gibt die durchschnittliche Zielbitrate an, die der Encoder verwenden soll:

    -b <int> E..VA. Setze die Bitrate (in Bits / s) (von 0 bis INT_MAX)

  • -minrate Gibt eine Mindesttoleranz an, die verwendet werden soll:

    -minrate <int> E..VA. Minimale Bitrattoleranz (in Bits / s) einstellen. Am nützlichsten beim Einrichten einer CBR-Codierung. Sonst nützt es wenig. (von INT_MIN zu INT_MAX)

  • -maxrate gibt eine maximale Toleranz an. Wie aus der Dokumentation hervorgeht, wird dies jedoch nur in Verbindung mit verwendet bufsize:

    -maxrate <int> E..VA. Maximale Bitrattoleranz (in Bits / s) einstellen. Benötigt bufsize eingestellt werden. (von INT_MIN zu INT_MAX)

    -bufsize <int> E..VA. RateControl-Puffergröße einstellen (in Bits) (von INT_MIN bis INT_MAX)

    Dies ist nur für die Codierung mit variabler Bitrate sinnvoll, bei der der Encoder anstelle einer konstanten Bitrate oder eines Modells mit konstanter Qualität eine Übertragung mit einem virtuellen Puffer am Decoder simuliert. Das -minrate / -maxrate / -bufsize Optionen steuern diese Puffergröße. Sie verwenden diesen Modus normalerweise nur für das Streaming, da die Technik die Bitrate einschränkt, um einen bestimmten Wert nicht zu überschreiten, der einen Über- oder Unterlauf des Decoderpuffers verursachen würde.

Zusammenfassend haben Sie mehrere Möglichkeiten, die Bitrate einzuschränken:

  1. Um einen CBR-Prozess einzurichten, müssen Sie prüfen, was der Encoder bietet. Normalerweise können Sie keine "perfekte" konstante Bitrate erzielen, da der Encoder keine Bits verschwendet. Rahmen -b:v. -minrate, und -maxrate auf dem gleichen Niveau erreichen, zum Beispiel für libx264:

    ffmpeg -i input.mp4 -c:v libx264 -x264-params "nal-hrd=cbr" -b:v 1M -minrate 1M -maxrate 1M -bufsize 2M output.ts
    

    Warnung: Dies kann zu schlechter Qualität für Videos führen, die schwer zu kodieren sind, und es wird Bits verschwendet. Verwenden Sie diese Option nicht, es sei denn, Sie müssen unbedingt eine Ausgabe mit konstanter Rate erreichen.

  2. Richten Sie einen Prozess mit eingeschränkter / variabler Bitrate für das Streaming ein. Benutzen -b:v 3500K -maxrate 3500K -bufsize 1000K, zum Beispiel. Sie müssen die Rate und die Puffergrößen offensichtlich an den Kontext anpassen. Je höher die Puffergröße, desto höher ist die zulässige Bitratenvariation.

  3. Verwenden Sie ein konstantes Qualitätsziel und begrenzen Sie die Bitrate nur, um Spitzen zu fangen. Zum Beispiel verwenden -c:v libx264 -crf 23 -maxrate 4M -bufsize 4M Bei einer variablen Bitrate mit einer Ziel-CRF von 23 kodieren, die Ausgabe jedoch auf maximal 4 MBit / s beschränken.

slhck
quelle
1
Wie würde es mit einer variablen Bitrate codieren? wie in der zu verwendenden Syntax?
Scott Downey
Welchen Encoder möchten Sie verwenden?
slhck
ffmpeg, ich glaube das wird im kdenlive verwendet
Scott Downey
Nein, ich meinte als: x264 für H.264 / MPEG-4 AVC-Video oder XviD für MPEG-4 oder Ogg Theora usw. Einfach gesagt: Welche Datei möchten Sie? MP4?
slhck
3
Sehen Hier Weitere Informationen zur Kodierung mit x264 in FFmpeg. Besonders bei den Presets (ich verwende in der Regel das sehr schnelle Preset, in meinen Tests war der größte Rückgang der Dateigröße zwischen superschnell und sehr schnell - danach waren die Unterschiede viel inkrementeller. YMMV selbstverständlich)
evilsoup