FFmpeg 비디오 압축: CRF vs CBR vs VBR 설명

비트레이트 제어: 기본부터

CRF, CBR, VBR의 차이를 이해하려면 먼저 비트레이트에 대해 이야기해야 합니다.

비트레이트는 단위 시간당 생성되는 비디오 데이터의 양으로, 보통 kbps(초당 킬로비트) 또는 Mbps(초당 메가비트)로 측정됩니다. 비디오의 선명도, 부드러움, 최종 파일 크기를 직접 결정합니다. 해상도, 프레임 속도, 코덱이 같을 때 비트레이트가 높을수록 디테일이 더 보존되지만 파일이 커지고, 비트레이트가 낮을수록 파일은 작아지지만 흐림, 밴딩, 블록 아티팩트가 발생합니다.

그렇다면 왜 비트레이트 제어가 필요할까요? 이유는 비디오 프레임의 복잡도가 끊임없이 변하기 때문입니다. 정적인 배경과 단색 영역은 아주 적은 데이터로 무손실 복원할 수 있지만, 빠른 움직임, 풍부한 질감, 급격한 변화는 선명함을 유지하려면 훨씬 더 많은 비트가 필요합니다. 비디오 전체에 일정한 비트레이트를 강제하면 단순한 장면은 저장 공간을 낭비하고, 복잡한 장면은 비트가 부족해 눈에 띄게 품질이 떨어집니다.

비트레이트 제어의 핵심 목표는 고정된 저장 또는 대역폭 예산 내에서 각 프레임에 지능적으로 비트를 할당하고, 품질과 크기 사이의 최적의 균형을 잡는 것입니다. CRF, CBR, VBR 세 가지 모드는 본질적으로 세 가지 다른 할당 전략입니다.

세 가지 비트레이트 제어 모드 설명

CRF (Constant Rate Factor)

CRF의 지침 원칙은 일정한 품질입니다. 인코더는 각 프레임의 복잡도에 따라 비트를 동적으로 할당합니다. 단순한 장면에는 더 적은 비트를, 복잡한 장면에는 더 많은 비트를 사용하여 비디오 전체에 걸쳐 인지되는 품질을 일정하게 유지합니다. 프레임이 고요한 풍경이든 액션으로 가득한 장면이든 시청자는 거의 같은 시각적 품질을 경험합니다.

CRF는 0에서 51 사이의 정수(x264 및 x265 인코더 기준)로 제어됩니다. 값이 낮을수록 품질이 높고 파일이 크며, 값이 높을수록 품질이 낮고 파일이 작습니다. 값 0은 무손실 인코딩을 생성하고, 51은 최저 품질이며, 23은 일반적으로 시각적으로 무손실인 기본 기준점입니다.

CRF의 가장 큰 장점은 단순함과 안정적인 품질의 결합입니다. 인코더가 장면 복잡도에 따라 자동으로 비트를 분배하므로 미리 목표 비트레이트를 설정할 필요가 없습니다. 이러한 이유로 CRF는 오프라인 압축, 파일 저장, 웹 게시와 같은 대부분의 비실시간 작업에서 선호되는 모드입니다.

CBR (Constant Bitrate)

CBR은 전체 구간에 걸쳐 비트레이트를 고정합니다. 장면이 복잡하든 단순하든 인코더는 매초 같은 양의 데이터를 출력합니다. 이는 단순한 장면에서는 할당된 비트가 중복되거나 심지어 낭비되고, 복잡한 장면에서는 비트가 부족해 눈에 보이는 아티팩트가 발생할 수 있음을 의미합니다.

CBR의 강점은 예측 가능성과 버퍼 친화성에 있습니다. 이러한 특성 덕분에 대역폭 안정성이 중요한 라이브 스트리밍과 실시간 비디오 전송에 특히 적합합니다. 이러한 시나리오에서는 네트워크 대역폭이 고정된 경우가 많으며, 큰 비트레이트 변동은 버퍼를 넘치게 하거나 네트워크를 혼잡하게 만들어 끊김을 유발할 수 있습니다. CBR은 전송 안정성을 위해 일부 품질을 희생합니다.

VBR (Variable Bitrate)

VBR은 비트레이트가 지정된 범위 내에서 변동하도록 허용합니다. 인코더는 장면 복잡도와 목표 품질을 가중하여 구성된 최소값과 최대값 사이에서 비트레이트를 조정합니다. VBR은 일반적으로 목표 비트레이트(또는 목표 품질)와 상하한을 설정해야 하므로 CBR보다 유연하면서도 CRF에 없는 비트레이트 제약을 추가합니다.

VBR은 품질을 보존하면서 전체 파일 크기를 제어해야 하는 시나리오, 예를 들어 스트리밍 세그먼트 인코딩에서 흔히 쓰입니다. 참고로 x264 인코더는 2패스 VBR 모드도 제공합니다. 첫 번째 패스에서는 전체 비디오를 스캔하여 복잡도 분포를 분석하고, 두 번째 패스에서는 그 분석을 바탕으로 비트를 정확히 할당합니다. 이 모드는 목표 크기를 정확히 제어하면서 비트 분배를 최적화하지만, 싱글패스 인코딩의 약 두 배 시간이 걸려 크기 요구사항이 엄격한 오프라인 작업에 이상적입니다.

세 모드 간의 비트레이트 변동 비교

아래 차트는 같은 비디오에서 세 모드가 어떻게 동작하는지 시각화한 것입니다. CBR은 평평한 수평선이고, CRF와 VBR은 모두 장면 복잡도에 따라 오르내립니다. CRF는 더 자유롭게 변동하는 반면, VBR은 구성된 하한과 상한에 의해 제한됩니다.

FFmpeg video compression workflow: command-line parsing, decoding, encoding, output

CRF 값이 품질과 크기에 미치는 영향

CRF 모드를 사용할 때 올바른 CRF 값을 선택하는 것이 가장 중요한 단계입니다. 아래 차트는 CRF 값이 18에서 30으로 변함에 따라 품질과 파일 크기가 어떻게 변하는지 보여줍니다. CRF가 낮을수록 품질이 높고 파일이 크며, CRF가 높을수록 파일은 작아지지만 품질을 희생합니다.

FFmpeg CRF bitrate control strategy diagram: constant quality vs variable bitrate compression effect comparison

FFmpeg 명령어 예제: 세 가지 일반적인 시나리오

다음은 세 가지 전형적인 압축 시나리오로, 각각 품질과 크기의 다른 균형을 다룹니다.

시나리오 1: 이메일 (H.264 + 720p + CRF 28)

이메일 첨부 파일은 보통 크기 제한이 있으므로 비디오를 강하게 압축해야 합니다. 720p 해상도와 CRF 28은 파일을 작게 유지하면서도 볼 만하게 유지합니다.


ffmpeg -i input.mp4 \
  -c:v libx264 -preset medium -crf 28 \
  -vf "scale=-2:720" \
  -c:a aac -b:a 128k \
  output.mp4

시나리오 2: 웹 게시 (H.264 + 1080p + CRF 26)

웹 비디오는 선명도와 로딩 속도의 균형을 잡아야 합니다. 1080p와 CRF 26은 가장 넓은 호환성도 제공하는 일반적인 조합입니다.


ffmpeg -i input.mp4 \
  -c:v libx264 -preset medium -crf 26 \
  -vf "scale=-2:1080" \
  -c:a aac -b:a 128k \
  output.mp4

시나리오 3: 보관 (H.265 + 원본 해상도 + CRF 20)

보관은 품질과 압축 효율을 우선합니다. H.265 인코더를 사용하면서 원본 해상도를 유지하면, CRF 20은 H.264보다 작은 크기로 거의 시각적으로 무손실인 품질을 달성합니다.


ffmpeg -i input.mp4 \
  -c:v libx265 -preset medium -crf 20 \
  -c:a aac -b:a 192k \
  output.mp4

핵심 매개변수에 대한 간단한 참고: -c:v는 비디오 코덱을 설정하며, libx264는 H.264에, libx265는 H.265에 해당합니다. -preset은 인코딩 속도와 압축 효율을 교환하며, 느린 프리셋일수록 더 나은 압축을 제공합니다. -crf는 품질 수준을 설정합니다. -vf "scale=-2:720"은 높이를 720픽셀로 스케일하면서 너비를 비례적으로 계산하고 짝수로 유지합니다. 그리고 -c:a aac -b:a 128k는 오디오를 AAC로 128 kbps에 인코딩합니다.

CRF 값 선택 가이드

아래 표는 빠른 참고를 위한 일반적인 CRF 범위를 나열합니다. 실제로는 시나리오의 권장 범위 중간값에서 시작해 짧은 클립을 테스트 인코딩한 뒤 그로부터 미세 조정합니다.

CRF 범위품질 수준파일 크기용도
18-22고품질보관, 소스 백업, 고품질 재생
23-26표준보통웹 게시, 온디맨드 스트리밍, 모바일 재생
27-30극한 압축작음이메일, 인스턴트 메시징, 대역폭이 제한된 전송

CRF vs CBR vs VBR 비교

아래 표는 품질, 크기, 인코딩 속도, 용도 측면에서 세 모드를 비교하여 필요에 따라 선택할 수 있도록 돕습니다.

항목CRFCBRVBR
품질 안정성높음(전체적으로 일관)낮음(복잡한 장면에서 아티팩트)중간(비트레이트 한계로 제한)
파일 크기예측 불가예측 가능대략 예측 가능(2패스가 더 정밀)
인코딩 속도빠름(싱글패스)빠름느림(2패스가 약 두 배 소요)
용도오프라인 압축, 저장, 웹 게시라이브 스트리밍, 실시간 전송스트리밍 전송, 크기 제한 작업

자주 묻는 질문

1. 올바른 CRF 값은 어떻게 선택하나요?

보편적으로 올바른 CRF 값은 없습니다. 품질과 크기 사이의 트레이드오프에 따라 다릅니다. CRF 23-26이 좋은 출발점입니다. 품질이 좋아 보이면 값을 점진적으로 높여 파일을 더 줄이고, 품질이 부족하면 값을 낮춥니다. 보관 용도에는 18-22가 적합하고, 크기에 민감한 전송에는 27-30이 적절합니다.

2. 압축한 비디오가 흐려 보이면 어떻게 해야 하나요?

흐림은 보통 비트레이트 부족이나 지나치게 공격적인 해상도 축소가 원인입니다. 몇 가지를 확인하세요. 첫째, CRF 값을 낮춰(예: 28에서 24로) 인코더에 더 많은 비트를 줍니다. 둘째, 해상도를 너무 많이 줄이지 않았는지 확인하고 필요하면 높입니다. 셋째, 더 느린 프리셋(slow나 slower 등)으로 전환해 인코딩 시간을 더 나은 압축 품질로 교환합니다. 넷째, 노이즈 제거나 디인터레이스 필터를 지나치게 강하게 적용하지 않았는지 확인합니다. 잘못 설정하면 화면이 뭉개질 수 있습니다.

3. H.264와 H.265 중 어떤 것을 선택해야 하나요?

H.264는 가장 넓은 호환성을 가지며, 거의 모든 최신 기기, 운영체제, 브라우저에서 지원되어 웹 및 모바일 재생 같은 광범위한 배포에 이상적입니다. H.265(HEVC)는 더 효율적이어서 같은 품질에서 H.264보다 약 30-50% 더 작은 파일을 생성하지만, 인코딩이 더 느리고 일부 구형 기기와 브라우저에서 지원되지 않습니다. 목적이 보관이나 최신 기기 배포라면 H.265를 우선하고, 최대 호환성이 우선이라면 H.264를 선택하세요.

요약

비트레이트 제어는 비디오 압축의 핵심이며, 올바른 모드를 선택하는 것이 특정 매개변수를 조정하는 것보다 종종 더 중요합니다. CRF는 일정한 품질을 우선하여 오프라인 압축과 파일 저장의 첫 번째 선택이고, CBR은 비트레이트 안정성을 우선하여 라이브 스트리밍과 실시간 전송에 적합하며, VBR은 두 가지의 균형을 잡아 전체 크기 제약이 있는 배포 시나리오에 맞습니다.

실제로는 세 가지 포인트를 익히면 대부분의 필요를 충족합니다. 시나리오에 맞는 비트레이트 제어 모드를 선택하고, 합리적인 CRF 값을 선택해 테스트 인코딩 후 미세 조정하며, 호환성 요구사항에 따라 H.264와 H.265 중 선택하는 것입니다. 속도와 효율을 교환하는 프리셋 조정과 결합하여, FFmpeg은 어떤 시나리오에서든 품질과 크기의 균형을 잡은 비디오를 제작할 수 있게 해줍니다.

관련 글:

파일 압축이 필요하신가요? SmartSlim을 사용해 보세요

자체 개발한 Rust 압축 엔진 기반으로 PDF/이미지/비디오/Office/OFD 등 10대 분류 40+ 포맷을 지원합니다. 로컬 압축으로 데이터가 외부로 나가지 않습니다.