Skip to content

Instantly share code, notes, and snippets.

@Mnkai
Last active February 4, 2019 09:04
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Mnkai/7a0e84707d1bac350d2a8f976b2be335 to your computer and use it in GitHub Desktop.
Save Mnkai/7a0e84707d1bac350d2a8f976b2be335 to your computer and use it in GitHub Desktop.
MVAF v1

MVAF (Minori Video Archiving Format) v1

목차

  • MVAF에 대하여
  • 레퍼런스 파라미터
  • 벤치마크
    • BanG Dream! 2nd Season! Ep01 (Abema)
      • VMAF
      • SSIM
      • PSNR
    • BanG Dream! 2nd Season! Ep01 (Aniplus)
      • VMAF
      • SSIM
      • PSNR
    • Kemono Friends 1기 Ep01 (Aniplus)
      • VMAF
      • SSIM
      • PSNR
    • 러브라이브 파이널 라이브 콘서트 (BD, Day 1-1, 00:05:00에서 00:15:00까지)
      • VMAF
      • SSIM
      • PSNR
  • 한계점
  • 결론

MVAF에 대하여

Minori Video Archiving Format (MVAF) 은 지나치게 높은 비트레이트로 이미 손실 압축되어 있는 애니메이션 영상을, 최대한 용량을 줄이면서 화질을 괜찮은 정도로 재압축하여 보관하는 목적으로 정의된 비디오 인코딩 프리셋이다.

MVAF v1은 비디오 압축 코덱으로 HEVC, 오디오 압축 코덱으로 AAC를 사용하며 QuickTime Player를 포함한 HEVC를 지원하는 대다수의 장치에서 네이티브로 재생할 수 있는 호환성을 가진다. 오디오 트랙과 자막 트랙은 여러개 (오디오 코멘터리 등) 존재할 수 있으며, 이 경우 오디오 트랙의 기본값은 일본어, 자막 트랙의 기본값은 한국어로 한다. 2채널을 초과하는 오디오 트랙은 2채널로 다운믹스 하거나, 이미 2채널 트랙이 존재하는 경우 포함하지 않는다.

레퍼런스 파라미터

비디오는 libx265, 오디오는 Apple AAC encoder를 사용하여 다음과 같은 파라미터를 사용한다. (ffmpeg)

-c:v libx265 -tag:v hvc1 -crf 22 -tune animation -preset medium -x265-params "aq-mode=3:ref=6:psy-rd=1.50:aq-strength=0.6:nr-intra=200:nr-inter=200" -c:a aac_at -b:a 128k -ac 2 -sample_fmt s16 -ar 44100

벤치마크

이 벤치마크들은 i5-8259U (8 threads), 16GB LPDDR3 RAM, x265 3.0, ffmpeg 4.1, libvmaf 1.3.11, MacOS 10.14.3 에서 수행되었다.

Video Multi-Method Assessment Fusion (VMAF) 와 Structural similarity (SSIM), Peak signal-to-noise ratio (PSNR)는 모두 1080p 소스에서 비교되었고, 프레임 서브샘플링은 10프레임, 기계 학습 모델은 VMAF 라이브러리에서 제공한 FHD 기본 모델로 평가되었다. (대략 몇미터 떨어진 큰 1080p FHD TV)

BanG Dream! 2nd Season! Ep01 (Abema)

원본 동영상은 Abema에서 방송한 h264 스트림으로, 4000kbps ABR로 인코딩 되어있다. 오디오 트랙을 포함한 원본 동영상의 크기는 746MB이다. MVAF v1 결과물은 평균 1446kbps으로 인코딩 되었으며, 오디오 트랙을 포함한 동영상의 크기는 280.6MB이다. (37.61%)

인텔 i5-8259U CPU에서 약 0.8배속으로 인코딩 되었다.

VMAF

계산된 VMAF 수치는 94.778940으로 아주 우수함을 알 수 있다.

SSIM

계산된 SSIM 수치는 0.998031로 아주 우수함을 알 수 있다.

PSNR

계산된 PSNR 수치는 47.570904dB로 아주 우수함을 알 수 있다.

BanG Dream! 2nd Season! Ep01 (Aniplus)

원본 동영상은 Aniplus VOD 서비스로 다운로드 가능한 h264 스트림으로, 8000kbps ABR로 인코딩 되어있다. 오디오 트랙을 포함한 원본 동영상의 크기는 1.48GB이다. MVAF v1 결과물은 평균 1477kbps로 인코딩 되었으며, 오디오 트랙을 포함한 동영상의 크기는 288.2MB이다. (19.47%)

인텔 i5-8259U CPU에서 약 0.8배속으로 인코딩 되었다.

VMAF

계산된 VMAF 수치는 95.403315으로 아주 우수함을 알 수 있다.

SSIM

계산된 SSIM 수치는 0.997706로 아주 우수함을 알 수 있다.

PSNR

계산된 PSNR 수치는 46.691573dB로 아주 우수함을 알 수 있다.

Kemono Friends 1기 Ep01 (Aniplus)

원본 동영상은 Aniplus VOD 서비스로 다운로드 가능한 h264 스트림으로, 4500kbps ABR로 인코딩 되어있다. 오디오 트랙을 포함한 원본 동영상의 크기는 808.1MB이다. MVAF v1 결과물은 평균 1081kbps로 인코딩 되었으며, 오디오 트랙을 포함한 동영상의 크기는 195MB이다. (24.13%)

인텔 i5-8259U CPU에서 약 0.8배속으로 인코딩 되었다.

VMAF

계산된 VMAF 수치는 94.426271으로 아주 우수함을 알 수 있다.

SSIM

계산된 SSIM 수치는 0.997614으로 아주 우수함을 알 수 있다.

PSNR

계산된 PSNR 수치는 47.690216dB로 결과가 우수함을 알 수 있다.

러브라이브 파이널 라이브 콘서트 (BD, Day 1-1, 00:05:00에서 00:15:00까지)

원본 동영상은 애니메이션이 아니며, 최악의 경우 (한계까지 압축된 소스 영상에 알맞지 않은 인코더 튜닝과 무작위 노이즈가 많은 어두운 환경에서 LED 조명과 많은 움직임이 있을시) 어느정도의 성능을 보이는지를 알아보기 위해 선택되었다.

원본 동영상은 14491kbps VBR로 인코딩 되어있다. 오디오 트랙을 포함한 원본 동영상의 크기는 1.09GB이다. MVAF v1 결과물은 평균 20310kbps로 인코딩 되었으며, 오디오 트랙을 포함한 동영상의 크기는 1.53GB이다. (140%)

인텔 i5-8259U CPU에서 약 0.6배속으로 인코딩 되었다.

VMAF

계산된 VMAF 수치는 99.024641으로 아주 우수함을 알 수 있다.

SSIM

계산된 SSIM 수치는 0.995835로 아주 우수함을 알 수 있다.

PSNR

계산된 PSNR 수치는 39.308499dB로 우수함을 알 수 있다.

한계점

네이티브 4k HDR로 제작된 애니메이션이 아직 거의 존재하지 않기 때문에, MVAF v1은 그러한 환경에서 테스트 되지 않았다. 만약 4k HDR 소스가 더 흔해질 경우 MVAF v1의 성능을 테스트 한 후, 추가적인 프리셋을 만드는게 필요할 수 있다.

HEVC 하드웨어 인코더 지원이 아직 완전하지 않기 때문에 CPU를 사용하므로 느린 인코딩 속도를 감수해야 한다.

실사 영상에서 용량이 오히려 증가하는 것으로 알 수 있듯이 추가적인 파라미터 튜닝을 통해 다소 화질을 희생해 더 작은 용량을 실현할 수 있을 가능성이 있으나, over-fitting의 가능성도 있다.

손실 압축 영상을 다시 압축하는 만큼, 어느정도의 화질 손실을 감수할 수 밖에 없다.

결론

MVAF v1 프리셋을 통해 보수적으로 손실 압축된 애니메이션을 약 30% 정도의 용량으로 괜찮은 품질로 아카이빙 할 수 있음을 알 수 있었고, 실사 영상의 경우엔 적합하지 않다는 점을 알 수 있었다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment