{"id":501,"date":"2020-07-17T07:53:50","date_gmt":"2020-07-17T05:53:50","guid":{"rendered":"http:\/\/flexray.pl\/?p=501"},"modified":"2020-07-17T08:08:12","modified_gmt":"2020-07-17T06:08:12","slug":"jakosc-video-po-kompresji-czyli-psnr-i-ssim","status":"publish","type":"post","link":"http:\/\/flexray.pl\/jakosc-video-po-kompresji-czyli-psnr-i-ssim\/","title":{"rendered":"Jako\u015b\u0107 video po kompresji czyli PSNR i SSIM"},"content":{"rendered":"\n
Du\u017co pracuj\u0119 z video i zawsze na pierwszym miejscu jest u mnie jako\u015b\u0107 materia\u0142u. Najch\u0119tniej pracowa\u0142bym na kompresji bezstratnej (lossless), ale filmy w 4K zajmuj\u0105 bardzo du\u017co miejsca, a i obr\u00f3bka przy olbrzymich plikach jest bardziej uci\u0105\u017cliwa… Istniej\u0105 mimo to kompromisy na kt\u00f3re mo\u017cna si\u0119 zgodzi\u0107, czyli kompresja stratna (lossy). Sprawd\u017amy kilka popularnych kodek\u00f3w i jako\u015b\u0107 video.<\/p>\n\n\n\n\n\n\n\n
Nie jestem profesjonalnym operatorem kamery, wi\u0119kszo\u015b\u0107 rejestruj\u0119 telefonem, st\u0105d kodeki kt\u00f3rych u\u017cywam to w wi\u0119kszo\u015bci x264, x265 oraz czasem mpeg4. Staram si\u0119 zawsze nagrywa\u0107 w maksymalnej rozdzielczo\u015bci jak\u0105 daje telefon i maksymalnym FPS (klatki na sekund\u0119) – co zwykle daje 4K w 60fps. Jest to przede wszystkim p\u0142ynno\u015b\u0107 video, ale tak\u017ce pole do dodatkowej stabilizacji obrazu przy u\u017cyciu oprogramowania, kt\u00f3re odpowiednio kadruj\u0105c i zniekszta\u0142caj\u0105c obraz daje poczucie stabilnego uj\u0119cia kosztem zmniejszenia rozdzielczo\u015bci materia\u0142u – to jest dla mnie zupe\u0142nie akceptowalne. Nagrywanie z „r\u0119ki” telefonem potrafi nie\u017ale drga\u0107.<\/p>\n\n\n\n
O ile do obr\u00f3bki video wykorzystuj\u0119 Davinci Resolve oraz Adobe Premiere Essentials, to pliki wynikowe staram si\u0119 renderowa\u0107 z maksymalnym bitrate aby nie traci\u0107 na jako\u015bci. Ostateczn\u0105 kompresj\u0119 robi\u0119 przez ffmpeg i na nim si\u0119 skupi\u0119 w tym wpisie. U\u017cywam wersji ffmpeg-20200523-26b4509<\/a><\/p>\n\n\n\n Kodeki kt\u00f3re por\u00f3wnam to x264, x265, VP9 oraz AV1. O ile trzy pierwsze s\u0105 bardzo popularne, to AV1 dopiero zaczyna podb\u00f3j rynku. Jest to nowe podej\u015bcie i nowe algorytmy, kt\u00f3re na mniejszym bitrate potrafi\u0105 uzyska\u0107 lepsz\u0105 jako\u015b\u0107 ni\u017c poprzednicy, co w rezultacie daje mniejsze pliki przy tej samej jako\u015bci. Olbrzymim minusem AV1 jest czas kompresji – oko\u0142o 500-700x d\u0142u\u017cszy ni\u017c x264… Ale \u015bwiat idzie do przodu, algorytm jest optymalizowany i lada moment trafi jako nowy firmware do naszych telewizor\u00f3w i wszystko b\u0119dzie gra\u0142o.<\/p>\n\n\n\n Kompresja stratna to taka, w kt\u00f3rej chc\u0105c zredukowa\u0107 wielko\u015b\u0107 pliku, godzimy si\u0119 na utrat\u0119 jako\u015bci – np. szczeg\u00f3\u0142\u00f3w, odwzorowania kolor\u00f3w czy p\u0142ynno\u015bci ruchu. Nowoczesne kodeki pozwalaj\u0105 na p\u0142ynne strojenie tych parametr\u00f3w, oraz wykorzystuj\u0105 algorytmy dostosowane do odbiorcy czyli ludzkiego oka – kt\u00f3re nie zawsze jest w stanie wychwyci\u0107 te ma\u0142e r\u00f3\u017cnice, a dzi\u0119ki temu plik jest znacznie mniejszy.<\/p>\n\n\n\n Kompresja bezstratna charakteryzuje si\u0119 przenoszeniem obrazu 1:1 wzgl\u0119dem \u017ar\u00f3d\u0142a, zatem plik wyj\u015bciowy jest dok\u0142adnym odwzorowaniem pliku wej\u015bciowego, ale zwykle bardzo du\u017cym. Takie pliki s\u0105 bardzo dobrym jako\u015bciowo materia\u0142em do monta\u017cu i obr\u00f3bki, ale nie nadaj\u0105 si\u0119 do publikowania w Internecie, ze wzgl\u0119du na sw\u00f3j rozmiar.<\/p>\n\n\n\n PSNR i SSIM to dwa popularne „mierniki” jako\u015bci wzgl\u0119dem materia\u0142u \u017ar\u00f3d\u0142owego. Aby sprawdzi\u0107 jako\u015b\u0107 kompresji u\u017cywaj\u0105c wybranego kodeka i bitrate, musimy plik wynikowy por\u00f3wna\u0107 z plikiem \u017ar\u00f3d\u0142owym. Dwa identyczne pliki powinny mie\u0107 SSIM r\u00f3wny 1.0 oraz PSNR d\u0105\u017c\u0105cy do niesko\u0144czono\u015bci (infinite). Taki wynik daj\u0105 kodeki w kt\u00f3rych wykorzystamy kompresj\u0119 bezstratn\u0105 (lossless)<\/p>\n\n\n Wykorzystuj\u0105c kompresj\u0119 stratn\u0105, zgadzamy si\u0119 na utrat\u0119 pewnych szczeg\u00f3\u0142\u00f3w obrazu, ale uzyskujemy mniejszy plik wynikowy.<\/p>\n\n\nCzym jest kompresja stratna i bezstratna?<\/h3>\n\n\n\n
Po co mi PSNR i SSIM?<\/h3>\n\n\n\n
\nSSIM Y:1.000000 (inf) U:1.000000 (inf) V:1.000000 (inf) All:1.000000 (inf)\nPSNR y:inf u:inf v:inf average:inf min:inf max:inf\n<\/pre>\n\n\n
\nSSIM Y:0.998753 (29.042157) U:0.999491 (32.934697) V:0.999728 (35.656912) All:0.999039 (30.171505)\nPSNR y:56.750038 u:62.900075 v:65.809073 average:58.129866 min:56.936481 max:inf\n<\/pre>\n\n\n