top of page
XSplits forside

XSplit-kvalitet, VBV-buffer og presetindstillinger

Melvin Dichoso
2. mar. 2016
5 min læsning

XSplit bruger x264-encoderen, så lad os begynde med at sige, at de parametre, der nævnes i titlen, bortset fra kvalitetsparametrene, betyder det samme som parametrene i x264-wikien her.


Kvalitet

Da kvalitet er anderledes, begynder vi med at diskutere netop det. I x264-termer kaldes kvaliteten CRF-faktoren eller Constant Rate Factor. Encoderen accepterer enhver værdi fra CRF=0 (tabsfri) til CRF=51 (forfærdelig kvalitet).

Når du encoder en videostream, kan du generelt bruge forskellige metoder til rate control. XSplit bruger kvalitetsbaseret rate control, hvor en bestemt kvalitet af den encodede video er målet, mens en øvre bitrategrænse (vbv-maxrate) stadig overholdes. Der er en enorm forskel i den nødvendige bitrate mellem kvaliteterne (og den er IKKE lineær). De fleste ville ikke engang kunne se forskel mellem CRF=18 og CRF=0, bortset fra at en CRF=0-optagelse fylder temmelig meget på harddisken.

I XSplit bruger vi en generel kvalitetsindstilling til streaming fra 0 til 10, hvor 10 er højest. Kvalitet 10 svarer til CRF=25, som generelt giver en meget god kvalitet. Kvalitet 0 svarer til CRF=35, hvilket kan være acceptabelt i nogle tilfælde, men ikke ligefrem smukt.

Selvom det kan diskuteres, er det alligevel XSplits praksis at bruge sin egen kvalitetsparameter og oversætte den internt til CRF. Vi mener, at folk forstår kvalitet og er vant til en skala fra 0 til 10, hvor det sidste er højest. Men alt dette kan nemt tilpasses af dem, der vil gå den vej.

Ved lokal optagelse vil du bemærke, at XSplit kun lader dig indstille kvalitet og ikke har en bestemt vbv-maxrate eller vbv-buffer. Ideen er, at vi ved lokal optagelse ofte ikke bekymrer os om båndbreddeforbruget. En optagelse, der sigter mod en bestemt kvalitet, bliver derfor oprettet, og optagelsesstørrelsen for samme input varierer efter den valgte kvalitet, hvilket virker logisk.

I komplekse scener (frames) bruges flere bits for at sikre en ensartet visuel kvalitet, og i mindre komplekse scener bruges færre. x264-encoderen forsøger at fortolke betydningen af ændringer i en frame og optimere den visuelle kvalitet ud fra indstillingerne (CRF, også kaldet kvalitetsindstillingen). Grundlaget for kvalitet er 25 frames pr. sekund. x264 skalerer kvaliteten efter videoens billedhastighed, så en bestemt kvalitetsindstilling giver lavere kvalitet pr. frame ved en stream på 60 FPS end ved 25 FPS. Begrundelsen er enkel: En enkelt frame ved 25 FPS er vigtigere end en enkelt frame ved 60 FPS, når det overordnede mål er den samme visuelle kvalitet for både en stream på 25 og 60 FPS.

Ved lokal optagelse kan det stadig være ønskeligt at kontrollere den maksimale båndbredde, så XSplits brugerflade lader stadig brugeren indstille vbv-maxrate og vbv-buffer. Det vender vi tilbage til om lidt.


VBV-buffer og VBV-maxrate

De to primære mekanismer til kontrol af datarate, som x264-encoderen bruger, er

- Gennemsnitlig bitrate-tilstand- Gennemsnitlig kvalitetstilstand

I XSplits brugerflade tillader vi kun gennemsnitlig kvalitetstilstand som beskrevet ovenfor, fordi det ofte er en langt mere effektiv mekanisme.

For begge primære metoder bruges dog ofte en supplerende rate control, og for vellykket livestreaming med XSplit er den endda påkrævet: VBV rate control. Med kvalitetsbaseret encoding sikres en bestemt kvalitet, men ikke et bestemt båndbreddeforbrug. Ved livestreaming er det vigtigt ikke at overskride din egen tilgængelige uploadbåndbredde, men også seernes downloadhastighed.

Streaming med konstant båndbredde er en mulighed, nogle encodere bruger, men denne rate control-mekanisme (eller mangel på samme) spilder båndbredde og stiller ofte større krav til forbindelseskvaliteten for både afsender og seere.

XSplit bruger i stedet kvalitetsbaseret encoding og indstiller en VBV-maxrate og VBV-buffer. Det betyder grundlæggende, at x264-encoderen i XSplit forsøger at bevare en konstant kvalitet i streamen og kan bruge mindre båndbredde i mindre komplekse eller mindre vigtige scener. VBV-maxrate sætter et loft for den båndbredde, encoderen kan bruge, i forhold til VBV-bufferen.

Hvis du indstiller VBV-maxrate=2000 og VBV-buffer=4000, betyder det, at din VBV-buffer (decodebuffer) fyldes med højst 2000 Kbps. Din videobitrate kan derfor stadig overskride den enkelte værdi 2000 Kbps, MEN du overskrider ikke 4000 Kbit over 2 sekunder. Med andre ord er VBV-maxrate faktisk ikke den højeste bitrate, der kan være i streamen, men blot den maksimale bitrate, der kan komme ind i bufferen.

Hvis du forstår dette, forstår du også fleksibiliteten, vbv-bufferen giver. Den lader grundlæggende encoderen se frem på en række frames og vælge at bruge flere bits til at encode nogle frames i en sekvens og færre på andre, så længe vbv-bufferen ikke overskrides.

Men du skal nu forstå, at vbv-bufferen faktisk er en buffer på decodesiden og derfor afhænger af decoderen, som i vores tilfælde oftest er Flash Player. Flash Player kan konfigureres med en buffer fra 0 sekunder til, hmm, hvad som helst, tror jeg, men de fleste streamingudbydere fastlåser bufferindstillingerne til enten 1 eller 2 sekunder. Derfor ser du normalt, at XSplits streamingplugins automatisk justerer vbv-buffer til X eller 2 * X kilobit, når vbv-maxrate er X kilobit pr. sekund (Kbps). Jeg håber, det begynder at give mening! Hvis din udbyders Flash Player-buffer altså var indstillet til eksempelvis 10 sekunder, ville du virkelig kunne øge størrelsen på min vbv-buffer og få samme kvalitet med lavere samlet båndbredde eller bedre kvalitet ved samme båndbredde. Du ville i det væsentlige give encoderen mere frihed til at øge bitraten, når det er nødvendigt. Så du kan forvente, at XSplit-teamet taler med vores partnere for at se, om vi kan få dem til at justere deres Flash Player-buffer, så den svarer til VBV-bufferen i XSplit.

Som en sidste bemærkning vil jeg vende tilbage til lokal optagelse. Her er der ingen standardmaksimal bitrate, vbv-maxrate, for en optagelse, og derfor heller ingen vbv-buffer. Hvis du vil lægge den optagede video på dit website og lade besøgende afspille videoen med Flash Player over internettet, bør du dog tænke dig om. Hvis du forventer, at slutbrugerne højst har 1000 Kbps downloadbåndbredde, og du vil have, at videoen begynder at afspille efter for eksempel 4 sekunder, skal du tilføje de relevante VBV-begrænsninger ud over den kvalitet, du har tildelt den lokale optagelse.

I eksemplet ovenfor ville vi bruge følgende XSplit-indstillinger:

VBV Max Rate:1000 kbpsVBV Buffer:4000 kbps

Vi bør nok også kompensere for lyden, men træk i dette tilfælde blot 1 x lydens bitrate fra din VBV Max Rate og 4 x lydens bitrate fra din VBV Buffer, så er du klar.


Encoder-preset

Der findes flere indbyggede presets fra “Ultrafast” til “Placebo”. XSplit bruger et tilpasset preset kaldet “XSplit Default”. I fremtiden kan du forvente, at standarden bliver “Veryfast”.

Men hvad betyder alt dette?

H.264 angiver et sæt komprimeringsfunktioner, som en decoder skal kunne understøtte eller decode. De opdeles i profilgrupper efter decodernes muligheder: High Profile, Medium Profile og Base Line Profile. For øjeblikket ser vi kun på High Profile, som Flash Player understøtter.

Med et bestemt preset bruger x264-encoderen flere avancerede presetfunktioner til bedre komprimering af videobitstrømmen. Alt langsommere end “Superfast” giver en bitstrøm kompatibel med High Profile, medmindre andre tilpassede begrænsninger tilføjes, men det ser vi bort fra lige nu. Du skal blot vide, at jo langsommere preset du vælger, desto mere komprimeres streamen, og desto bedre kvalitet kan du skabe med begrænset båndbredde. MEN det kræver betydelig CPU-kraft, afhængigt af både billedhastighed og opløsning.

Standardpresetet er enten “XSplit Default” eller “Veryfast”, som er mere eller mindre ens. Hvis ingen andre CPU-krævende processer kører samtidig, og du vil streame eller encode 30 FPS ved 1280 x 720 med “Veryfast”, burde en i5-processor være tilstrækkelig. Hvis CPU-forbruget kommer over 70 % på en kerne, skal du:

a) Bruge lavere opløsningb) Bruge et hurtigere preset (som superfast)c) Købe en god Core i7-maskine

For at gøre en lang historie kort svarer dit valgte preset til den mængde komprimering, du beder encoderen udføre. Langsommere = mere komprimering = højere CPU-forbrug.

For at uddybe det, du burde have lært ovenfor, vil vi give svaret på det eneste spørgsmål, der nu må være i dit hoved -:):


Spørgsmål: Hvis jeg laver en lokal optagelse med kvalitet sat til 8, og hvis jeg IKKE indstiller nogen VBV-begrænsninger, får jeg så en video i bedre kvalitet, hvis jeg vælger et langsommere preset?

Svar: NEJ, DET GØR DU IKKE. Kvaliteten vil være præcis den samme, men jo hurtigere dit preset er, desto mindre komprimeres din optagede video (større filstørrelse). MEN hvis du har tilstrækkeligt restriktive VBV-maxrate-begrænsninger, vil du se en kvalitetsforskel, fordi det langsommere preset bedre holder dig under din angivne VBV-maxrate.

Kommentarer


bottom of page