03 · Audio Codecs Overview — 어떤 코덱을 왜 쓰는가
이 문서가 답하는 질문: AAC, MP3, Opus, FLAC, ALAC, Vorbis. 무엇이 무엇이고 언제 쓰는가? 선행 지식:
01-sampling-and-quantization.md,02-channels-and-spatial.md
한 줄 답
오디오 코덱은 (a) 손실/무손실 (b) 라이선스 (c) 호환성 세 축으로 결정되며, 2026년 현재 사실상의 표준은 AAC(배포) + Opus(저지연·웹) + FLAC(아카이브) 의 3강 체제다. “AAC가 왜 이겼는가”의 답은 음질이 아니라 iTunes Store(2003) + iPhone(2007) 이라는 거대 플랫폼이다.
Why — 왜 압축하는가
PCM 1분 (CD 스펙: 44.1kHz × 16bit × 2ch)은 약 10 MB. 앨범 한 장(60분) ≈ 600 MB. 음원 카탈로그 1만 곡 ≈ 6 TB.
문제는:
- 저장: 모바일/CDN 비용
- 전송: 모바일 네트워크에서 streaming 가능해야 함
- 인코딩 시간: 인코딩이 너무 느리면 라이브에 못 씀
→ 귀가 못 듣는 정보를 버려서(perceptual coding) 1020:1 압축을 한다.
→ 버리지 않고 통계적 redundancy만 줄여서 1.52:1 무손실 압축도 있다.
How — 손실 vs 무손실의 메커니즘
1) Perceptual Coding (손실 압축의 원리)
사람의 청각은 psychoacoustic masking(소리가 다른 소리를 가린다) 효과를 강하게 가진다.
핵심 트릭:
- MDCT(Modified Discrete Cosine Transform): 시간 → 주파수 변환. 50% 오버랩으로 블록 간 경계 artifact 제거.
- Critical band: 사람의 청각이 주파수를 그룹으로 묶어 인지함 (Bark scale, 약 25개 밴드).
- 마스킹된 대역의 비트를 0에 가깝게 줄이면 귀에는 차이가 없음.
코덱 차이는 결국 MDCT 윈도우 크기, psychoacoustic 모델 정밀도, 엔트로피 코딩 효율의 조합이다.
2) Lossless Coding (무손실 압축의 원리)
FLAC은 LPC(linear predictive coding)로 잔차를 줄이고 Rice coding으로 압축한다. MDCT를 안 쓰므로 빠르고, 모든 정보가 보존된다.
3) 차세대 손실 코덱 (Opus의 하이브리드)
Opus는 두 코덱을 동적으로 전환한다:
- SILK (Skype 출신): 음성용 LPC 기반, 8~24 kHz 대역
- CELT (Xiph): 음악용 MDCT 기반, ~24 kHz 대역
→ 6 kbps에서 510 kbps까지 한 코덱, 2.5 ~ 60 ms 프레임 길이, 스테레오/서라운드/multi-channel 모두 지원.
What — 코덱별 비교
손실 코덱 비교
| 코덱 | 출시 | 라이선스 | 권장 비트레이트 (stereo) | 컨테이너 | 특징 |
|---|---|---|---|---|---|
| MP3 | 1993 | 만료(2017) | 128 / 192 / 320 kbps | .mp3 | 가장 호환성 좋음, 효율 낮음 |
| AAC-LC | 1997 | MPEG-LA (포함료) | 96 / 128 / 192 / 256 kbps | MP4/M4A/ADTS/HLS | 사실상 표준 |
| HE-AAC v1 | 2003 | MPEG-LA | 32 / 48 / 64 kbps | MP4 | SBR로 저비트레이트 강함 |
| HE-AAC v2 | 2006 | MPEG-LA | 16 / 24 / 32 kbps | MP4 | + Parametric Stereo |
| Vorbis | 2002 | 무료 (Xiph) | 96 / 128 / 192 kbps | Ogg | Spotify 초기 사용 |
| Opus | 2012 | 무료 (RFC 6716) | 32 / 64 / 128 / 256 kbps | Ogg/WebM/MP4 | 모든 영역에서 최강 |
| WMA Pro | 2003 | Microsoft | 192 / 256 kbps | ASF | Windows 전용 (사실상 사망) |
| xHE-AAC | 2018 | MPEG-LA | 12~500 kbps | MP4 | DRC + loudness 메타 |
무손실 코덱 비교
| 코덱 | 라이선스 | 압축률 (CD대비) | 호환성 | 특징 |
|---|---|---|---|---|
| FLAC | 무료 (Xiph) | 50~70% | 거의 모든 플레이어 | 사실상 무손실 표준 |
| ALAC | Apache 2.0 (Apple) | 50~70% | Apple 생태계 + 일부 안드로이드 | iTunes/Apple Music |
| WavPack | BSD | 50~70% | 일부 플레이어 | 하이브리드 모드 (lossy + correction) |
| Monkey’s Audio | 비공개 SDK | 45~65% | Windows 위주 | 압축률 좋지만 인코딩 느림 |
| TAK | 비공개 | 45~65% | 특정 플레이어 | 압축률 + 속도 균형 |
| WMA Lossless | Microsoft | 50~70% | Windows | Apple 생태계 미지원 |
권장 비트레이트 표 (stereo, perceptual transparent 기준)
| 콘텐츠 | AAC | MP3 | Opus | 비고 |
|---|---|---|---|---|
| 음성 통화 | 32 kbps | - | 24 kbps | Opus 압도적 |
| 팟캐스트 | 64 kbps | 96 kbps | 48 kbps | mono 권장 |
| 라디오 | 96 kbps | 128 kbps | 64 kbps | |
| 스트리밍 음악 (일반) | 128 kbps | 192 kbps | 96 kbps | 사실상 표준 |
| 스트리밍 음악 (고음질) | 256 kbps | 320 kbps | 160 kbps | Spotify Premium 등 |
| 무손실 마스터 → 배포 | 320 kbps | 320 kbps | 256 kbps |
→ Opus는 동일 비트레이트에서 AAC 대비 약 +20%, MP3 대비 +50% 효율.
컨테이너와 코덱의 관계
| 컨테이너 | 가능한 코덱 | 주 사용처 |
|---|---|---|
.mp3 | MP3만 | 팟캐스트, 레거시 |
.m4a / .mp4 | AAC, ALAC, MP3 | iTunes, Apple Music |
.aac (ADTS) | AAC만 | HLS audio segment |
.ogg | Vorbis, Opus, FLAC, Speex | 데스크톱 리눅스, 일부 게임 |
.opus | Opus만 | WhatsApp 음성, Telegram |
.webm | Opus, Vorbis | 웹 (Chrome/Firefox) |
.flac | FLAC만 | 하이파이 |
.wav | PCM, ADPCM | 비압축 |
→ 확장자가 코덱을 보장하지 않는다. .m4a 안에 AAC인지 ALAC인지 ffprobe로 확인해야 함.
ffmpeg 인코딩 명령
# AAC-LC (libfdk_aac가 더 좋지만 GPL 라이선스 이슈 → libfdk_aac 빌드 ffmpeg 필요)
ffmpeg -i in.wav -c:a aac -b:a 128k -ar 48000 out.m4a
ffmpeg -i in.wav -c:a libfdk_aac -b:a 128k out.m4a # 더 좋은 품질
# Opus
ffmpeg -i in.wav -c:a libopus -b:a 96k -application audio out.opus
# -application audio | voip | lowdelay
# FLAC (compression_level 0~12, 8이 기본)
ffmpeg -i in.wav -c:a flac -compression_level 8 out.flac
# ALAC
ffmpeg -i in.wav -c:a alac out.m4a
# 코덱 정보 확인
ffprobe -v error -show_streams -select_streams a:0 in.m4a \
| grep -E "codec_name|bit_rate|sample_rate|channels"What-if — 잘못 쓰면 어떻게 깨지는가
1. Lossy → Lossy 재인코딩 (generation loss)
MP3 192k → AAC 128k로 변환하면 두 코덱이 다른 주파수 대역을 버린다 → 누적 distortion이 생긴다. 원칙: 마스터는 항상 PCM 또는 FLAC에서 한 번만 인코딩.
2. AAC를 ADTS 없이 raw로 저장
.aac 파일이 ADTS 헤더(매 프레임 7~9 bytes)가 없으면 random seek가 불가능하고 streaming도 깨진다. HLS audio segment는 반드시 ADTS.
3. Opus를 HLS에 넣기
iOS Safari는 HLS에서 AAC만 공식 지원 (2024년까지). Opus는 fMP4/CMAF로 가능하지만 Safari는 거부. → HLS는 AAC, DASH는 Opus 가능.
4. FLAC을 vbr 비트레이트로 표기
FLAC은 VBR이지만 유효 비트레이트는 콘텐츠에 따라 800~1100 kbps. 이를 “1411 kbps와 같다”고 광고하면 오해를 부른다 — FLAC = lossless = “원본과 동일”, 비트레이트는 무관.
5. iTunes에서 AAC 파일을 ALAC로 알아듣지 못함
확장자 .m4a 동일이라 사용자 혼동. ffprobe로 codec_name 확인 후 MediaInfo 같은 툴로 메타데이터 검증.
6. Sample rate 미스매치
AAC는 8/11.025/12/16/22.05/24/32/44.1/48/64/88.2/96 kHz 지원. Opus는 내부적으로 항상 48 kHz로 처리(다른 fs 입력 시 자동 리샘플) — 44.1 입력해도 48로 변환되어 디코드된다.
Insight — 흥미로운 이야기
“AAC가 이긴 진짜 이유”
1997년 AAC 표준화 시점에 MP3는 이미 시장 장악. 음질 우위만으로는 못 이긴다. 1999년 Napster, 2001년 iPod, 2003년 iTunes Store. 애플은 MP3 라이선스를 피하고 싶었고, AAC는 ISO 표준이라 라이선스가 더 깨끗했다. Steve Jobs가 “iTunes는 AAC만 판다”고 못 박은 순간 AAC는 표준이 됐다. 기술 우위 < 거대 플랫폼의 단독 결정.
“MP3 특허는 왜 2017년에 만료됐는가”
1993년 표준화 → 2017년 5월 마지막 특허 만료. 24년이 정확히 미국 특허 보호기간 + 연장. Fraunhofer IIS는 만료 발표를 “Thank you for over 20 years of MP3”라는 헌사로 기념했지만, 사실상 의미 없었다 — 그때 이미 음원은 AAC, 영상은 H.264, 웹은 Opus였다.
“Opus의 6ms 지연은 어떻게 가능한가”
일반 코덱은 MDCT 50% overlap 때문에 최소 한 프레임(20~46ms) 지연이 불가피. Opus는 2.5ms 프레임과 TDAC(time-domain aliasing cancellation) 트릭으로 6ms까지 줄였다. 그 결과 WebRTC가 가능해졌고, Discord/Zoom/Google Meet/WhatsApp이 다 Opus 위에 있다. “표준은 가장 작은 지연을 가진 자가 이긴다”의 산증인.
“FLAC은 왜 표준이 됐는가 (다른 무손실은 못 이겼는데)”
Monkey’s Audio가 더 압축 잘하고, ALAC이 Apple에 들어있는데도 FLAC이 표준. 이유: 2001년 BSD 오픈소스 + reference encoder가 깔끔. 모든 플랫폼에 포팅이 쉬움. Xiph가 만들었지만 ISO 표준이 아닌데도 “사실상 표준”이 된 드문 사례. → 표준은 라이선스 + 구현 가능성으로 결정된다.
“왜 라디오는 아직도 MP3인가”
팟캐스트의 표준은 RSS 2.0 (2003) 시절에 굳었고, 그때 MP3가 절대 표준. 이제 와서 AAC로 바꾸려 해도 모든 팟캐스트 앱이 다시 호환을 맞춰야 함. “표준이 굳은 자리는 음질 우위로 못 흔든다”의 또 다른 사례.
한 단락 요약 + Mermaid
오디오 코덱의 결정은 (a) 손실/무손실 (b) 라이선스 (c) 디바이스 호환성 의 줄다리기다. AAC가 표준 자리를 차지한 건 음질이 아니라 iTunes의 단독 채택, MP3가 팟캐스트에 남은 건 RSS 2.0의 화석화, Opus가 웹·통신을 장악한 건 6ms 지연, FLAC이 무손실 표준이 된 건 BSD 라이선스. 2026년 실무 처방: AAC-LC 128 kbps + Opus(웹) + FLAC(아카이브) — 이 셋을 알면 90% 끝난다.