Često se vodi polemika o tome kako je najbolje podesiti plejer kako bi se dobila najkvalitetnija slika. Tom prilikom se često preporučuju razni dekoderi kao i njihova različita podešavanja. E, mene je zanimalo da li postoji razlika u kvalitetu slike kod tri najpoznatija softverska video dekodera:
kao i Nvidia VP2 hardverski dekoder kroz LAV Video i CoreAVC, CUDA mod.
Kako sam testirao dekodere
Priprema
Test klip je u YV12 formatu. Moj zadatak je bio da se pobrinem da dekoderi samo dekodiraju taj klip, bez bilo kakve interne konverzije u neki drugi format (RGB) jer će to da odradi render, kao što to obično i radi.
Drugi problem se odnosio na izbor načina poređenja video strimova. Pošto je uslov bio da se porede svi frejmovi video strima morao sam da sačuvam ceo dekodiran video strim. Izbor je pao na Lagarith, lossless video kodek koji snima i u YV12 mod.
Metoda poređenja strimova
Odabrao sam dve metode za poređenje video strimova: Compare funkcija u Avisynth-u koja računa PSNR i izračunavanje MD5 haša dekodiranog video strima uz pomoć programa FFMpeg. Compare poredi sličnost između dva video klipa dok MD5 poredi same bitove dekodiranog strima.
Ovo je ujedno bila i prilika da testiram da li Lagarith VFW dekoder kao i Lagarith dekoder u FFMPEG-u uvek daju identičan output. Kompresovao sam video koristeći VirtualDub i Lagarith. Zatim sam kopirao taj isti video koristeći Windowsov Copy – Paste i dobio kopiju istog fajla.
Za funkciju Compare sam koristio sam Avisynth skriptu sledeće sadržine:
l = AviSource("fajl1.avi")
f = AvISource("fajl2.avi")
Compare(l, f, "", "compare.log")
Naravno, fajl1 i fajl2 sam zamenio odgovarajućim imenima fajlova.
Za izračunavanje MD5 uz pomoć FFMpeg koristio sam sledeću komandnu liniju:
ffmpeg.exe -I fajl.avi -f md5 fajl.log
I jedan i drugi metod su potvrdili da se radi o istom fajlu te sam mogao da nastavim sa testom.
Kreiranje video srtimova sa različitim dekoderima
Da bih osigurao korišćenje izabranog dekodera koristio sam program GraphStudioNext da kreiram graf fajl (grf) i i da, koristeći Avisynth kao frejmserver, učitam fajl u VirtualDub.
Skripta je, inače, vrlo jednostavna:
DirectShowSource("graffajl.grf", audio=false)
U VirtualDub-u sam koristio Fast Processing mod za video kako VD ne bi radio nikakve interne konverzije svetla i boje. U podešavanjima Lagarith VFW kodeka sam odabrao YV12 za output i čekirao opciju "Prevent Upsampling When Decoding" da prilikom dekodiranja video fajlova u Avisynth-u Lagarith ne radi internu YV12 to RGB konverziju. Kreiranje video fajlova za testiranje je moglo da počne.
Rezultati
Nakon kreiranja video fajlova iz pomoć različitih dekodera započeo sam poređenje istih.
U prvom slučaju kod izračunavanja PSNR vrednosti kao referentni video koristio sam video dobijen LAV Video dekoderom u softveskom modu i poredio ga sa ostalim video strimovima, pa i sa njegovom kopijom. Svi testovi su dali istu PSNR vrednost i pokazuju da nema nikakvih odstupanja.
Minimum Average Maximum
Mean Absolute Deviation: 0.0000 0.0000 0.0000
Mean Deviation: +0.0000 +0.0000 +0.0000
PSNR: 103.2938 103.2938 103.2938
Overall PSNR: 103.2938
U drugom slučaju uz pomoć FFMPEG računao sam MD5 dekodiranih video strimova. Svi strimovi su dali idenitčan MD5: 525c831558681d67e9b421e56987916d.
Konačan zaključak je – ne postoji razlika u kvalitetu slike između ova tri video dekodera, kao ni između hardveskog i softverskih dekodera, što je u saglasnosti sa teorijom da svi dekoderi moraju dati identičan output.
Prilog: Dobijeni logovi