Einfache Codierung

Grundlagen der Videokomprimierung

In diesem Abschnitt werden die grundlegenden Optionen für die VP9-Codierung behandelt, einschließlich Bildgröße, grundlegender Bitratensteuerung und Qualität.

Wenn du noch nicht mit der Videokomprimierung vertraut bist, findest du in diesem Video weitere Informationen dazu, warum sie erforderlich ist und wie sie funktioniert.

Einfache Codierung

Mit dem folgenden FFmpeg-Befehl wird eine Eingabedatei in ein VP9-Video mit Opus-Audio konvertiert. Dies ist die einfachste mögliche Codierung, bei der Standardeinstellungen verwendet werden.

ffmpeg -i tears_of_steel_1080p.webm -c:v libvpx-vp9 -c:a libopus output.webm

Bei dieser FFmpeg-Codierung werden die folgenden Befehlszeilenparameter verwendet:

FFmpeg
-i <filename> Gibt den Namen der Eingabedatei an.
-c:v libvpx-vp9 Weist FFmpeg an, ein VP9-Video zu erstellen
-c:a libopus Weist FFmpeg an, Opus-Audio zu erstellen
output.webm Gibt den Namen der Ausgabedatei an.

FFmpeg leitet den Typ der zu erstellenden Datei aus dem von Ihnen verwendeten Ausgabedateinamen ab. In diesem Beispiel gibt FFmpeg eine WebM-Datei aus, da wir output.webm angegeben haben.

Auflösung

Jedes Video hat eine Framegröße, die die Pixelbreite und ‑höhe angibt. Mit dem folgenden FFmpeg-Befehlszeilenparameter kann die Ausgabevideo-Framegröße für die VP9-Codierung gesteuert werden:

FFmpeg
-vf scale=<width>x<height> Breite und Höhe des Frames

Mit dem folgenden FFmpeg-Befehl wird beispielsweise ein 640 × 480 VP9-WebM-Video ausgegeben.

ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 \
  -c:v libvpx-vp9 -c:a libopus output.webm

Kleinere Auflösungen haben eine geringere Qualität, größere Auflösungen erfordern jedoch mehr Bandbreite und mehr Rechenleistung für die Dekodierung und werden möglicherweise nicht auf älteren Geräten unterstützt. Für VP9 gilt 640 × 480 als sichere Auflösung für eine Vielzahl von Mobilgeräten und Webgeräten.

Bitrate

VP9 unterstützt verschiedene Bitratenmodi:

Modus
Konstanter Quantizer (Q) Sie können einen festen Quantisierungsfaktor angeben. Die Bitrate variiert.
Eingeschränkte Qualität (Constrained Quality, CQ) Damit können Sie eine maximale Qualitätsstufe festlegen. Die Qualität kann innerhalb der Bitratenparameter variieren
Variable Bitrate (VBR) Gleicht Qualität und Bitrate im Zeitverlauf innerhalb von Bitratenbeschränkungen aus
Konstante Bitrate (CBR) Die Bitrate wird möglichst konstant gehalten, während die Qualität variiert.

Der CQ-Modus wird für dateibasierte Videos (im Gegensatz zu Livestreams) empfohlen. Die folgenden FFmpeg-Befehlszeilenparameter werden für den CQ-Modus verwendet:

FFmpeg
-b:v <arg> Legt die Zielbitrate fest (z. B. 500 k).
-minrate <arg>
-maxrate <arg>
Legt die Mindest- und Höchstbitrate fest.
-crf <arg> Legt die maximale Qualitätsstufe fest. Gültige Werte sind 0–63. Niedrigere Zahlen stehen für eine höhere Qualität.

Mit dem folgenden FFmpeg-Befehl wird beispielsweise eine Videodatei mit mittlerer Qualität (640 × 480) im CQ-Modus mit einer durchschnittlichen Bitrate von 750 kbit/s und einer maximalen Qualität von 33 erstellt.

ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 \
  -b:v 750k -crf 33 -c:v libvpx-vp9 -c:a libopus output.webm

Die Bitrate hängt von der gewünschten Qualität und der Auflösung des Videos ab. Eine vollständige Liste der Empfehlungen für Bitraten bei verschiedenen Auflösungen finden Sie hier.

Qualitäts- und Geschwindigkeitseinstellungen

Die Videokomprimierung ist ein Kompromiss zwischen der Qualität der Ausgabe und der Zeit, die für die Erstellung benötigt wird. Im Allgemeinen gilt: Je mehr Zeit für die Codierung zur Verfügung steht, desto höher ist die Qualität. Die Zeit, die für die höchstmögliche Qualität erforderlich ist, ist jedoch möglicherweise unpraktisch.

VP9 bietet mehrere Einstellungen, um Qualität und Geschwindigkeit auszugleichen:

  • Die Qualitätseinstellung gibt dem Encoder vor, wie das Video komprimiert werden soll. Die verfügbaren Modi sind „Best“, „Good“ und „Realtime“.

  • Mit den Threading-Einstellungen kann der Encoder mehrere CPU-Threads zum Codieren des Videos verwenden. Diese Einstellungen können die Qualität leicht verringern, aber die Codierungs- und Decodierungsgeschwindigkeit erheblich verbessern.

Diese beiden Arten von Einstellungen werden durch mehrere Befehlszeilenparameter gesteuert:

FFmpeg
-threads Gibt die Anzahl der Threads an, die während der Codierung verwendet werden sollen.
-quality Kann auf good, best oder realtime festgelegt werden.
-speed Dieser Parameter hat unterschiedliche Bedeutungen, je nachdem, ob die Qualität auf good oder realtime festgelegt ist. Die Geschwindigkeitseinstellungen 0-4 gelten für VoD in good und best. Dabei ist 0 die höchste und 4 die niedrigste Qualität. Gültige Werte für Realtime sind 5-8. Niedrigere Zahlen bedeuten höhere Qualität.
-tile-columns Beim Tiling wird das Video in rechteckige Bereiche aufgeteilt, was die Verwendung von Multithreading für die Codierung und Decodierung ermöglicht. Die Anzahl der Kacheln ist immer eine Zweierpotenz. 0=1 Kachel, 1=2, 2=4, 3=8, 4=16, 5=32.

Mit dem folgenden FFmpeg-Befehl wird eine 640 × 480-Datei mit der Qualität „gut“ und der Geschwindigkeit 0 (hohe Qualität) erstellt:

ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 \
  -b:v 750k -quality good -speed 0 -crf 33 -c:v libvpx-vp9 -c:a libopus \
  output.webm

Die Optionen für die Qualitäts- und Geschwindigkeitseinstellungen können je nach Auflösung und verfügbarer Rechenleistung variieren. Eine vollständige Liste der Empfehlungen finden Sie im nächsten Abschnitt.