알림: 이 글에는 제휴(수수료) 링크가 없습니다. 측정한 음성은 저희가 로컬 AI 음성 합성으로 직접 만든 쇼츠 내레이션이고, 이 글은 AI의 도움을 받아 초안을 쓴 뒤 2026년 10월 31일 측정 파일과 대조했습니다. 어떤 도구 회사도 제공하거나 검토하지 않았습니다.
저희가 만든 21.12초짜리 한국어 내레이션에서 쉼을 FFmpeg silenceremove로 자동으로 줄여 봤습니다. 소리 크기 기준(임계값)을 -50·-40·-30·-20dB로 바꾸자 길이가 1.2초, 1.3초, 1.6초, 3.6초 줄었습니다. Whisper 자막 오류는 -50~-30dB에서 108자 중 2~4자(원본 2자)였지만, -20dB에서는 ‘탐사팀’이 ‘3사팀’으로 바뀌었습니다. -20dB에서는 쉼으로 잡힌 구간 합계보다 0.42초 더 잘려 나갔습니다.
어떤 문제였나요
쇼츠는 몇 초가 아깝습니다. AI 음성은 문장 사이 쉼이 길게 나올 때가 많아서, 편집할 때 무음을 자동으로 잘라 내면 영상이 빨라집니다. 그런데 기준을 너무 세게 잡으면 말끝이나 첫 자음까지 잘릴 수 있습니다. 같은 음성에서 기준만 바꿨을 때 몇 초가 줄어드는지, 그리고 그때 자막(음성 인식) 결과가 달라지는지 확인하고 싶었습니다.
이렇게 쟀습니다
- 대상: 2026년 10월 22일 저희가 로컬 음성 합성(VoxCPM2)으로 만든 과학 쇼츠 내레이션 WAV 1개, 21.12초, 4문장. 새로 합성하지 않고 보관해 둔 파일을 그대로 썼습니다.
- 바꾼 것 하나:
silenceremove의stop_threshold를 -50, -40, -30, -20dB로 바꿨습니다. 나머지는 고정했습니다:stop_periods=-1(중간 쉼 전부 대상),stop_duration=0.3,stop_silence=0,detection=rms,window=0.02. - 보완 1가지: -30dB에
stop_silence=0.1(쉼을 0.1초 남김)을 넣은 판도 따로 만들었습니다. - 결과 확인: 각 결과의 길이를 쟀고,
silencedetect(-50dB, 0.3초 이상)로 남은 쉼을 셌습니다. 자막은 Whisper large-v3-turbo(mlx, 한국어 지정, 프롬프트 없음)로 판마다 1번 만들었고, 원래 대본과 글자 단위로 비교했습니다(띄어쓰기·문장부호 제외 108자, 숫자는 2023년·3250m로 맞춤). - FFmpeg 9.0.1, 노트북 1대. 6개 판 처리와 자막 생성에 모두 합쳐 약 5초 걸렸습니다.
원본에 있던 쉼
원본에는 -50dB 기준으로 0.3초 이상 쉼이 5곳 있었고, 길이는 0.30, 0.90, 0.63, 0.34, 0.59초로 합계 2.77초였습니다. 같은 5곳을 -20dB 기준으로 재면 쉼의 앞뒤가 조금씩 넓어져 합계 3.14초였습니다.
결과
| 판 | 길이(초) | 줄어든 길이(초) | 남은 0.3초 이상 쉼(-50dB 기준) | 자막 오류(108자 중) | 원본과 다르게 적힌 부분 |
|---|---|---|---|---|---|
| 원본 | 21.12 | 0 | 5곳 | 2 | ‘말미잘이’→’말미자리’ |
| -50dB | 19.88 | 1.24 | 5곳(각 약 0.3초) | 4 | ‘심해’→’심의’ 2곳, ‘말미잘이’→’말미자리’ |
| -40dB | 19.78 | 1.34 | 1곳(0.30초) | 2 | ‘심해’→’심의’ 2곳, ‘말미잘이’는 바르게 |
| -30dB | 19.48 | 1.64 | 0곳 | 2 | ‘심해’→’심의’ 2곳, ‘말미잘이’는 바르게 |
| -20dB | 17.56 | 3.56 | 0곳 | 3 | ‘심해’→’심의’ 2곳, ‘탐사팀’→’3사팀’, ‘말미잘이’는 바르게 |
| -30dB + 0.1초 남김 | 19.98 | 1.14 | 5곳(0.30~0.36초) | 2 | ‘심해’→’심의’ 2곳, ‘말미잘이’는 바르게 |
눈에 띈 점
- -50~-30dB는 거의 쉼만 줄였습니다. 줄어든 길이 1.24~1.64초는 원본 쉼 합계 2.77초보다 작았습니다. -50dB에서는 쉼 5곳이 모두 약 0.3초씩 남았습니다. FFmpeg 문서는
stop_duration을 ‘복사를 멈추기 전에 있어야 하는 쉼의 길이’로 설명하는데, 측정에서도 쉼마다 그 길이(0.3초)만큼은 남고 나머지가 잘렸습니다. - -20dB는 쉼 이상을 잘랐습니다. 3.56초가 줄어, -20dB로 잰 쉼 합계 3.14초보다 0.42초 더 짧아졌습니다. 0.3초보다 짧은 조용한 부분이나 작은 소리의 말끝까지 잘린 것으로 보이며, 자막에서 ‘탐사팀’이 ‘3사팀’으로 바뀐 것도 이 판에서만 나왔습니다.
- 자막 오류 수는 잘린 정도를 잘 보여 주지 못했습니다. 원본도 2자가 틀렸고, -50dB 판은 오히려 4자로 늘었으며, -40·-30dB 판은 원본에서 틀린 ‘말미잘이’를 바르게 적었습니다. 판마다 1번씩만 돌렸기 때문에 1~2자 차이는 우연일 수 있습니다.
- ‘심해’가 ‘심의’로 바뀐 것은 자른 판에서만 나왔습니다. 원본 자막에는 없던 이 오류가 자른 판 5개 모두에서 2곳씩 나왔습니다. 판마다 1번만 돌려서 원인은 단정할 수 없습니다.
- 0.1초를 남기면 덜 줄었습니다. -30dB에서 0.1초를 남기자 줄어든 길이가 1.64초에서 1.14초로 줄었고, 0.3초 이상 쉼 5곳이 0.30~0.36초로 남았습니다.
그래서 저희는
저희 내레이션은 -30dB에서 쉼을 0.1초 남기는 설정으로 시작하기로 했습니다. -30dB는 이 음성에서 자막 오류 수를 원본과 같은 2자로 유지하면서 가장 많이 줄였고, 0.1초를 남기면 문장 사이가 완전히 붙지 않습니다. -20dB처럼 쉼 합계보다 더 많이 줄어드는 설정은 쓰지 않고, 줄어든 길이가 원래 쉼 합계보다 크면 말이 잘린 신호로 봅니다. 다만 사람이 듣고 평가하지는 않았기 때문에, 실제로 쓸 때는 잘린 파일을 반드시 처음부터 끝까지 들어 봅니다.
한계
- 음성 1개(21.12초, 합성 내레이터 1명, 배경음악 없음)만 쟀습니다. 배경음악이나 잡음이 섞인 음성, 사람 목소리는 다르게 나올 수 있습니다.
- 판마다 자막을 1번씩만 만들었습니다. 자막 오류 수는 잘림을 간접적으로 보여 줄 뿐, 말이 실제로 어떻게 들리는지는 확인하지 않았습니다.
- 사람이 듣고 자연스러운지 평가하지 않았습니다.
- 음성 WAV만 잘랐습니다. 영상과 함께 자르면 화면과 소리를 맞추는 편집이 따로 필요합니다.
stop_duration,detection같은 다른 옵션은 바꿔 보지 않았습니다.
따라 해 보기
- 원본 쉼 재기:
ffmpeg -i voice.wav -af silencedetect=noise=-50dB:d=0.3 -f null -실행 후silence_duration을 더합니다. - 쉼 줄이기:
ffmpeg -i voice.wav -af "silenceremove=stop_periods=-1:stop_duration=0.3:stop_threshold=-30dB:stop_silence=0.1" cut.wav - 길이 비교:
ffprobe -v error -show_entries format=duration -of csv=p=0 cut.wav로 줄어든 길이를 구해, 1번의 쉼 합계보다 크면 임계값을 낮춥니다(-30 → -40dB). - 잘린 파일로 자막을 다시 만들어 원본 자막과 비교하고, 마지막으로 처음부터 끝까지 들어 봅니다.
자주 묻는 질문
임계값을 높일수록(-20dB 쪽) 더 많이 줄어드나요?
이 측정에서는 그랬습니다. -50dB 1.24초에서 -20dB 3.56초까지 늘었지만, -20dB에서는 쉼 합계보다 더 잘렸고 ‘탐사팀’이 ‘3사팀’으로 바뀌었습니다.
자막이 같으면 말이 안 잘린 건가요?
그렇게 단정할 수 없습니다. 이 측정에서는 자막 오류 수가 잘린 정도와 함께 움직이지 않았습니다. 길이 비교와 직접 듣기를 같이 하세요.
확인한 출처
- FFmpeg 필터 문서: silenceremove, 2026년 10월 31일 확인
- FFmpeg 필터 문서: silencedetect, 2026년 10월 31일 확인
관련 글: FFmpeg가 무음이라고 했는데 파형이 있나요? -45·-35·-25dB 기준 비교 · 한국어 자막, Whisper 작은 모델로 충분할까