AV1 비디오 코덱 차세대 표준 | 로열티 프리·SVT-AV1·FFmpeg 실전
이 글의 핵심
AV1의 Alliance for Open Media 배경·VP9 대비 이점부터 타일·필터·CDEF, libaom·SVT-AV1·rav1e 인코딩과 브라우저·스트리밍 활용까지 정리합니다.
들어가며
AV1(AOMedia Video 1)은 Alliance for Open Media(AOMedia)가 개발한 로열티 프리를 지향하는 개방형 비디오 코덱입니다. VP9·Thor·Daala 등의 기술적 요소를 계승·발전시켜 스트리밍·웹·클라우드에서 특허 로열티 부담을 줄이려는 플랫폼이 우선 채택해 왔습니다. 2026년 기준으로 YouTube의 고효율 옵션, 일부 브라우저·OS의 하드웨어 디코딩, 모바일 SoC의 AV1 디코더 탑재가 확대된 상태입니다. 반면 인코딩 비용은 여전히 설계 포인트입니다. 이 글은 AV1의 구조를 이해하며, FFmpeg에서 바로 실험할 수 있는 명령까지 연결합니다. AV1을 도입할지 판단할 때 핵심 질문은 “압축이 더 좋은가”보다 “인코딩을 한 번 비싸게 하고 전송을 여러 번 싸게 할 수 있는 구조인가” 입니다. AV1은 같은 화질에서 비트레이트를 줄이는 대신 인코딩에 훨씬 많은 연산을 씁니다. 한 번 인코딩해 수백만 번 재생되는 VOD라면 인코딩 비용이 전송 비용 절감으로 쉽게 회수되지만, 시청자가 몇 명뿐인 사내 녹화 영상이나 한 번 보고 버리는 클립이라면 H.264로 빨리 인코딩하는 편이 전체 비용이 낮을 수 있습니다. 여기에 “시청자 기기가 AV1을 하드웨어로 디코딩할 수 있는가”라는 두 번째 질문이 붙습니다.
코덱 개요
역사 및 개발 배경
AV1은 2018년 AOMedia에서 AV1 스펙 1.0.0 형태로 공개된 이후, 필터·타일링·실험적 확장이 버전업을 거쳐 왔습니다. Mozilla·Google·Netflix·Amazon·Apple·Microsoft 등 다수 회사가 참여했으며, 웹 미디어와 OTT를 겨냥한 개방 라이선스가 핵심 메시지였습니다.
기술적 특징
- 슈퍼블록 분할: 128×128까지의 큰 블록에서 시작해 다양한 파티션으로 세분화합니다.
- 향상된 인트라/인터 예측: 더 세분화된 방향성 인트라 예측, 밝기 성분으로 색차를 예측하는 CfL(Chroma from Luma), 회전·확대 같은 움직임을 표현하는 워프 모션과 OBMC(겹침 블록 모션 보상) 로 텍스처·경계에서 비트를 줄입니다.
- 루프 필터 계열: 블록 경계를 다듬는 디블로킹 필터, 방향성 노이즈와 링잉을 줄이는 CDEF(Constrained Directional Enhancement Filter), 원본에 더 가깝게 복원하는 루프 복원 필터(Wiener·self-guided) 가 단계적으로 적용됩니다.
- 타일·서브프레임: 병렬 인코딩/디코딩과 저지연 설계에 유리합니다.
주요 프로파일 및 레벨
AV1은 프로파일(Main 등)과 레벨·티어로 비트스트림 제약을 정의합니다. 실무에서는 “어떤 브라우저/단말이 어떤 프로파일까지 지원하는가”를 제품 요구사항 문서로 받는 경우가 많습니다.
프로파일은 세 가지입니다. Main은 8·10비트와 4:2:0(및 흑백)을, High는 여기에 4:4:4를, Professional은 12비트와 4:2:2까지를 다룹니다. 하드웨어 디코더는 거의 전부 Main만 지원하므로 배포용은 Main 4:2:0으로 고정하는 것이 사실상 표준입니다. 주목할 점은 Main 프로파일이 10비트를 기본으로 포함한다는 것입니다. H.264에서는 10비트가 별도 프로파일이라 호환성 문제가 있었지만, AV1은 10비트 디코딩이 기본 요구 사항이라 SDR 소스라도 -pix_fmt yuv420p10le로 인코딩하는 경우가 많습니다. 내부 연산 정밀도가 높아져 하늘이나 그라데이션의 밴딩이 줄고, 같은 화질에서 비트가 약간 줄어드는 경우도 흔합니다.
압축 원리
Intra / Inter 예측
- Intra: 다양한 방향 모드와 색 예측으로 I-프레임 크기를 줄입니다(장면 전환에 유리).
- Inter: 복잡한 모션을 합성 워프·오버랩 블록 등으로 다루는 요소가 포함됩니다(인코더 구현 수준에 따름).
Transform & Quantization
최대 64×64까지의 변환 블록과 DCT 외의 여러 변환 종류(ADST, 항등 변환 등)를 블록마다 골라 쓰고, 양자화로 주파수 계수를 줄입니다.
필름 그레인 합성은 실무에서 효과가 큰 도구라 조금 더 설명할 가치가 있습니다. 필름 입자나 센서 노이즈는 무작위라서 예측이 불가능하고, 정직하게 인코딩하면 비트를 엄청나게 먹습니다. 비트가 부족하면 인코더가 이 노이즈를 뭉개서 화면이 플라스틱처럼 매끈해지는 것도 흔한 불만입니다. AV1은 인코더가 노이즈를 제거한 깨끗한 영상만 압축하고, 노이즈의 통계적 특성만 몇 바이트짜리 파라미터로 보내 디코더가 재생 시점에 비슷한 입자를 다시 합성하게 합니다. SVT-AV1에서는 -svtav1-params film-grain=8처럼 강도를 지정하며, 값이 너무 크면 원본보다 입자가 과장되어 보이므로 콘텐츠별로 확인이 필요합니다. 합성은 디코더의 몫이라 모든 AV1 디코더가 지원해야 하는 필수 기능이지만, 일부 소프트웨어 플레이어나 후처리 경로에서 누락되는 경우가 있어 대상 플레이어에서 직접 확인하는 것이 안전합니다.
Entropy Coding
AV1은 Daala에서 가져온 다중 심벌 산술 부호화를 쓰며, 심벌별 확률을 적응적으로 갱신하면서 계수·모드 정보를 비트스트림에 담습니다. VP9 대비 도구가 많아 디코더 복잡도도 함께 올라갑니다.
압축 파이프라인 다이어그램
flowchart LR
subgraph src [소스]
P[프레임 픽셀]
end
subgraph split [분할]
SB[슈퍼블록]
PART[파티션 트리]
end
subgraph pred2 [예측·잔차]
IP[Intra/Inter]
RES[잔차]
end
subgraph comp [압축]
TQ2[Transform & Quantize]
ENT[Entropy Coding]
end
subgraph out [출력]
OBU[AV1 OBU Bitstream]
end
P --> SB
SB --> PART
PART --> IP
IP --> RES
RES --> TQ2
TQ2 --> ENT
ENT --> OBU
실전 인코딩
libaom 기반: libaom-av1 (FFmpeg에 포함된 경우)
ffmpeg -i input.mov -c:v libaom-av1 -crf 30 -b:v 0 -cpu-used 4 \
-pix_fmt yuv420p -c:a libopus -b:a 128k output.mkv
- -cpu-used: libaom 계열에서 속도 vs 품질을 조절하는 주요 레버입니다(범위는 버전별로 확인).
- -crf: 목표 품질 모드에서 -b:v 0 조합이 흔합니다.
SVT-AV1(속도·확장성에 강점)
ffmpeg -i input.mov -c:v libsvtav1 -crf 28 -preset 6 -pix_fmt yuv420p \
-c:a libopus -b:a 128k output.mkv
-preset 숫자 의미는 SVT-AV1 버전에 따라 달라질 수 있어 ffmpeg -h encoder=libsvtav1으로 확인합니다.
2-pass VBR(목표 비트레이트)
# libaom-av1은 FFmpeg의 -pass 옵션으로 2-pass를 지원
ffmpeg -i input.mov -c:v libaom-av1 -b:v 3M -cpu-used 4 \
-pass 1 -an -f null /dev/null && \
ffmpeg -i input.mov -c:v libaom-av1 -b:v 3M -cpu-used 4 \
-pass 2 -c:a libopus -b:a 128k output.mkv
2-pass는 첫 번째 패스에서 영상 전체의 복잡도를 분석해 로그 파일(기본 ffmpeg2pass-0.log)에 남기고, 두 번째 패스에서 그 정보를 바탕으로 복잡한 장면에 비트를 더 주고 단순한 장면에서 아끼며 목표 평균 비트레이트를 맞춥니다. 파일 크기가 정해져 있어야 하는 배포(용량 제한 업로드, 대역 예산이 고정된 스트리밍 사다리)에 쓰고, 화질만 일정하면 되는 보관용이라면 1-pass CRF가 더 간단합니다. FFmpeg의 libsvtav1 래퍼는 버전에 따라 이 -pass 방식의 다중 패스를 지원하지 않거나 동작이 달라서, SVT-AV1로 목표 비트레이트를 맞춰야 한다면 SVT-AV1 자체 CLI(SvtAv1EncApp --passes 2)를 쓰거나 -svtav1-params의 레이트 제어 옵션을 사용하는 버전별 문서를 확인하는 편이 안전합니다. Windows에서는 /dev/null 대신 NUL을 씁니다.
rav1e(러스트 인코더, FFmpeg 연동 시)
배포본에 librav1e가 포함된 경우:
ffmpeg -i input.mov -c:v librav1e -qp 80 -speed 6 -pix_fmt yuv420p \
-c:a libopus -b:a 128k output.mkv
QP·speed 의미는 rav1e 버전에 따라 다릅니다.
파라미터 튜닝 가이드
| 목표 | 접근 |
|---|---|
| 최고 품질(오프라인) | 느린 preset / 낮은 cpu-used / 멀티 pass |
| 대량 배치 | SVT-AV1 + 적절한 preset, 타일로 병렬화 |
| 저지연 | 타일 수·GOP·B-프레임 제한(인코더별 옵션명 상이) |
품질 vs 속도 트레이드오프
- AV1은 “느리게 돌리면 효율이 확 올라가는” 타입이어서 테스트 클립 30초로 preset 곡선을 먼저 그리는 것이 비용 대비 효율적입니다.
- 동일 CRF 숫자는 인코더마다 의미가 다릅니다. VMAF·시각 비교로 고정하는 것이 안전합니다.
성능 비교
다른 코덱과의 압축률
동일 시청 조건에서 AV1은 HEVC와 유사하거나 더 나은 비트 효율을 내는 사례가 많습니다(콘텐츠·인코더·설정 의존). H.264 대비는 대역 절감 폭이 큰 편입니다.
인코딩·디코딩 속도
- 인코딩: libaom 초기 세대는 매우 느린 편이었으며, SVT-AV1과 HW 인코더가 실무 체감을 바꿨습니다.
- 디코딩: 최신 GPU·모바일 SoC는 AV1 HW 디코딩이 늘었지만, 구형 노트북은 CPU 소프트 디코딩으로 배터리 소모가 커질 수 있습니다.
하드웨어 가속 지원
- Intel: 11세대 Core(Tiger Lake) 내장 그래픽부터 AV1 디코딩, Arc GPU부터 AV1 인코딩
- NVIDIA: RTX 30 시리즈부터 AV1 디코딩, RTX 40 시리즈부터 NVENC AV1 인코딩
- AMD: RX 6000 시리즈 대부분에서 디코딩, RX 7000 시리즈부터 인코딩
- Apple: A17 Pro·M3 세대부터 하드웨어 AV1 디코딩 (이전 기기의 Safari는 AV1을 재생하지 않는 경우가 많음)
하드웨어 디코딩 지원 여부가 AV1 배포 결정의 가장 큰 변수입니다. 하드웨어 디코더가 없는 기기에서는 dav1d 같은 소프트웨어 디코더가 CPU로 재생하는데, 데스크톱에서는 1080p가 무리 없이 재생되더라도 오래된 노트북이나 저가 모바일 기기에서는 4K가 끊기고 배터리가 빠르게 닳습니다. 하드웨어 인코더는 소프트웨어 인코더보다 훨씬 빠르지만 같은 비트레이트에서 화질은 느린 소프트웨어 preset보다 떨어지는 편이어서, 실시간 방송·화면 녹화에는 하드웨어, VOD 마스터에는 소프트웨어를 쓰는 분업이 일반적입니다.
FFmpeg에서 av1_nvenc 등 사용 가능 여부는 빌드 옵션·드라이버에 좌우됩니다.
실무 활용 사례
스트리밍 서비스 (YouTube, Netflix 등)
- YouTube는 업로드 파일을 다시 인코딩하며 AV1 트랜스코딩을 제공하는 경우가 많습니다(계정·지역·콘텐츠에 따라 UI 표기 상이).
- Netflix 등 글로벌 OTT는 AV1을 대역 절감과 디바이스 캡에 맞춰 A/B 배포하는 사례가 공개된 바 있습니다.
모바일 앱
- 최신 안드로이드·iOS는 AV1 디코딩이 하드웨어로 오는 기기가 늘었습니다. 앱 최소 지원 OS를 기준으로 코덱 폴백을 설계합니다.
웹 브라우저 지원
- Chrome·Firefox·Edge 등은 AV1 디코딩을 폭넓게 지원합니다. Safari도 버전·OS·하드웨어에 따라 AV1 경로가 개선되어 왔습니다. 실서비스는 caniuse·필드 데이터로 확인하는 것이 안전합니다.
웹에서는 브라우저가 코덱을 고르게 하는 것이 가장 단순한 폴백입니다. <video> 안에 <source type='video/mp4; codecs="av01.0.08M.08"'>를 먼저, H.264 소스를 그 뒤에 두면 AV1을 재생할 수 있는 브라우저만 첫 번째를 고릅니다. 다만 “재생할 수 있다”와 “부드럽게 재생할 수 있다”는 다른 문제라서, navigator.mediaCapabilities.decodingInfo()로 smooth·powerEfficient 값까지 확인해 하드웨어 디코딩이 가능한 경우에만 AV1을 고르는 플레이어가 많습니다. 소프트웨어로 재생 가능하다는 이유만으로 AV1을 내보내면, 사용자는 화질 향상은 느끼지 못하고 발열과 배터리 소모만 경험할 수 있습니다.
최적화 팁
품질 유지하며 파일 크기 줄이기
- 소스 노이즈: 노이즈는 예측이 안 돼 비트를 많이 먹습니다. 필름 그레인이 많은 소스라면 앞에서 설명한 필름 그레인 합성을 켜고, 노이즈 제거 강도와 합성 강도를 함께 조정합니다.
- 해상도: 시청 환경에서 4K가 필요 없다면 1080p로 내려 인코딩하는 것이 같은 비트레이트에서 더 나은 화질을 주는 경우가 많습니다. 해상도별 비트레이트 사다리는 VMAF로 확인합니다.
인코딩 속도 개선
- SVT-AV1로 시작해 품질이 부족하면 preset만 조정하는 방식이 반복 실험에 유리합니다. preset 번호가 낮을수록 느리고 효율이 좋으며, 한 단계 차이의 인코딩 시간은 크게 벌어지는 반면 비트 절감은 점점 작아지는 체감 수익 구조입니다. 처음 AV1 배치를 돌릴 때 가장 느린 preset부터 시도했다가 인코딩 대기열이 끝없이 밀리는 경우가 흔한데, 중간 preset에서 VMAF 목표를 먼저 맞추고 필요한 콘텐츠에만 느린 preset을 쓰는 편이 비용 대비 효과가 좋습니다.
- 멀티 인스턴스: 클립 단위 병렬로 총 처리 시간을 줄입니다.
배치 처리 자동화
#!/usr/bin/env bash
set -euo pipefail
mkdir -p av1_out
for f in *.mp4; do
ffmpeg -y -i "$f" -c:v libsvtav1 -crf 30 -preset 8 -pix_fmt yuv420p \
-c:a libopus -b:a 96k "av1_out/${f%.mp4}.mkv"
done
흔한 문제와 해결
호환성 이슈
- “재생은 되는데 끊긴다”: 구형 PC에서 CPU 디코딩 병목일 수 있습니다. 해상도·비트레이트를 낮추거나 H.264 폴백을 제공합니다.
- 컨테이너: MP4 vs MKV vs WebM에 따라 코덱 태그·메타데이터 호환이 달라집니다. 배포 채널 스펙에 맞춥니다.
품질 저하 문제
- 빠른 preset만 올리다 보면 텍스처 붕괴가 옵니다. 동일 VMAF에서 인코딩 시간을 비교하세요.
- 10비트·HDR: 소스가 SDR인데 10비트로만 바꾼다고 HDR이 되지는 않습니다. HDR을 유지하려면 소스의 색 공간·전달 특성 메타데이터(
-color_primaries bt2020 -color_trc smpte2084 -colorspace bt2020nc)를 인코딩 결과에도 그대로 넣어야 하고, 빠뜨리면 HDR 영상이 색이 바랜 것처럼 재생됩니다. - 키프레임 간격: 스트리밍용 세그먼트(HLS·DASH)로 자를 영상은
-g로 키프레임 간격을 세그먼트 길이에 맞춰야 합니다. SVT-AV1의 기본 GOP는 스트리밍 세그먼트 길이와 맞지 않을 수 있어, 그대로 쓰면 세그먼트 경계에서 탐색(seek)이 느려지거나 세그먼트 길이가 불규칙해집니다.
라이선스 고려사항
- AV1은 로열티 프리를 목표로 하는 라이선스를 전제로 설계되었지만, 조직의 법무·특허 정책에 따라 검토 절차가 필요할 수 있습니다. 인코더 바이너리 배포와 서비스 제공은 별도 과제입니다.
언제 AV1을 고를까
대역 비용이 민감한 VOD, 로열티 구조를 단순화하려는 자체 플랫폼, 최신 단말 위주의 서비스에 AV1이 잘 맞습니다. 구형 단말이나 실시간 제약이 있으면 H.264/HEVC를 함께 내보내야 합니다. 호환성 기준선은 H.264 가이드, 4K·HDR 저장 효율은 HEVC 가이드와 함께 비교해 결정하세요.
같이 보면 좋은 글
- HEVC(H.265) 비디오 코덱 실전 활용 | 4K·8K·x265·FFmpeg 튜닝
- H.264 vs HEVC vs AV1 비디오 코덱 비교 | 압축·호환성·인코딩 선택 가이드
- H.264(AVC) 실무