VP9 mit FFmpeg encodieren in 4 Schritten
- Prüfen Sie Ihren FFmpeg-Build: Führen Sie
ffmpeg -encodersaus und suchen Sie in der Liste nachlibvpx-vp9. Die meisten Builds enthalten ihn. - Wählen Sie eine Qualität:
-crf 30 -b:v 0ist ein guter Ausgangspunkt für 1080p-Webvideo. Ein niedrigerer CRF-Wert bedeutet höhere Qualität und größere Dateien. - Wählen Sie eine Geschwindigkeit:
-cpu-used 3oder 4 mit-row-mt 1hält die Encoding-Zeiten im Rahmen. - Fügen Sie Opus-Audio hinzu mit
-c:a libopus -b:a 128kund speichern Sie die Ausgabe als.webm.
VP9-Encoding-Modi
Konstante Qualität (CRF + b:v 0)
Unser empfohlener Ansatz für die Dateikonvertierung. Legen Sie ein Qualitätsziel mit CRF fest und lassen Sie den Encoder die Bitrate pro Frame bestimmen. Das Flag -b:v 0 ist erforderlich, um den reinen CRF-Modus zu aktivieren (sonst wendet FFmpeg eine Standard-Bitratenobergrenze an).
Befehl: ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0 output.webm
Eingeschränkte Qualität (CRF + Bitratenlimit)
Kombiniert CRF-Qualitätsziel mit einer maximalen Bitrate. Nützlich für Streaming, wenn Sie innerhalb von Bandbreitengrenzen bleiben und gleichzeitig die Qualität halten müssen.
Befehl: ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 2M output.webm
Variable Bitrate (VBR)
Zielt auf eine bestimmte durchschnittliche Bitrate ab. Wird für Broadcast und Streaming verwendet, wenn die Bandbreite vorhersagbar sein muss.
Befehl: ffmpeg -i input.mp4 -c:v libvpx-vp9 -b:v 2M output.webm
CRF-Werte für VP9
Die CRF-Skala von VP9 reicht von 0 (beste) bis 63 (schlechteste Qualität). Höhere Zahlen bedeuten mehr Komprimierung und geringere Qualität. Echtes verlustfreies Encoding erfordert -lossless 1.
| CRF-Bereich | Qualität | Anwendungsfall |
|---|---|---|
| 0 | Höchste verlustbehaftete Qualität | Archivierung (für echtes Verlustfrei -lossless 1 verwenden) |
| 15–20 | Hohe Qualität | Master-Kopien, hochwertige Auslieferung |
| 30–35 | Guter Kompromiss (Standard) | Web-Auslieferung, allgemeine Nutzung |
| 40–50 | Niedrigere Qualität | Vorschauen, Thumbnails |
| 50–63 | Schlechte Qualität | Selten sinnvoll |
Unser Standard ist CRF 30, was eine visuelle Qualität liefert, die etwa H.264 CRF 23 entspricht – bei 30 bis 50 % kleineren Dateigrößen.
Geschwindigkeitseinstellungen (cpu-used)
Der Parameter cpu-used steuert das Verhältnis zwischen Encoding-Geschwindigkeit und Komprimierungseffizienz. Die Werte 0–5 dienen dem normalen Encoding (gute Qualität); höhere Werte gehören zum Echtzeitmodus.
| cpu-used | Relative Geschwindigkeit | Komprimierungsverlust | Anwendungsfall |
|---|---|---|---|
| 0 | Am langsamsten | Keiner (bester) | Offline-Stapelverarbeitung |
| 1 | Langsam | Sehr gering | Hochwertiges Encoding |
| 3 | Mittel | Gering | Online-Konverter (unsere Einstellung) |
| 5 | Schnell | Spürbar | Schnelle Vorschauen |
| 8 | Am schnellsten (Echtzeitmodus) | Am größten | Echtzeit / niedrigste Latenz |
Multithreading (row-mt)
Das Flag -row-mt 1 aktiviert zeilenbasiertes Multithreading, das das Encoding auf Multi-Core-Systemen um ein Mehrfaches beschleunigen kann, mit kaum oder keinem Qualitätsverlust. Das ist ein reiner Geschwindigkeitsgewinn und sollte immer aktiviert sein.
Audio: Opus-Einstellungen
WebM kombiniert VP9-Video mit Opus-Audio, das bei jeder gängigen Bitrate effizient ist:
- 64 kbps: gut für Sprache und Podcasts
- 128 kbps: transparent für die meisten Inhalte (unser Standard)
- 192 kbps: hohe Qualität für Musik
Two-Pass vs. Single-Pass
Single-Pass-CRF (unser Ansatz) liefert das optimale Verhältnis von Qualität zu Dateigröße für die Dateikonvertierung. Der Encoder passt die Bitrate pro Frame je nach Komplexität an, was die bestmögliche Qualität beim gewählten CRF ergibt.
Two-Pass-Encoding wird nur benötigt, wenn Sie eine bestimmte Ziel-Bitrate treffen müssen (Streaming, Broadcast). Der erste Durchlauf analysiert den Inhalt, der zweite codiert mit optimaler Bitverteilung.
Die VP9-Pipeline unseres Konverters
Der zentrale FFmpeg-Befehl, den unser Konverter verwendet (zusätzlich wendet er die letzten beiden Flags der folgenden Liste an):
ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0 -cpu-used 3 -row-mt 1 -c:a libopus -b:a 128k output.webm
Flag für Flag:
-c:v libvpx-vp9— VP9-Videocodec verwenden-crf 30— Qualitätsziel (entspricht H.264 CRF 23)-b:v 0— reiner CRF-Modus, keine Bitratenobergrenze-cpu-used 3— ausgewogene Geschwindigkeit für Online-Konvertierung-row-mt 1— zeilenbasiertes Multithreading für schnelleres Encoding-c:a libopus— Opus-Audiocodec-b:a 128k— transparente Audioqualität für die meisten Inhalte-pix_fmt yuv420p— 8-Bit-Farbe mit 4:2:0, die jeder VP9-Decoder abspielt-vf scale=trunc(iw/2)*2:trunc(ih/2)*2— rundet Breite und Höhe auf gerade Zahlen ab
Empfohlene Einstellungen nach Auflösung
| Auflösung | Empfohlener CRF | Ziel-Bitrate (VBR) |
|---|---|---|
| 360p | 36–40 | 200–400 kbps |
| 480p | 33–36 | 500–900 kbps |
| 720p | 30–33 | 1–2 Mbps |
| 1080p | 28–32 | 2–4 Mbps |
| 2160p (4K) | 25–30 | 8–16 Mbps |
VP9-Encoding in HandBrake
- Öffnen Sie das Quellvideo.
- Stellen Sie auf dem Tab Summary (Übersicht) das Format auf WebM.
- Wählen Sie auf dem Tab Video den Encoder VP9 und stellen Sie Constant Quality ein. Wie bei CRF bedeutet ein höherer RF-Wert eine kleinere Datei.
- Wählen Sie auf dem Tab Audio Opus und klicken Sie dann auf Start Encode.
HandBrake verwendet denselben libvpx-Encoder wie FFmpeg, daher gelten die Hinweise zu CRF und Geschwindigkeit auf dieser Seite auch hier.
10-Bit- und HDR-VP9
Für 10-Bit-Video fügen Sie -pix_fmt yuv420p10le -profile:v 2 hinzu. HDR benötigt außerdem die Farbmetadaten, zum Beispiel -color_primaries bt2020 -color_trc smpte2084 -colorspace bt2020nc. Der Konverter auf dieser Seite gibt 8-Bit mit 4:2:0 (yuv420p) aus, was jeder VP9-Decoder abspielt.