Kaip nustatyti x264 encoder nustatymus

Kodėl x264 nustatymai iš tikrųjų svarbūs

Kai pirmą kartą atidariau x264 enkoderio nustatymus, pajutau tikrą šoką – tiek daug parametrų, keistų terminų ir pasirinkimų! Bet štai ko nesupratau iš karto: šie nustatymai yra kaip automobilio greičių dėžė. Galite važiuoti tik pirma pavara, bet tikrai nepasieksite maksimalaus efektyvumo. x264 yra vienas populiariausių H.264/AVC vaizdo enkoderio įgyvendinimų, kuris leidžia suspausti vaizdo failus išlaikant puikią kokybę. Problema ta, kad numatytieji nustatymai retai būna optimalūs konkrečiai jūsų situacijai.

Šis enkoderis naudojamas visur – nuo YouTube vaizdo įrašų iki profesionalių filmų gamybos. Todėl verta suprasti, kaip jį tinkamai sukonfigūruoti. Nesvarbu, ar koduojate asmeninį vaizdo archyvą, ar ruošiate turinį internetui – teisingi nustatymai gali sutaupyti valandų valandas laiko ir gigabaitus vietos.

Preset sistema – jūsų atspirties taškas

Pirmiausia turėtumėte suprasti preset sistemą. Tai kaip pasirinkti receptą prieš pradedant gaminti – duoda gerą pagrindą, kurį vėliau galite pritaikyti. x264 siūlo devynis pagrindinius preset’us: ultrafast, superfast, veryfast, faster, fast, medium, slow, slower ir veryslow. Dar yra placebo, bet atvirai kalbant, jo naudoti neverta – skirtumas nuo veryslow yra mikroskopinis, o kodavimo laikas išauga astronomiškai.

Kiekvienas preset’as iš esmės nustato, kiek laiko enkoderis skiria ieškoti geriausio būdo suspausti kiekvieną vaizdo kadrą. Medium yra numatytasis variantas ir puikus pasirinkimas daugumai situacijų. Jei koduojate archyvui ar galutiniam platinimui, rekomenduočiau slow arba slower – kokybės skirtumas tikrai pastebimas, ypač žemesniais bitrate’ais.

Asmeniškai dažniausiai naudoju slow preset’ą. Taip, kodavimas trunka ilgiau, bet kai koduoji filmą, kurį žmonės žiūrės daug kartų, verta investuoti papildomą laiką. Jei koduojate tiesioginę transliaciją ar reikia greitų rezultatų, veryfast ar faster bus jūsų draugai.

CRF ir bitrate – kokybės valdymo širdis

Dabar pereikime prie vieno svarbiausių sprendimų: kaip kontroliuoti kokybę? Turite du pagrindinius metodus – CRF (Constant Rate Factor) ir tiesioginis bitrate’o nustatymas. CRF yra protingesnis būdas daugumai atvejų.

CRF veikia skalėje nuo 0 iki 51, kur 0 yra beveik be nuostolių kokybė (ir milžiniški failai), o 51 – siaubinga kokybė. Auksinė viduriukas yra tarp 18 ir 23. Asmeniškai dažniausiai naudoju:

  • CRF 18 – labai aukšta kokybė archyvams ar šaltinio failams
  • CRF 20-21 – puiki kokybė kasdieniniam naudojimui
  • CRF 23 – gera kokybė, mažesni failai
  • CRF 26-28 – priimtina kokybė mobiliam peržiūrai ar ribotam pralaidumui

Kodėl CRF geresnis už fiksuotą bitrate’ą? Nes skirtingi kadrai reikalauja skirtingo duomenų kiekio. Ramios scenos su mėlynu dangumi gali būti puikiai suspaustos su mažu bitrate’u, o intensyvios veikimo scenos su daug detalių reikalauja daugiau duomenų. CRF automatiškai prisitaiko, skirdamas daugiau bitų sudėtingiems kadrams ir mažiau – paprastiems.

Tačiau yra situacijų, kai reikia fiksuoto bitrate’o – pavyzdžiui, kai koduojate DVD ar Blu-ray diskui su griežtais dydžio apribojimais. Tokiu atveju naudokite dviejų praėjimų (2-pass) kodavimą, kuris pirmą kartą analizuoja visą vaizdo įrašą, o antrą – koduoja optimaliai paskirstydamas bitus.

Tune parametrai specifinėms situacijoms

Tune parametrai yra kaip specialūs priedai prie jūsų pagrindinio preset’o. Jie optimizuoja enkoderio elgesį konkrečiam turinio tipui. Štai patys naudingesnieji:

Film – skirtas įprastam filmų turiniui. Tai numatytasis variantas ir tinka daugumai situacijų. Jei nežinote, ką pasirinkti, tiesiog nesinaudokite jokiu tune parametru.

Animation – puikiai tinka animacijai, anime, animaciniams filmams. Animacija turi kitokias charakteristikas nei tikras vaizdas – dažnai yra aštrių kraštų, plokščių spalvų sričių ir mažiau natūralaus triukšmo. Šis tune’as tai atsižvelgia ir gali sutaupyti nemažai vietos išlaikant kokybę.

Grain – kai jūsų šaltinis turi daug filminio grūdo ar triukšmo, ir norite jį išsaugoti. Įspėju – failai bus didesni, nes grūdas yra sunkiai suspaudžiamas. Bet jei tai svarbi vaizdo dalis (pavyzdžiui, senesni filmai), šis parametras padės išvengti nemalonių artefaktų.

Stillimage – ekrano įrašams ar slideshow, kur kadrai keičiasi retai arba visai nesikeičia. Optimizuoja kodavimą tokiam turiniui.

Fastdecode – sumažina kodavimo sudėtingumą, kad vaizdo įrašas būtų lengviau atkuriamas silpnesnėse sistemose. Naudokite, jei žinote, kad turinys bus žiūrimas senuose įrenginiuose.

Praktiškai aš naudoju animation tune’ą bet kokiam animuotam turiniui – skirtumas tikrai pastebimas. O film tune’ą (arba jokio) viskam kitam.

Profile ir level – suderinamumo garantai

Čia tampa šiek tiek techniškai, bet svarbu suprasti. H.264 standartas turi skirtingus profilius ir lygius, kurie nustato, kokias funkcijas galima naudoti. Pagrindiniai profiliai:

Baseline – seniausias ir paprasčiausias. Veikia visur, bet neefektyvus. Šiandien retai naudojamas, nebent koduojate labai seniems įrenginiams.

Main – vidutinis variantas. Geras balansas tarp suderinamumo ir efektyvumo.

High – modernus standartas, kurį palaiko beveik visi šiuolaikiniai įrenginiai (nuo ~2010 metų). Leidžia naudoti visas efektyviausias x264 funkcijas. Tai turėtų būti jūsų numatytasis pasirinkimas.

Level nustato maksimalų bitrate’ą, raišką ir kitus techninius parametrus. Pavyzdžiui:

  • Level 3.0 – iki 720p 30fps
  • Level 3.1 – iki 1080p 30fps
  • Level 4.0 – iki 1080p 60fps
  • Level 4.1 – iki 1080p 60fps su didesniu bitrate’u
  • Level 5.0 – iki 4K 30fps
  • Level 5.1 – iki 4K 60fps

Dažniausiai x264 automatiškai pasirenka tinkamą level’į pagal jūsų vaizdo parametrus, todėl rankiniu būdu nustatyti nereikia. Tačiau jei koduojate konkrečiam įrenginiui (pvz., PlayStation, Apple TV), patikrinkite jo specifikacijas ir nustatykite atitinkamą profilį bei level’į.

Pažangūs parametrai, kurie tikrai veikia

Dabar pereikime prie parametrų, kurie gali reikšmingai paveikti kokybę ir dydį, bet nėra akivaizdūs pradedantiesiems.

Reference frames (ref) – kiek ankstesnių kadrų enkoderis gali naudoti kaip nuorodą. Daugiau reference frames = geresnė kompresija, bet lėtesnis dekodavimas. Numatytai medium preset’as naudoja 3, slow – 5. Galite pakelti iki 8-16 archyviniams kodavimams, bet atsiminkite, kad kai kurie įrenginiai (ypač mobilieji) gali turėti problemų su >4 reference frames.

B-frames (bframes) – dvikrypčiai kadrai, kurie gali naudoti informaciją iš praeities IR ateities kadrų. Labai efektyvūs kompresijai. x264 numatytai naudoja 3, bet galite pakelti iki 8-16. Praktiškai >8 retai duoda daug naudos.

Deblock filter – filtras, kuris sumažina blokinius artefaktus. Numatytai įjungtas su reikšmėmis 0:0, ir dažniausiai taip ir turėtų likti. Kai kas mėgsta šiek tiek sumažinti (pvz., -1:-1) animacijai, bet būkite atsargūs – per daug sumažinus gali atsirasti nemalonių artefaktų.

Motion estimation (me) – kaip enkoderis ieško judėjimo tarp kadrų. Variantai: dia (greičiausias), hex, umh, esa (lėčiausias, bet tiksliausias). Preset’ai jau nustato protingas reikšmes, bet jei norite išspausti maksimalią kokybę, slow preset’e pakeiskite į umh arba net esa.

Subpixel refinement (subme) – judėjimo įvertinimo tikslumas. Skalė nuo 1 iki 11. Aukštesnės reikšmės = geresnė kokybė, bet lėtesnis kodavimas. Slow preset’as naudoja 8, veryslow – 10. Asmeniškai retai keičiu šį parametrą – preset’ai jau nustato gerai.

Praktiniai komandų pavyzdžiai realiems scenarijams

Teorija teorija, bet kaip tai atrodo praktikoje? Štai keletas komandų, kurias pats dažnai naudoju:

Universalus aukštos kokybės kodavimas:

x264 --preset slow --crf 20 --profile high --input input.y4m --output output.h264

Animacijos kodavimas:

x264 --preset slow --tune animation --crf 19 --profile high --input anime.y4m --output anime.h264

Greitas kodavimas, priimtina kokybė:

x264 --preset veryfast --crf 23 --profile high --input input.y4m --output output.h264

Maksimali kokybė archyvui (lėtas!):

x264 --preset veryslow --crf 18 --ref 8 --bframes 8 --me umh --profile high --input input.y4m --output output.h264

Dviejų praėjimų kodavimas su tiksliniu bitrate’u:

x264 --preset slow --pass 1 --bitrate 5000 --stats stats.log --profile high --input input.y4m --output /dev/null
x264 --preset slow --pass 2 --bitrate 5000 --stats stats.log --profile high --input input.y4m --output output.h264

Ekrano įrašas su tekstu:

x264 --preset medium --tune stillimage --crf 22 --profile high --input screen.y4m --output screen.h264

Pastaba: šie pavyzdžiai naudoja .y4m įvestį, nes x264 tiesiogiai dirba su nesupaustais vaizdo formatais. Praktikoje dažniausiai naudosite x264 per FFmpeg ar kitą įrankį, kuris konvertuoja įvestį automatiškai.

Dažniausios klaidos ir kaip jų išvengti

Per metus eksperimentavimo su x264 padariau nemažai klaidų. Štai ko turėtumėte vengti:

Klaida #1: Naudoti per žemą CRF archyviniams įrašams. Kartą koduojau visą savo šeimos vaizdo archyvą su CRF 25, manydamas, kad sutaupysiu vietos. Vėliau, peržiūrėdamas dideliame ekrane, pastebėjau artefaktus, kurių nebepašalinsi. Dabar archyvams naudoju CRF 18-20.

Klaida #2: Manyti, kad ultrafast sutaupys daug laiko. Taip, kodavimas greitas, bet failai būna 2-3 kartus didesni nei su medium preset’u. Jei vis tiek reikia vaizdo įrašą įkelti į internetą, sutaupytas kodavimo laikas prarandamas laukiant, kol įkels didžiulį failą.

Klaida #3: Ignoruoti šaltinio kokybę. Jei jūsų šaltinis jau yra prastos kokybės ar stipriai suspaustas, naudoti CRF 18 ir veryslow preset’ą neturi prasmės. Geriau naudokite CRF 21-23 – vis tiek negausite geresnės kokybės, o failas bus mažesnis.

Klaida #4: Naudoti per daug pažangių parametrų nesuprantant. Kartą radau internete „optimalius nustatymus” su daugybe egzotiškų parametrų. Rezultatas? Kodavimas truko amžinybę, o kokybė buvo vos vos geresnė nei su paprastu slow preset’u.

Klaida #5: Nepatikrinti suderinamumo. Jei koduojate vaizdo įrašą, kurį žiūrės kiti žmonės senuose įrenginiuose, nesinaudokite High 5.1 profiliu su 16 reference frames. Jie tiesiog negalės jo atkurti. Main profile su Level 4.0 yra saugesnis pasirinkimas.

Kai viskas susidėlioja į vietą

x264 nustatymai iš pradžių atrodo kaip beprotiškas parametrų chaosas, bet iš tikrųjų viskas sukasi apie keletą pagrindinių sprendimų: kokios kokybės norite (CRF), kiek laiko turite (preset), kokio tipo turinį koduojate (tune), ir kam skirtas rezultatas (profile/level).

Mano asmeninė rekomendacija pradedantiesiems: pradėkite nuo --preset slow --crf 20 ir eksperimentuokite iš ten. Jei failai per dideli, padidinkite CRF iki 22-23. Jei kokybė nepakankama, sumažinkite iki 18-19. Jei kodavimas per lėtas, pakeiskite į medium ar fast preset’ą. Koduojate animaciją? Pridėkite --tune animation. Štai ir viskas.

Neužsiciklinkit ant tobulų nustatymų. Skirtumas tarp „labai gerų” ir „idealių” nustatymų dažnai yra vos pastebimas, bet gali kainuoti dvigubai daugiau laiko. Geriau sukoduoti su gerais nustatymais ir žiūrėti turinį, nei praleisti valandas optimizuojant parametrus, kurių skirtumą pamatysite tik lyginant kadrus vienas šalia kito.

Ir paskutinis patarimas: visada išsaugokite originalą. Vaizdo kodavimas yra nuostolinga operacija – kartą sukoduota negalima „atkoduoti” atgal į originalią kokybę. Jei vėliau pasirodys geresni enkodavimo metodai ar suprasite, kad reikia kitokių nustatymų, turėsite iš ko koduoti iš naujo.

Поделиться: XFacebookPinterestLinkedin