반응형

 

비디오의 품질을 측정하는 기준엔 PSNR, PSNR-HVS, PSNR-HVS-M, SSIM 등 많은 방식이 있다.

두 영상의 각각 픽셀의 표준편차를 통해 신호 대 잡음비를 계산하는 PSNR이나 구조적 유사성을 계산하는 SSIM 등이 많이 사용되지만, 사람이 눈으로 보는 결과와는 여전히 차이가 있다.

 

몇년 전에 넷플릭스에서 이러한 문제를 해결할 수 있는 VMAF라는 기준을 개발했다.

핵심 아이디어는 간단(?)하다[각주:1].

많은 사람들이 직접 비교한 이미지 품질의 평균을 기준으로 삼은 뒤 정량적 측정치에 가중치를 부여해 더해서 유사한 결과가 나오는 모델을 만든 것.

 

이게 말이야 쉽지 쉬운 일도 아니거니와 그 결과를 통해 최적의[각주:2] 인코딩을 수행한 결과를 전 세계의 사용자들에게 평가를 받게 되는 것이다.

 

이 방식이 발표된지 시간도 많이 지나서 이제는 ffmpeg 배포판에도 사실상 기본 필터로 기능이 포함되어 있다.

ffmpeg의 최신 빌드에서는 간단하게 다음 정도만 써도 결과가 나온다.

ffmpeg.exe -i "jureka1.mp4" -i "jureka2.mp4" -lavfi "libvmaf" -f null -

 

 

하지만, 측정 방식의 특성상 CPU 사용량이 많은데, 기본값은 싱글 스레드만 사용한다.

아래와 같이 최대 스레드의 개수를 지정하면 성능이 대폭 향상된다.

ffmpeg.exe -i "jureka1.mp4" -i "jureka2.mp4" -lavfi "libvmaf=n_threads=12" -f null -

 

결과는 아래와 같이 점수로 표시[각주:3]된다.

[Parsed_libvmaf_0 @ 000001e6b662fa00] VMAF score: 13.159400

 

99점이면 거의 무손실이라 봐도 무방한 것 같고, 넷플릭스의 글에 따르면 70점이면 good이나 fair 정도라 한다.

 

성능 향상을 위해 n_threads 외에도 n_subsample 옵션을 지정해서 프레임을 건너뛰며 속도를 향상시킬 수도 있다.

또, log_path를 지정해 각 프레임 단위의 결과를 저장할 수도 있고, psnr/ssim을 함께 계산할 수도 있다.

상세한 것은 ffmpeg 문서를 참고.

 

 

  1. 진짜로 이걸 간단하다고 믿으면 골룸 [본문으로]
  2. 최소의 용량으로 최대의 화질을 보여주는 비디오 파일 [본문으로]
  3. 아래의 점수는 13점대인데, 이 정도면 화질이 심각한 것... [본문으로]
반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band