FFMPEG - crf 옵션 별 화질 테스트
회사에서 FFMPEG로 인코딩할 일이 많다 보니 이번 기회에 실험 하려고 한다.
오늘은 FFMPEG로 인코딩하면서 -crf 옵션에 따른 화질 및 용량을 테스트 해보겠다.
- 환경 : 윈도우 11
- CPU : 11th Gen Intel(R) Core(TM) i5-1155G7 @ 2.50GHz 2.50 GHz
- RAM : 16.0GB
- GPU : Intel(R) Iris(R) Xe Graphics
- FFMPEG : ffmpeg version 2021-07-11-git-79ebdbb9b9-essentials_build-www.gyan.dev
- 하드웨어 가속은
-c:v h264_qsv사용 시 비트레이트가 너무 떨어져서 사용 안하고libx264사용
1
.\ffmpeg.exe -v error -stats -i "test.mp4" -threads 4 -c:v libx264 -crf 23 -preset medium -r 23.98 -g 48 -keyint_min 48 -profile:v baseline -level 3.0 -pix_fmt yuv420p -vf "scale=1920:1080[s]" -aspect 1.7778 -c:a aac -b:a 192k -ac 2 -ar 44100 -af "volume=1.0" testResult.mp4
인코딩 시 사용할 명령어.
옵션 설명

CRF 옵션
- CRF 스케일의 범위는 0-51
- 0은 무손실(8비트만 해당, 10비트는 -qp 0 사용)
- 23은 기본값
- 51은 가능한 최악의 품질
- 일반적으로 낮은 값이 더 높은 품질
- 적당한 범위는 17 ~ 28
- 17 ~ 18 이 시각적으로 무손실에 가까움
- 범위는
지수 함수적이므로CRF값을 +6 증가시키면 대략 비트 레이트가절반으로 줄어들고,-6이면두 배가 됨.
테스트할 영상 정보
1
.\ffprobe.exe .\test.mp4 -show_streams

- 해상도 : 1920x1080
- bitrate : 4975 kb/s
- codec : h264
- Duration: 31s
- 용량 : 18.5MB
영상 출처 : pixabay 저작권 없는 영상
테스트 조건
- 프리셋 변경 없이
crf값 만 조정 crf는18,23,28,324가지 비교- 해상도는
FHD,HD,SD3가지로 인코딩- scale=1920:1080[s], scale=1280:720[s], scale=854:480[s]
- ffmpeg 인코딩 시
-vf명령어에 넣을 것
- 나머지 세팅은 동일 (오디오, 필터 등)
- 총 결과는 12개
참고 : 윈도우 PowerShell 에서 특정 명령어의 시간을 측정하는 방법은
measure-command { 명령어 }이다.
테스트 진행
1. FHD (1920x1080)


원본 영상.

crf : 32 인 영상
일단 어설프게 18로 하면 안될 것 같다. 비트레이트가 원본 영상을 뛰어 넘어서 용량이 오히려 커져 버렸다.
23은 원본이랑 거의 차이가 없고, 압축률은 35퍼센트 정도 나왔다.
28은 약간의 화질이 떨어진 게 눈에 보이고, 압축률은 71퍼센트가 나왔다.
32는 확실히 화질이 떨어진 게 눈에 보이고, 압축률은 83퍼센트가 나왔다.
결론 : FHD 인코딩 시 원본과 가장 비슷하게 하려면
crf 23저장 효율을 높이고 싶으면crf 28쪽이 나아보인다.2. HD (1280x720)


HD crf 18 사진인데, 링크 들어가야 정확히 볼 수 있을 듯 함.
HD에서는 솔직히 crf 값 18, 23, 28의 차이를 내 눈으로는 잘 모르겠다. 32는 약간 난다.
결론 : 화질을 고려하면
crf 28용량을 고려하면crf 32를 쓸 거 같다.
3. SD (854x480)


SD crf 32 사진.
여기도 HD와 마찬가지로 화면이 작아지다 보니까 18,23,28 차이는 거의 느껴지지 않고 32 정도만 약간 화질 저하가 보인다.
결론 : 화질을 고려하면
crf 28용량을 고려하면crf 32를 쓸 거 같다.
댓글남기기