한국어 AI 음성에서 문장 사이 쉼을 문장부호로만 맞추기는 어려웠습니다. 같은 두 문장 사이를 마침표·쉼표·말줄임표로만 바꿔 두 번씩 만들었더니, 쉼표가 두 번 모두 가장 짧았던 것 말고는 순서가 바뀌었습니다. 말줄임표는 처음에 0.99초 쉬었지만 다시 만들었을 때는 0.27초였습니다. 원하는 길이가 정해져 있다면, 이번 시험에서는 편집 단계에서 무음을 직접 넣는 쪽이 정확했습니다.
어떤 질문을 확인했나요?
쇼츠 내레이션을 만들다 보면 문장 사이가 너무 붙어서 숨 쉴 틈이 없거나, 반대로 어색하게 길게 끊기는 경우가 있습니다. 대본의 문장부호만 바꿔서 이 쉼을 조절할 수 있는지, 그리고 같은 대본을 다시 만들면 쉼이 같게 나오는지를 확인했습니다. 어제 글 TTS 대본에 ’11시’로 쓸까 ‘열한 시’로 쓸까와 같은 로컬 음성 환경에서, 이번에는 문장부호 하나만 바꿨습니다.
어떻게 시험했나요?
- 대본: “렌더링을 마친 뒤 자막 파일을 다시 열었습니다 ○ 마지막 문장의 끝 시간이 화면보다 조금 늦었습니다.” ○ 자리만 바꿨습니다.
- A판은 마침표(.), B판은 쉼표(,), C판은 말줄임표(…)입니다. 나머지 글자는 같습니다.
- 음성: 로컬 VoxCPM2(무료 오픈 모델, CPU, 같은 설정)로 판마다 2회 합성했습니다(1회차, 2회차). 모두 같은 합성 내레이터 참조음성을 썼습니다(실존 인물 목소리가 아닌 AI 합성 음성).
- 쉼 길이: FFmpeg silencedetect로 -35dB보다 조용한 구간 중 0.12초 이상을 찾고, 두 문장의 자막 경계에 걸친 구간을 ‘문장 사이 쉼’으로 잡았습니다.
- 자막: 로컬 Whisper large-v3-turbo로 한국어 지정, 후편집 없이 받아 적었습니다.
쉼은 얼마나 나왔나요?
| 문장부호 | 1회차 문장 사이 쉼 | 2회차 문장 사이 쉼 | 전체 길이(1회차 / 2회차) |
|---|---|---|---|
| A 마침표 | 0.621초 | 0.368초 | 6.56초 / 6.24초 |
| B 쉼표 | 0.295초 | 0.161초 | 5.92초 / 6.08초 |
| C 말줄임표 | 0.992초 | 0.273초 | 6.88초 / 6.40초 |
1회차만 보면 말줄임표 > 마침표 > 쉼표 순으로 깔끔하게 길어졌습니다. 그런데 2회차에서는 마침표 0.368초, 말줄임표 0.273초, 쉼표 0.161초로 말줄임표와 마침표의 순서가 뒤집혔습니다. 두 번 모두 같았던 것은 쉼표가 가장 짧았다는 점뿐입니다. 2회차에서는 문장 안에서도 0.12~0.25초짜리 짧은 끊김이 판마다 2~3곳 잡혔습니다(1회차에는 말줄임표 판의 0.121초 한 곳뿐).
자막에는 문장부호 차이가 보였나요?
보이지 않았습니다. 여섯 개 파일 모두 자막이 두 줄로 나뉘었고, 첫 줄은 모두 ‘렌더링을 마친 뒤 자막 파일을 다시 열었습니다.’처럼 마침표로 끝났습니다. 쉼표로 쓴 B판도 자막에서는 마침표로 바뀌었습니다. 그래서 자막을 보고 대본에 어떤 문장부호를 썼는지, 쉼이 얼마나 길었는지는 알 수 없습니다. 몇몇 파일에서는 ‘끝 시간’이 ‘끝시간’으로 붙어 나왔습니다.
정확한 쉼은 어떻게 맞췄나요?
1회차 B판(쉼표, 쉼 0.295초)을 문장 사이 2.866초 지점에서 자르고, 그 사이에 0.5초 무음을 넣었습니다.
ffmpeg -i B-comma.wav -f lavfi -t 0.5 -i anullsrc=r=48000:cl=mono \
-filter_complex "[0:a]atrim=0:2.866,asetpts=PTS-STARTPTS[a];[0:a]atrim=2.866,asetpts=PTS-STARTPTS[b];[a][1:a][b]concat=n=3:v=0:a=1[o]" \
-map "[o]" B-comma-plus500ms.wav
다시 재 보니 문장 사이 쉼은 0.795초로, 원래 0.295초에 넣은 0.5초가 그대로 더해졌습니다. 전체 길이는 5.92초에서 6.42초가 됐습니다. 무음은 원본과 같은 48000Hz 모노로 만들었습니다.
다른 TTS 서비스는 어떻게 안내하나요?
ElevenLabs 공식 가이드는 일부 모델에서 <break time="1.5s" /> 같은 태그로 최대 3초까지 쉼을 넣을 수 있다고 안내합니다. 다만 Eleven v3·v4는 이 SSML break 태그를 지원하지 않고, 대시(-, —)나 말줄임표(…)는 대안이지만 일관성이 떨어진다고 적혀 있습니다(2026년 10월 24일 다시 확인). 이번 VoxCPM2 결과에서 말줄임표가 크게 흔들린 것과 방향은 비슷하지만, ElevenLabs에서 같은 숫자가 나온다는 뜻은 아니며 우리가 ElevenLabs로 시험한 것도 아닙니다. 출처: ElevenLabs — Text to Speech best practices.
이 결과로 말할 수 없는 것
- 판마다 2회씩, 모두 6개 파일의 결과입니다. 쉼 길이의 평균이나 범위를 말하기에는 표본이 작습니다.
- 쉼은 -35dB·0.12초 기준의 측정값입니다. 기준을 바꾸면 숫자가 달라질 수 있고, 사람이 듣기에 자연스러운지는 이 글에서 판정하지 않았습니다.
- 로컬 음성 모델 1개, 참조음성 1개, 문장 1쌍만 시험했습니다. 다른 모델·목소리·문장 길이에서도 같다고 말할 수 없습니다.
- 2회차에서 쉼이 짧아진 이유(합성의 무작위성 등)는 따로 분리하지 않았습니다.
따라 해 볼 순서
- 쉼 길이가 중요한 문장 경계를 대본에 표시합니다.
- 문장부호는 자연스러운 억양용으로만 쓰고, 같은 대본을 최소 두 번 만들어 쉼이 비슷한지 봅니다.
- FFmpeg silencedetect(예: -35dB, 0.12초)로 문장 사이 쉼을 재고, 자막 경계와 맞대어 어느 구간인지 확인합니다.
- 모자란 만큼만 같은 샘플레이트의 무음을 문장 사이에 넣고 다시 잽니다.
- 최종본을 직접 들어 쉼이 어색하지 않은지 확인합니다.
자주 묻는 질문
말줄임표를 쓰면 더 길게 쉬나요?
이번 시험에서는 한 번은 0.992초로 가장 길었지만, 다시 만들었을 때는 0.273초로 마침표보다 짧았습니다. 말줄임표가 늘 길게 쉰다고 믿고 쓰기는 어려웠습니다.
쉼표로 바꾸면 문장이 더 붙나요?
두 번 모두 쉼표가 가장 짧았습니다(0.295초, 0.161초). 문장 사이를 붙이고 싶을 때 쉼표가 도움이 될 수는 있지만, 표본이 두 번뿐이라 늘 그렇다고 말할 수는 없습니다.