Two-pass encoding in FFmpeg
Kies de doelgrootte, reken die om naar een bitrate en voer daarna twee passes uit. Voorbeeld: een video van 10 minuten die in 100 MB moet passen: 100 × 8.000 ÷ 600 s ≈ 1.333 kbps in totaal; min 128 kbps voor audio blijft er ongeveer 1.200 kbps over voor video.
ffmpeg -y -i input.mkv -c:v libx264 -preset medium -b:v 1200k -pass 1 -an -f null /dev/null— pass 1 (alleen analyse). Schrijf op WindowsNULin plaats van/dev/null.ffmpeg -i input.mkv -c:v libx264 -preset medium -b:v 1200k -pass 2 -c:a aac -b:a 128k output.mp4— pass 2 (de echte codering).
Beide passes moeten dezelfde video-instellingen gebruiken. FFmpeg schrijft de analyse naar ffmpeg2pass-0.log in de huidige map; pass 2 leest dat bestand, en daarna kun je het verwijderen.
Het fundamentele verschil
CRF en two-pass encoding lossen hetzelfde probleem op — kwaliteit afwegen tegen bestandsgrootte — maar vanuit tegengestelde richtingen:
- CRF (Constant Rate Factor): "Ik wil dit kwaliteitsniveau. Geef me welke bestandsgrootte dan ook om dat te bereiken." Je beheert de kwaliteit; de bestandsgrootte is de variabele.
- Two-pass: "Ik wil deze bestandsgrootte (doelbitrate). Geef me de beste kwaliteit die past." Je beheert de bestandsgrootte; de kwaliteit is de variabele.
| Kenmerk | CRF | Two-Pass |
|---|---|---|
| Jij beheert | Kwaliteitsniveau (CRF-getal) | Doelbitrate / bestandsgrootte |
| Variabele | Bestandsgrootte | Kwaliteit |
| Passes | 1 (enkele pass) | 2 (analyse + codering) |
| Snelheid | 1x (referentie) | ~2x trager |
| Bestandsgrootte voorspellen | Onvoorspelbaar | Voorspelbaar |
| Kwaliteitsconsistentie | Constante kwaliteit per frame | Optimale bitverdeling |
Hoe CRF werkt
CRF-codering is een single-pass-proces. De encoder verwerkt elk frame en vraagt: "Hoeveel bits heb ik nodig om dit kwaliteitsniveau voor dit specifieke frame te bereiken?"
- Complexe frames (explosies, snelle beweging) ontvangen meer bits
- Eenvoudige frames (statische shots, titelkaarten) ontvangen minder bits
- De kwaliteit blijft constant; de bitrate varieert
Het resultaat is een VBR-bestand waarbij elk frame precies de bits krijgt die het nodig heeft — geen verspilling bij eenvoudige scènes, geen tekort bij complexe. Daarom levert CRF de optimale kwaliteit-grootteverhouding voor offline codering.
Hoe two-pass werkt
Two-pass encoding verwerkt de video twee keer:
- Pass 1 (Analyse): De encoder scant de volledige video zonder uitvoer te produceren. Hij bouwt een frame-voor-frame complexiteitskaart — welke scènes eenvoudig zijn, welke complex, waar scènewisselingen plaatsvinden.
- Pass 2 (Codering): Met de analyse uit pass 1 verdeelt de encoder de doelbitrate optimaal over alle frames. Complexe scènes krijgen meer van het bitrate-budget; eenvoudige scènes krijgen minder.
Het resultaat: een bestand dat de doelbitrate nauwkeurig haalt en de kwaliteit zo gelijkmatig mogelijk over alle scènes verdeelt.
Kwaliteitsvergelijking
Bij verstandige instellingen leveren CRF en two-pass nagenoeg identieke kwaliteit. De verschillen zijn subtiel:
- CRF-voordeel: Elk frame krijgt precies de bits die het nodig heeft. Geen enkel frame komt tekort. CRF levert mogelijk iets betere gemiddelde kwaliteit omdat het niet beperkt wordt door een bitrate-budget.
- Two-pass-voordeel: Betere bitverdeling bij extreme content (lange video's met sterk wisselende complexiteit). De analysepas helpt de encoder zich voor te bereiden op komende complexe scènes.
In de praktijk is het kwaliteitsverschil tussen CRF en een goed ingestelde two-pass encode verwaarloosbaar voor de meeste content. Je hebt frame-voor-frame VMAF-analyse nodig om verschillen te detecteren.
Snelheidsvergelijking
Het snelheidsverschil is eenvoudig:
- CRF: 1x coderingstijd (één pass door de video)
- Two-pass: ~1.7–2x coderingstijd (eerste pass is snel omdat er geen uitvoer wordt geproduceerd, maar kost toch tijd)
Voor een 10 minuten durende 1080p-video op een moderne CPU:
- CRF medium: ongeveer 10 minuten bij een coderingssnelheid van ~30 fps (18.000 frames ÷ 30 fps = 600 s)
- Two-pass medium: ongeveer 17–20 minuten, omdat de eerste pass sneller verloopt dan de tweede. Een snellere preset verkort beide passes; onze gids over FFmpeg-presets: snelheid vs bestandsgrootte laat de afweging zien.
Wanneer CRF gebruiken
CRF is de betere keuze voor vrijwel alle gangbare scenario's:
- Bestandsconversie: MKV naar MP4, MOV naar MP4, elke formaatconversie waarbij je de beste kwaliteit wilt
- Persoonlijk archief: Je videobibliotheek opslaan met consistente kwaliteit
- Web-upload: YouTube, sociale media en de meeste platforms accepteren variable bitrate-bestanden
- Delen: Wanneer de bestandsgrootte niet exact hoeft te zijn, geeft CRF optimale kwaliteit
- Batchverwerking: Één instelling (CRF 23) werkt goed voor alle contenttypes
Daarom gebruikt onze converter CRF — het levert de beste kwaliteit zonder dat gebruikers doelbitrates hoeven te berekenen.
Wanneer two-pass gebruiken
Two-pass encoding is de betere keuze wanneer de bestandsgrootte voorspelbaar moet zijn:
- DVD/Blu-ray-authoring: Content moet op een specifieke schijfcapaciteit passen
- Bandbreedte-beperkt streamen: Adaptive bitrate streaming (HLS/DASH) vereist precieze bitrate-doelen voor elk kwaliteitsniveau
- Bestandsgroottebeperkingen: Platforms met strikte uploadlimieten (Discord 10 MB zonder Nitro, e-mail 25 MB) waarbij je de uitvoer gegarandeerd wilt laten passen
- Professionele broadcast: Broadcastpijplijnen vereisen vaak CBR of precieze VBR-doelen
Het beste van beide: Capped CRF
Er is een hybride aanpak genaamd capped CRF (beperkte kwaliteit) die de voordelen van beide methoden combineert:
ffmpeg -i input.mkv -c:v libx264 -crf 23 -maxrate 4000k -bufsize 8000k -c:a aac output.mp4
Dit instrueert de encoder: "Streef naar CRF 23-kwaliteit, maar blijf op of onder ongeveer 4 Mbps (gemiddeld over de buffer van 8.000 kbit, ongeveer 2 seconden)." In de praktijk:
- Eenvoudige scènes: gecodeerd op CRF 23-kwaliteit (ruim onder 4 Mbps)
- Complexe scènes: gecodeerd op CRF 23-kwaliteit, tenzij dat 4 Mbps zou overschrijden; in dat geval wordt de kwaliteit iets verlaagd om binnen de limiet te blijven
Capped CRF is ideaal voor streamingapplicaties waarbij je bandbreedtevoorspelbaarheid nodig hebt zonder de kwaliteit-eerste aanpak van CRF op te offeren.
VBR 1-pass vs 2-pass in Premiere Pro, Media Encoder en HandBrake
- Premiere Pro en Adobe Media Encoder: in de H.264-exportinstellingen biedt Bitrate Encoding de opties CBR, VBR 1 pass en VBR 2 pass. VBR 2 pass duurt langer en verdeelt de bits bij hetzelfde doel meestal beter.
- HandBrake: schakel op het tabblad Video over van Constant Quality naar Avg Bitrate en zet daarna two-pass aan (afhankelijk van de versie heet dat 2-Pass of Multi-Pass Encoding).
- Vuistregel: bij ruime bitrates zien 1-pass en 2-pass er hetzelfde uit; de tweede pass loont pas als de bitrate krap is voor de content.