동영상 포맷의 사실상 표준이 H.264에서 HEVC로 이동하려 하지만, 한편으론 여전히 더 대중적인 쪽은 H.264이다.
온라인 방송용 앱이나 동영상 인코더들은 이 포맷들로 영상을 인코딩하는데, 어떤 것이 최선인지 궁금해졌다.
손쉽게(?) 구할 수 있는 S/W 기반 인코더인 x264/x265와 인텔 quicksync(이하 qsv), nvidia의 nvenc를 활용하여 다양한 조건에서 영상을 인코딩해보고 성능을 비교해보고 싶어졌다.
Durian Project로 만들어진 단편 애니메이션 Sintel의 일부를 사용하여 테스트를 진행했다.
다섯 가지 해상도의 포맷으로 공개했는데, 이 중 BluRay 포맷 및 4K mov 의 두 가지 포맷을 사용했다.
테스트 영상의 일부를 ffmpeg으로 인코딩한 뒤 결과물에 대해 원본과의 Overall PSNR를 비교했다.
- H.264와 HEVC 모두에 대해 인코딩
- S/W 기반은 ffmpeg에 내장된 x264/x265를 적용
- H/W 기반은 nvidia의 nvenc 및 인텔 qsv를 적용
- 모두 1패스 고정 품질(Constant Rate Factor) 또는 이제 준하는 방식으로 인코딩
- preset은 medium 및 slow 두 가지에 대해 모두 수행
- 결과물의 Bit Rate 및 Overall PSNR을 비교
- Overall PSNR은 AviSynth+에 내장된 Compare() 필터를 사용해서 확인함
- 인코딩에 소요되는 시간도 측정
당연한 얘기지만, 각 인코더 별로 인코딩 옵션이 다르다.
nvenc H.264 인코더의 옵션을 확인하려면 다음과 같이 입력하면 된다.
ffmpeg -h encoder=h264_nvenc
또는, ffmpeg에서 사용할 수 있는 모든 H.264 인코더의 옵션은 이렇게 하면 확인할 수 있다.
ffmpeg -h encoder=h264
x264 및 x265는 고정 품질(Constant Rate Factor)을 글자 그대로 crf 옵션으로 지정할 수 있다.
ffmpeg -i input.avs -c:v libx264 -preset slow -crf 22 -an output_x264.mp4
도움말을 포함한 각종 자료들에는 x264/x265의 crf에 해당하는 옵션이 cq라고 되어있다.
ffmpeg -i input.avs -c:v h264_nvenc -preset slow -cq 22 -an output_nvenc.mp4
하지만, 막상 저 옵션으로 인코딩을 해보면 영상 결과에 1도 영향을 미치지 않는다.
뒤져보니 guru3D에 한 현자께서 적용 가능한 옵션을 상세하게 설명해두셨다.
더불어, H.264에는 -temporal-aq 1을, HEVC에는 -spatial_aq 1를 적용하라는 팁도 덧붙여두셨다.
이를 반영하면 아래와 같이[각주:1] 정리할 수 있다.
ffmpeg -i input.avs -c:v h264_nvenc -preset slow -rc constqp -global_quality 22 -temporal-aq 1 -rc-lookahead 32 -g 600 -an output_nvenc2.mp4
인텔의 qsv는 nvenc에 비해 훨씬 간결하며, x264/x265와 유사하게 옵션을 적용할 수 있다.
crf 대신 q를 사용하면 된다.
ffmpeg -i input.avs -c:v h264_qsv -preset slow -q 22 -an output_qsv.mp4
다른 인코딩 방식들에 비해서 인텔 qsv는 적용이 은근히 까다롭다.
동영상 인코딩에 qsv를 적용하려면 다음의 세 가지를 모두 해두어야 한다.
1. BIOS에서 내장 그래픽을 사용하는 것으로 설정
2. 최신 버전의 인텔 내장 그래픽 장치 드라이버 설치
3. 모니터를 내장 그래픽 장치에 연결
특히, 3번만 하지 않는 경우 장치가 장치관리자에 보여도 정작 qsv를 사용할 수 없는 황당한 상황이 발생하니 주의.
ffmpeg용 H.264/HEVC 인코더 품질/성능 비교 3/3 (0) | 2019.05.06 |
---|---|
ffmpeg용 H.264/HEVC 인코더 품질/성능 비교 2/3 (0) | 2019.05.04 |
ffmpeg을 이용한 HW 비디오 인코딩 테스트 결과 (2) | 2018.02.04 |
TIFF에 포함된 lossless JPEG 읽기 대장정 (1) | 2017.01.30 |
구글의 ZopfliPNG는 얼마나 파일 크기를 더 줄여주는가 (0) | 2017.01.05 |