문제별 점검 찾기 · 전체 글

내레이션 무음 자동 컷, -50·-40·-30·-20dB 중 어디까지 줄일까: 21초 음성이 1.2~3.6초 줄었고 -20dB에선 ‘탐사팀’이 ‘3사팀’으로 바뀌었습니다

· 게시

· 수정

알림: 이 글에는 제휴(수수료) 링크가 없습니다. 측정한 음성은 저희가 로컬 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 같은 다른 옵션은 바꿔 보지 않았습니다.

따라 해 보기

  1. 원본 쉼 재기: ffmpeg -i voice.wav -af silencedetect=noise=-50dB:d=0.3 -f null - 실행 후 silence_duration을 더합니다.
  2. 쉼 줄이기: ffmpeg -i voice.wav -af "silenceremove=stop_periods=-1:stop_duration=0.3:stop_threshold=-30dB:stop_silence=0.1" cut.wav
  3. 길이 비교: ffprobe -v error -show_entries format=duration -of csv=p=0 cut.wav로 줄어든 길이를 구해, 1번의 쉼 합계보다 크면 임계값을 낮춥니다(-30 → -40dB).
  4. 잘린 파일로 자막을 다시 만들어 원본 자막과 비교하고, 마지막으로 처음부터 끝까지 들어 봅니다.

자주 묻는 질문

임계값을 높일수록(-20dB 쪽) 더 많이 줄어드나요?
이 측정에서는 그랬습니다. -50dB 1.24초에서 -20dB 3.56초까지 늘었지만, -20dB에서는 쉼 합계보다 더 잘렸고 ‘탐사팀’이 ‘3사팀’으로 바뀌었습니다.

자막이 같으면 말이 안 잘린 건가요?
그렇게 단정할 수 없습니다. 이 측정에서는 자막 오류 수가 잘린 정도와 함께 움직이지 않았습니다. 길이 비교와 직접 듣기를 같이 하세요.

확인한 출처

관련 글: FFmpeg가 무음이라고 했는데 파형이 있나요? -45·-35·-25dB 기준 비교 · 한국어 자막, Whisper 작은 모델로 충분할까

분류:

작성·정정 안내

이 글의 원측정 날짜·파일 조건과 설명용 예제를 구분해 읽어 주세요. 작성·검토 방식 · 오류 제보·정정 요청