2 분 소요

회사에서 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 옵션

ffmpeg wiki

  • 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값 만 조정
  • crf18, 23, 28, 32 4가지 비교
  • 해상도는 FHD, HD, SD 3가지로 인코딩
    • 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를 쓸 거 같다.

댓글남기기