VP9 coderen met FFmpeg in 4 stappen
- Controleer je FFmpeg-build: voer
ffmpeg -encodersuit en zoeklibvpx-vp9in de lijst. De meeste builds bevatten deze. - Kies een kwaliteit:
-crf 30 -b:v 0is een goed startpunt voor 1080p-webvideo. Een lagere CRF-waarde betekent hogere kwaliteit en grotere bestanden. - Kies een snelheid:
-cpu-used 3of 4 met-row-mt 1houdt de encodeertijd redelijk. - Voeg Opus-audio toe met
-c:a libopus -b:a 128ken sla de uitvoer op als.webm.
VP9-encoderingsmodi
Constante kwaliteit (CRF + b:v 0)
Onze aanbevolen aanpak voor bestandsconversie. Stel een kwaliteitsdoel in met CRF en laat de encoder de bitrate per frame bepalen. De flag -b:v 0 is vereist om de zuivere CRF-modus in te schakelen (anders past FFmpeg een standaard bitratecap toe).
Commando: ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0 output.webm
Beperkte kwaliteit (CRF + bitratecap)
Combineert CRF-kwaliteitsdoel met een maximale bitrate. Handig voor streaming, waarbij je binnen bandbreedtelimieten moet blijven en de kwaliteit moet behouden.
Commando: ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 2M output.webm
Variabele bitrate (VBR)
Mikt op een specifieke gemiddelde bitrate. Gebruikt bij broadcast en streaming, waar de bandbreedte voorspelbaar moet zijn.
Commando: ffmpeg -i input.mp4 -c:v libvpx-vp9 -b:v 2M output.webm
CRF-waarden voor VP9
De CRF-schaal van VP9 loopt van 0 (beste) tot 63 (slechtste kwaliteit). Hogere getallen betekenen meer compressie en lagere kwaliteit. Voor echte lossless heb je -lossless 1 nodig.
| CRF-bereik | Kwaliteit | Toepassing |
|---|---|---|
| 0 | Hoogste lossy kwaliteit | Archivering (gebruik -lossless 1 voor echte lossless) |
| 15–20 | Hoge kwaliteit | Master-kopieën, hoogwaardige levering |
| 30–35 | Goede balans (standaard) | Weblevering, algemeen gebruik |
| 40–50 | Lagere kwaliteit | Voorbeelden, thumbnails |
| 50–63 | Slechte kwaliteit | Zelden nuttig |
Onze standaard is CRF 30, wat ruwweg dezelfde visuele kwaliteit oplevert als H.264 CRF 23 met 30 tot 50% kleinere bestanden.
Snelheidsinstellingen (cpu-used)
De parameter cpu-used bepaalt de verhouding tussen encoderingssnelheid en compressie-efficiëntie. Waarden 0 tot 5 worden gebruikt voor normale encodering (good quality); hogere waarden horen bij de realtimemodus.
| cpu-used | Relatieve snelheid | Compressieverlies | Toepassing |
|---|---|---|---|
| 0 | Langzaamst | Geen (beste) | Offline batchverwerking |
| 1 | Langzaam | Zeer klein | Hoogwaardige encodering |
| 3 | Gemiddeld | Klein | Online converters (onze instelling) |
| 5 | Snel | Merkbaar | Snelle voorbeelden |
| 8 | Snelst (realtimemodus) | Grootst | Realtime / laagste latentie |
Multithreading (row-mt)
De flag -row-mt 1 schakelt row-based multithreading in, wat de encodering op multicore-systemen meerdere keren kan versnellen met weinig of geen invloed op de kwaliteit. Pure snelheidswinst, dus deze moet altijd aan staan.
Audio: Opus-instellingen
WebM combineert VP9-video met Opus-audio, dat bij elke gangbare bitrate efficiënt is:
- 64 kbps: goed voor spraak en podcasts
- 128 kbps: transparant voor de meeste content (onze standaard)
- 192 kbps: hoge kwaliteit voor muziek
Two-pass vs. single-pass
Single-pass CRF (onze aanpak) levert de optimale verhouding kwaliteit/grootte op bij bestandsconversie. De encoder past de bitrate per frame aan op basis van complexiteit, wat de best mogelijke kwaliteit bij de gekozen CRF oplevert.
Two-pass-encodering is alleen nodig wanneer je een specifieke doelbitrate moet halen (streaming, broadcast). De eerste pass analyseert de content, de tweede pass codeert met optimale bittoewijzing.
De VP9-pipeline van onze converter
Het kerncommando van FFmpeg dat onze converter gebruikt (daarnaast past hij ook de laatste twee flags uit de lijst hieronder toe):
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 voor flag:
-c:v libvpx-vp9— VP9-videocodec gebruiken-crf 30— kwaliteitsdoel (equivalent aan H.264 CRF 23)-b:v 0— zuivere CRF-modus, geen bitratecap-cpu-used 3— gebalanceerde snelheid voor online conversie-row-mt 1— row-based multithreading voor snellere encodering-c:a libopus— Opus-audiocodec-b:a 128k— transparante audiokwaliteit voor de meeste content-pix_fmt yuv420p— 8-bit 4:2:0-kleur, die elke VP9-decoder afspeelt-vf scale=trunc(iw/2)*2:trunc(ih/2)*2— rondt breedte en hoogte af naar beneden op even getallen
Aanbevolen instellingen per resolutie
| Resolutie | Aanbevolen CRF | Doelbitrate (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-encodering in HandBrake
- Open de bronvideo.
- Zet op het tabblad Summary het formaat (Format) op WebM.
- Kies op het tabblad Video de encoder VP9 en stel Constant Quality in. Net als bij CRF betekent een hoger RF-getal een kleiner bestand.
- Kies op het tabblad Audio Opus en klik dan op Start Encode.
HandBrake gebruikt dezelfde libvpx-encoder als FFmpeg, dus het advies over CRF en snelheid op deze pagina geldt ook daar.
10-bit en HDR met VP9
Voeg voor 10-bit video -pix_fmt yuv420p10le -profile:v 2 toe. Voor HDR zijn ook de kleurmetadata nodig, bijvoorbeeld -color_primaries bt2020 -color_trc smpte2084 -colorspace bt2020nc. De converter op deze pagina levert 8-bit 4:2:0 (yuv420p), die elke VP9-decoder afspeelt.