04 · Loudness & EBU R128 — 큰 소리는 어떻게 정량화하는가
이 문서가 답하는 질문: “Spotify는 -14 LUFS, 방송은 -23 LUFS”라는 숫자는 무엇이고, 어떻게 측정하는가? 선행 지식:
01-sampling-and-quantization.md
한 줄 답
Loudness는 사람이 인지하는 음량이고, 단위는 LUFS(Loudness Units relative to Full Scale). 측정 표준은 ITU-R BS.1770 (K-weighting + gating) 이고, 운영 표준은 EBU R128 (-23 LUFS, ±1 LU 허용) 이다. 스트리밍 시대 들어 플랫폼별 타깃이 분화됐다 — Spotify/YouTube -14, Apple Podcasts -16, 방송 -23.
Why — 왜 dBFS가 아닌 LUFS인가
전통적인 dBFS(decibels relative to Full Scale)는 신호의 절대 진폭을 잰다. 그런데 사람의 귀는:
- 주파수마다 민감도가 다르다 (3~5 kHz에서 가장 민감, 50 Hz 미만에선 둔감) → Equal-loudness contour
- 스테레오/멀티채널은 채널 합성으로 들린다 → 단순 평균이 아님
- 순간 피크가 아니라 평균 에너지로 음량을 인지 → 적분 시간 필요
- 너무 작은 부분(silence)은 평균에서 제외해야 음악적 음량과 맞음
그래서 사람의 청각 모델을 적용한 측정법이 필요했다 → ITU-R BS.1770 (2006) → EBU R128 (2010).
How — 측정의 4단계
1) K-weighting filter — 청각 가중
두 단의 IIR 필터:
- Stage 1: Pre-filter (high-shelf, ~1681 Hz +4dB) — 머리 회절 보상
- Stage 2: RLB (high-pass, 38 Hz) — 저주파 둔감 보상
→ “사람 귀가 듣는 신호”에 가깝게 변환된 후 에너지를 측정.
2) Channel weighting — 채널별 가중치
| 채널 | 가중치 |
|---|---|
| L, R, C | 1.0 |
| Ls, Rs (surround) | 1.41 (= +1.5 dB) |
| LFE | 0.0 (제외) |
서라운드는 직접 음원이 아니라 잔향이라는 가정으로 +1.5dB 보정. LFE는 인지 음량에 거의 기여 안 함.
3) Gating — 작은 구간 제외
Absolute gate: -70 LUFS 미만 구간 제외 (사실상 무음). Relative gate: 1차 평균 대비 -10 LU 미만 구간을 다시 제외.
→ 영화/드라마처럼 무음 구간이 긴 콘텐츠도 음악적으로 일관된 평균이 나옴.
4) 적분 윈도우 3종
| 측정 | 윈도우 | 용도 |
|---|---|---|
| Momentary (M) | 400 ms | 실시간 미터링, 클리핑 위험 감지 |
| Short-term (S) | 3 s | 광고 vs 본방송 비교, 음향감독 모니터링 |
| Integrated (I) | 전체 (gating 적용) | 콘텐츠 전체 평균, 정규화 기준 |
What — 단위, 표준치, 명령어
단위 정리
| 단위 | 의미 |
|---|---|
| dBFS | Decibels relative to Full Scale (절대 진폭, 0이 max) |
| LUFS | Loudness Units relative to Full Scale (지각 음량, 절대값) |
| LU | Loudness Unit (LUFS 차이값, 상대) |
| LRA | Loudness Range (콘텐츠의 동적 범위, S-LUFS의 95th - 10th 백분위) |
| dBTP | Decibels True Peak (인터샘플 오버슈트 포함 피크) |
→ “1 LU = 1 dB”이지만 LUFS는 절대값, LU는 차이값. 마치 °C와 K 같은 관계.
플랫폼별 LUFS 타깃
| 플랫폼 | Integrated LUFS | True Peak | 비고 |
|---|---|---|---|
| EBU R128 (방송) | -23 LUFS | -1 dBTP | TV, 라디오 (유럽) |
| ATSC A/85 (방송) | -24 LKFS (= -24 LUFS) | -2 dBTP | TV (미국) |
| Spotify | -14 LUFS | -1 dBTP | normalize ON 시 |
| Spotify (loud) | -11 LUFS | -1 dBTP | ”loud” 설정 |
| YouTube | -14 LUFS | -1 dBTP | 자동 정규화 |
| Apple Music | -16 LUFS | -1 dBTP | Sound Check ON |
| Apple Podcasts | -16 LUFS | -1 dBTP | mono → -19, stereo → -16 |
| Tidal | -14 LUFS | -1 dBTP | |
| Amazon Music | -14 LUFS | -2 dBTP | |
| Netflix | -27 LKFS | -2 dBTP | dialog-anchored loudness |
| Deezer | -15 LUFS | -1 dBTP | |
| SoundCloud | -14 LUFS (권장) | - | normalize 없음 |
핵심 인사이트: 음원은 -14 LUFS 근처, 팟캐스트는 -16 LUFS 근처, 방송은 -23 LUFS 근처. 이 세 클러스터를 외우자.
True Peak (dBTP) — 클리핑과 다른 개념
샘플과 샘플 사이의 보간 함수가 디지털 max를 넘는 현상 = inter-sample peak / true peak overshoot.
→ 디지털에서 -0.5 dBFS이어도 D/A 변환 후 클리핑이 들릴 수 있다. → 표준은 4× 또는 16× 오버샘플링 후 측정한 피크. → 마스터링 시 -1 dBTP 리미터가 안전 마진.
ffmpeg ebur128 사용법
# 기본 측정 — 한 번에 I/M/S/LRA/Peak 추출
ffmpeg -i input.wav -af ebur128=peak=true -f null -
# 출력 예시 (stderr)
# [Parsed_ebur128_0 @ 0x...] Summary:
#
# Integrated loudness:
# I: -16.3 LUFS
# Threshold: -26.5 LUFS
#
# Loudness range:
# LRA: 8.2 LU
# Threshold: -36.5 LUFS
# LRA low: -22.0 LUFS
# LRA high: -13.8 LUFS
#
# True peak:
# Peak: -1.0 dBTP
# Pop: -1.0 dBTP# Two-pass 정규화 (정확) — 먼저 측정, 그 다음 보정
ffmpeg -i input.wav -af loudnorm=I=-14:TP=-1:LRA=11:print_format=json -f null - 2>&1 | \
tee /tmp/loudness.json
# 1-pass dynamic 정규화 (라이브용, 정확도 약간 떨어짐)
ffmpeg -i input.wav -af loudnorm=I=-14:TP=-1:LRA=11 output.wav
# 측정값을 다음 패스에 input으로 — 진짜 정확한 정규화
ffmpeg -i input.wav -af "loudnorm=I=-14:TP=-1:LRA=11:\
measured_I=-23.5:measured_TP=-3.2:measured_LRA=11.5:measured_thresh=-34.6:\
linear=true" output_normalized.wavloudness.json 산출물 예시
실무에서 ebur128 측정 결과를 다음과 같은 JSON으로 정형화한다:
{
"integrated": -16.3,
"truePeak": -1.0,
"range": 8.2,
"threshold": -26.5,
"momentaryLufs": [
{ "t": 0.0, "M": -70.0 },
{ "t": 0.5, "M": -22.1 },
{ "t": 1.0, "M": -18.4 },
{ "t": 1.5, "M": -16.7 }
]
}momentaryLufs[]는 0.5초 간격 sampling으로 충분 (UI에 시각화할 때 60Hz 스크롤 부드러움).
What-if — 잘못 다루면 어떻게 깨지는가
1. “Loudness War” — 음원이 0 dBFS에 붙음
19902010년대 “더 크게 = 더 좋게”라는 마케팅 압박으로 마스터링 단계에서 헤비 컴프레션 + 리미팅으로 평균 음량이 -7-9 LUFS까지 올라감.
→ 다이내믹 레인지 소실, 청각 피로, 디스토션 증가.
스트리밍이 LUFS 정규화를 도입하며 (~2014) 음원이 -14 LUFS보다 크면 자동으로 깎인다 → 이제 헤비 컴프레션은 손해.
2. 라디오 마스터를 스트리밍에 그대로
-23 LUFS 마스터를 Spotify에 올리면 다른 트랙(-14)보다 9 dB 작게 들린다. 사용자가 볼륨을 올리면 다이내믹 레인지가 살지만, 평균적으로 “조용한 곡”으로 인식되어 플레이리스트에서 밀린다.
해결: 마스터를 -14 LUFS로 따로 만들기 또는 플랫폼에 -16~-14로 업로드.
3. True Peak 무시
“디지털에서 -0.1 dBFS이니까 클리핑 없음”이라고 안심하면 안 된다. MP3/AAC 인코딩 후 인터샘플 피크가 +0.5 dBTP까지 올라간다.
해결: 마스터링 마지막 단계에 True Peak Limiter (-1 dBTP) + 인코딩 후 재측정.
4. Mono 콘텐츠에 stereo loudness 기준
Apple Podcasts는 mono와 stereo 타깃이 다르다 (-19 vs -16). mono를 stereo 기준에 맞추면 너무 작게 들린다 (사람은 stereo가 mono보다 ~3dB 크게 들리는 경향).
5. Real-time 정규화의 부정확성
라이브 스트림에서 1-pass loudnorm을 쓰면 시작 부분의 적분이 안정되기 전 약 5초간 정규화가 부정확하다 → 첫 5초가 들쭉날쭉.
해결: 인트로 + 5초 silence padding 또는 라이브 한정 -14 ± 2 LUFS 허용.
6. LRA를 무시하고 정규화
LRA 18 LU짜리 클래식 음원을 LRA 7 LU로 강제 압축하면 fortissimo와 pianissimo의 차이가 사라진다 → 음악 표현 손실.
해결: loudnorm=LRA=18처럼 원본 LRA를 유지.
Insight — 흥미로운 이야기
“Loudness War의 끝을 LUFS가 막았다”
Metallica의 〈Death Magnetic〉(2008)은 평균 -8 LUFS로 마스터링되어 클리핑 곡선이 사각파에 가까웠다. 팬들이 항의했지만 라디오/CD 시대엔 “더 크게”가 정답이었다. 2014년 Spotify가 LUFS 정규화를 도입하며 게임의 룰이 바뀜. 이제 -8 LUFS로 마스터링해도 Spotify가 -14로 깎아 재생 → 헤비 컴프레션의 동기 사라짐. 결과: 2020년대 음원의 평균 LRA가 다시 늘어남 (loudness war의 종식).
“R128의 -23 LUFS는 어떻게 정해졌는가”
2010년 EBU(유럽 방송 연합)가 영화·드라마·광고·뉴스의 음량 격차를 잡으려고 만든 표준. -23은 광고가 본방송보다 시끄럽다는 시청자 불만의 직접적 결과 — 광고가 본방과 ±1 LU 안에 있어야 한다는 강제 규정. 미국은 ATSC A/85 (-24 LKFS), 일본은 ARIB TR-B32 (-24 LKFS) — 거의 같은 값으로 수렴.
“왜 Spotify는 -14, 방송은 -23인가”
차이의 9 dB는 헤드룸이다. 방송은 광고·뉴스·드라마·콘서트가 같은 채널에서 흘러나오므로 다이내믹 여유가 필요. 음악 스트리밍은 트랙 단위 재생이라 -14에 가까이 압축해도 다이내믹이 트랙 안에서 살아있음. → 같은 LUFS 표준이지만 콘텐츠의 다이내믹 요구가 타깃을 정한다.
“K-weighting의 K는 무슨 K인가”
“K”는 정확한 의미가 없다 (특정 문자가 아닌 알파벳 시리즈의 한 자). ITU-R BS.1770 작업 중 A, B, C, … J 가중 곡선이 다 쓰였고 11번째가 K였다. 사실상 의미는 “Kombined high-shelf + RLB”라고 농담처럼 쓴다.
“Netflix는 왜 -27 LKFS인가 (그것도 dialog 기준)”
Netflix는 영화/드라마 위주라 dialog가 들리는 음량이 기준. Atmos는 효과음·앰비언스가 매우 큰데 dialog가 묻히면 시청자가 “안 들린다”고 항의 → dialog만 측정하는 dialog-anchored loudness 개발 (Dolby Dialog Intelligence). 결과 -27 LKFS dialog 기준 = R128 -23 program 기준과 거의 같은 체감 음량.
한 단락 요약 + Mermaid
Loudness는 사람이 인지하는 음량의 정량화이고, 단위는 LUFS, 측정은 K-weighting + gating + 채널 가중. 단일 표준(EBU R128 -23)이 스트리밍 시대 분화 (-14 음원 / -16 팟캐스트 / -23 방송). True Peak는 클리핑과 다른 개념으로 인터샘플 오버슈트를 잡는 안전망. 측정·정규화는 ffmpeg
ebur128+loudnorm조합으로 2-pass가 정답.