알림: 이 글에는 수수료(제휴) 링크가 없습니다. 측정한 15편은 모두 저희가 AI 도구로 직접 만든 짧은 영상이고, 이 글은 AI의 도움을 받아 초안을 쓴 뒤 2026년 10월 30일 측정 파일과 대조했습니다. 어떤 도구 회사도 제공하거나 검토하지 않았습니다.
저희가 만든 세로 쇼츠 완성본 15편의 소리를 통합 음량 -14 LUFS, 트루피크 -1 dBTP 기준으로 쟀습니다. 15편 중 12편은 이미 기준에서 1 LU 안이었고, 기준 밖 3편은 모두 더 작았습니다(-17.9, -16.1, -39.3 LUFS). 15편 전부에 FFmpeg loudnorm을 걸어 보니 1회 보정은 목표에서 최대 3.4 LU 빗나갔고, 측정값을 넣는 2회 보정도 4편에서 0.9~1.5 LU 빗나갔습니다. 그 4편은 모두 loudnorm이 선형 대신 동적 모드로 바꿔 처리한 파일이었습니다.
어떤 문제였나요
AI 음성·배경음악·생성 영상을 여러 도구에서 가져와 쇼츠를 만들면 완성본마다 소리 크기가 달라집니다. 흔한 해결책이 FFmpeg의 loudnorm 명령 하나입니다. 저희 완성본이 실제로 얼마나 어긋나 있었는지, 그리고 loudnorm을 한 번 거는 방식과 측정값을 넣어 두 번 거는 방식이 정말 요청한 숫자에 맞춰 주는지 확인하고 싶었습니다.
이렇게 쟀습니다
- 대상: 2026년 10월 4일~27일에 만든 세로 쇼츠 MP4 15편(상품 설명, 과학 해설, 어린이 만화, AI 캐릭터 영상). 공개한 것도 있고 내부 버전도 있습니다. 길이 8.0~49.2초, AAC 오디오, 대부분 48kHz 모노입니다.
- 측정: FFmpeg 9.0.1의
ebur128필터(트루피크 켬)로 통합 음량(LUFS), 음량 범위(LRA, LU), 트루피크(dBTP)를 읽었습니다. - 목표: -14 LUFS, 트루피크 -1 dBTP, LRA 11. -14 LUFS는 온라인 영상에서 흔히 쓰는 값이라 저희 내보내기 목표로 정한 것이고, 각 플랫폼이 업로드 파일을 어떻게 처리하는지는 재지 않았습니다.
- 1회 보정:
loudnorm=I=-14:TP=-1:LRA=11. 2회 보정: 첫 실행에서print_format=json으로 측정값을 받고, 그 값을 다시 넣어linear=true로 실행했습니다. - 보정한 결과는 WAV로 저장해 같은
ebur128필터로 다시 쟀습니다. 15편 전체가 노트북 1대에서 약 25초 걸렸습니다.
결과
| 파일 | 길이(초) | 보정 전 LUFS | 보정 전 LRA | 보정 전 dBTP | 1회 보정 LUFS | 2회 보정 LUFS | 2회 보정 dBTP | loudnorm 처리 모드 |
|---|---|---|---|---|---|---|---|---|
| 1. 시험 편집본 | 18.2 | -14.8 | 1.1 | -2.0 | -13.9 | -14.1 | -1.2 | 선형 |
| 2. 스포츠 해설 쇼츠 | 24.5 | -17.9 | 2.9 | -1.2 | -15.6 | -15.0 | -1.0 | 동적 |
| 3. 상품 쇼츠(퀴즈형) | 29.2 | -14.2 | 2.8 | -2.0 | -14.2 | -13.9 | -1.6 | 선형 |
| 4. 상품 쇼츠(레시피형) | 20.3 | -14.7 | 3.1 | -2.0 | -13.6 | -14.0 | -1.2 | 선형 |
| 5. AI 도구 목록 쇼츠 | 49.2 | -14.5 | 4.6 | -1.9 | -14.5 | -13.9 | -1.3 | 선형 |
| 6. 상품 쇼츠(eSIM) | 31.5 | -14.0 | 1.4 | -2.4 | -14.2 | -13.9 | -2.3 | 선형 |
| 7. AI 캐릭터 클립 | 8.0 | -39.3 | 5.9 | -15.9 | -17.4 | -15.5 | -0.8 | 동적 |
| 8. 어린이 만화 에피소드 | 15.0 | -14.3 | 4.3 | -1.5 | -14.4 | -14.0 | -1.0 | 동적 |
| 9. 상품 쇼츠(배송비) | 23.7 | -15.0 | 2.6 | -1.8 | -13.9 | -13.9 | -0.8 | 동적 |
| 10. AI 캐릭터 쇼츠 | 17.1 | -13.3 | 17.8 | 0.0 | -15.0 | -12.8 | -1.0 | 동적 |
| 11. 과학 쇼츠(속구) | 24.5 | -14.2 | 1.8 | -2.4 | -14.0 | -13.9 | -2.1 | 선형 |
| 12. 과학 쇼츠(심해) | 22.0 | -14.1 | 1.7 | -2.2 | -14.1 | -13.8 | -2.0 | 선형 |
| 13. 과학 쇼츠(물) | 20.5 | -16.1 | 2.2 | -1.5 | -14.3 | -14.1 | -1.0 | 동적 |
| 14. 과학 쇼츠(심해 2) | 21.5 | -14.1 | 2.6 | -1.5 | -14.0 | -13.9 | -1.3 | 선형 |
| 15. AI 캐릭터 쇼츠 2 | 10.0 | -14.4 | 20.0 | -2.3 | -15.0 | -14.9 | -1.0 | 동적 |
눈에 띈 점
- 대부분은 이미 가까웠습니다. 15편 중 12편이 보정 전부터 -14 LUFS에서 1 LU 안, 8편은 0.5 LU 안이었습니다.
- 문제는 작은 소리였습니다. 2번은 3.9 LU, 13번은 2.1 LU 작았고, 8초짜리 AI 캐릭터 클립인 7번은 -39.3 LUFS로 목표보다 약 25 LU 작았습니다.
- 트루피크 0.0 dBTP인 파일이 1편 있었습니다. 10번은 트루피크 0.0 dBTP에 음량 범위 17.8 LU로, 다른 파일들(대부분 1~5 LU)보다 훨씬 넓었습니다.
- 1회 보정은 항상 맞지는 않았습니다. 15편 중 11편이 -14에서 0.5 LU 안에 들어왔습니다. 가장 크게 빗나간 것은 7번(-17.4 LUFS, 3.4 LU 부족)이었고, 2·10·15번은 -15.0~-15.6이었습니다.
- 2회 보정이 더 가까웠지만 정확하지는 않았습니다. 역시 11편이 0.5 LU 안이었습니다. 벗어난 4편(2·7·10·15번, 0.9~1.5 LU 차이)은 선형을 요청했는데도 loudnorm이 동적 모드로 처리한 파일이었습니다. FFmpeg 문서에 따르면 원본 음량 범위가 목표 LRA보다 넓거나, 필요한 증폭이 트루피크 한도를 넘게 만들면 선형 모드가 동적 모드로 바뀝니다. 7번은 약 25dB 증폭이 필요했고, 10·15번은 음량 범위가 17.8·20.0 LU로 목표 11보다 넓었습니다. 15편 중 7편이 동적 모드로 처리됐습니다.
- 트루피크 한도를 넘은 결과가 2편 있었습니다. 2회 보정한 7번과 9번은 -0.8 dBTP로, 요청한 -1 dBTP보다 높았습니다.
- 동적 모드는 소리의 폭도 바꿨습니다. 15번은 음량 범위가 20.0 LU에서 8.7 LU로 줄었습니다. 이것이 듣기에 좋은지 나쁜지는 직접 들어 보는 평가를 하지 않아 알 수 없습니다.
그래서 저희는
저희 작업에서는 중간 파일이 아니라 최종 내보낸 MP4를 잽니다. loudnorm은 2회 방식으로 쓰고, 실행 뒤 출력에 linear로 나왔는지 dynamic으로 나왔는지 확인합니다. 동적으로 나오면 목표에 맞았다고 가정하지 않고 결과 파일을 다시 잽니다. 7번처럼 25 LU나 작은 파일은 필터로 크게 키우기보다 편집 단계에서 음성·음악 크기를 먼저 고치기로 했습니다.
한계
- 한 팀 작업 방식의 15편이고, 대부분 음성+음악 구성이 비슷합니다. 다른 종류의 소리는 다르게 나올 수 있습니다.
- 보정 결과 WAV를 쟀고, 다시 AAC로 MP4에 넣은 뒤의 값은 재지 않았습니다. 이 단계에서 트루피크가 다시 바뀔 수 있다는 점은 이전 측정 글에서 다뤘습니다.
- 숫자만 쟀고, 사람이 듣고 평가하지 않았습니다.
- 유튜브·인스타그램·틱톡은 업로드 뒤 자체 음량 처리를 합니다. 실제 재생 음량은 재지 않았습니다.
- 파일마다 1회, 노트북 1대에서 측정했습니다.
따라 해 보기
- 측정:
ffmpeg -nostats -i final.mp4 -vn -af ebur128=peak=true -f null -실행 후 마지막 Summary 부분을 읽습니다. - 1차 측정:
ffmpeg -i final.mp4 -vn -af loudnorm=I=-14:TP=-1:LRA=11:print_format=json -f null - - 2차 보정: 출력된
input_i,input_tp,input_lra,input_thresh,target_offset을measured_I,measured_TP,measured_LRA,measured_thresh,offset에 넣고linear=true:print_format=json을 붙여 실행합니다. - 출력의
normalization_type이 dynamic이면 결과 파일을 1번 명령으로 다시 잽니다.
자주 묻는 질문
loudnorm을 한 번만 걸면 충분한가요?
이 측정에서는 15편 중 11편이 목표에서 0.5 LU 안에 들어왔지만, 가장 크게 빗나간 파일은 3.4 LU 부족했습니다.
2회 보정이면 항상 목표에 맞나요?
아니었습니다. 동적 모드로 바뀐 4편은 목표에서 0.9~1.5 LU 벗어났고, 2편은 트루피크가 -0.8 dBTP로 한도보다 높았습니다.
확인한 출처
- FFmpeg 필터 문서: loudnorm(선형 모드와 동적 모드로 바뀌는 조건), 2026년 10월 30일 확인
- FFmpeg 필터 문서: ebur128, 2026년 10월 30일 확인
이어서 확인할 내용
- 음량을 보정한 뒤 MP4로 내보냈다면: WAV·AAC·MP4의 트루피크를 비교한 이전 측정을 참고하세요. 이번 글은 보정한 WAV까지만 측정했으므로, 최종 MP4도 본문의 측정 명령으로 다시 확인해야 합니다.
- 음량을 확인한 뒤 파일 용량과 화질을 조정하려면: 쇼츠 내보내기 CRF 18·23·28·33 비교에서 같은 제작 흐름의 다음 문제를 살펴볼 수 있습니다.