📁 File4. 오디오03 · Audio Codecs Overview — 어떤 코덱을 왜 쓰는가

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)컨테이너특징
MP31993만료(2017)128 / 192 / 320 kbps.mp3가장 호환성 좋음, 효율 낮음
AAC-LC1997MPEG-LA (포함료)96 / 128 / 192 / 256 kbpsMP4/M4A/ADTS/HLS사실상 표준
HE-AAC v12003MPEG-LA32 / 48 / 64 kbpsMP4SBR로 저비트레이트 강함
HE-AAC v22006MPEG-LA16 / 24 / 32 kbpsMP4+ Parametric Stereo
Vorbis2002무료 (Xiph)96 / 128 / 192 kbpsOggSpotify 초기 사용
Opus2012무료 (RFC 6716)32 / 64 / 128 / 256 kbpsOgg/WebM/MP4모든 영역에서 최강
WMA Pro2003Microsoft192 / 256 kbpsASFWindows 전용 (사실상 사망)
xHE-AAC2018MPEG-LA12~500 kbpsMP4DRC + loudness 메타

무손실 코덱 비교

코덱라이선스압축률 (CD대비)호환성특징
FLAC무료 (Xiph)50~70%거의 모든 플레이어사실상 무손실 표준
ALACApache 2.0 (Apple)50~70%Apple 생태계 + 일부 안드로이드iTunes/Apple Music
WavPackBSD50~70%일부 플레이어하이브리드 모드 (lossy + correction)
Monkey’s Audio비공개 SDK45~65%Windows 위주압축률 좋지만 인코딩 느림
TAK비공개45~65%특정 플레이어압축률 + 속도 균형
WMA LosslessMicrosoft50~70%WindowsApple 생태계 미지원

권장 비트레이트 표 (stereo, perceptual transparent 기준)

콘텐츠AACMP3Opus비고
음성 통화32 kbps-24 kbpsOpus 압도적
팟캐스트64 kbps96 kbps48 kbpsmono 권장
라디오96 kbps128 kbps64 kbps
스트리밍 음악 (일반)128 kbps192 kbps96 kbps사실상 표준
스트리밍 음악 (고음질)256 kbps320 kbps160 kbpsSpotify Premium 등
무손실 마스터 → 배포320 kbps320 kbps256 kbps

Opus는 동일 비트레이트에서 AAC 대비 약 +20%, MP3 대비 +50% 효율.

컨테이너와 코덱의 관계

컨테이너가능한 코덱주 사용처
.mp3MP3만팟캐스트, 레거시
.m4a / .mp4AAC, ALAC, MP3iTunes, Apple Music
.aac (ADTS)AAC만HLS audio segment
.oggVorbis, Opus, FLAC, Speex데스크톱 리눅스, 일부 게임
.opusOpus만WhatsApp 음성, Telegram
.webmOpus, Vorbis웹 (Chrome/Firefox)
.flacFLAC만하이파이
.wavPCM, 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% 끝난다.