Communitygithub.com

자연스러운 음성

ElevenLabs 음성 해설이 로봇처럼 들리지 않고 사람처럼 들리도록 만듭니다. 스크립트를 귀에 맞게 다시 쓰고, 오디오 태그로 연출하고, 안정성과 속도를 설정하고, 시드를 생성한 후 가장 자연스러운 테이크를 선택합니다. TTS나 AI 음성 해설이 기계처럼 들리거나, 끊기거나, 감정이 없을 때, ElevenLabs용 음성 해설 스크립트를 작성할 때, 또는 긴 생성 비용을 지불하기 전에 사용하세요.

자연스러운 음성란 무엇인가요?

이 스킬은 ElevenLabs 음성 해설이 '로봇처럼' 들리는 근본 원인이 목소리 자체가 아니라 스크립트에 있다는 점을 해결합니다. 스크립트가 눈을 위해 작성되면(제목, 마침표로 끝나는 조각, 숫자, 대시) 모델이 그대로 읽어 끊기고 평평하게 들립니다. 제공된 세 가지 Python 도구(`speakable.py`, `takes.py`, `gaps.py`)를 사용하여 스크립트를 귀에 맞게 진단 및 다시 쓰고, 시드 기반 테이크를 생성하고, 문장 중간 공백을 기준으로 순위를 매깁니다. ElevenLabs v4의 오디오 태그([excited], [mischievously])를 활용하고, 안정성(0.30–0.40) 및 속도(1.0–1.08)와 같은 설정을 최적화하며, 무료 요청 이후에만 유료 API 호출을 실행하는 안전장치를 갖추고 있습니다. 또한 문장 부호, 축약, 연결어 등 인간의 음성 패턴에 맞는 스크립트 작성 규칙을 제시합니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/wael-wq/natural-voice-skill/tree/HEAD

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

자연스러운 음성은(는) 무엇을 하나요?

대부분의 '로봇 같은' ElevenLabs 음성 해설은 목소리 문제가 아니라 스크립트 문제입니다. 모델은 주어진 내용을 그대로 읽으며, 눈을 위해 작성된 스크립트(제목, 마침표로 끝나는 조각, 숫자, 대시)는 어떤 목소리가 읽더라도 끊기게 나옵니다.

이 폴더에 있는 세 가지 도구는 실제로 실행됩니다. 텍스트를 읽고 판단하지 말고 사용해보세요.

python3 speakable.py script.txt                  # 귀에 맞게 작성되었나요?
python3 takes.py script.txt --voice VOICE_ID     # 시드 기반 테이크 (유료, 먼저 물어봄)
python3 gaps.py takes/                           # 문장 중간 공백으로 테이크 순위 매기기

세 도구 모두 패키지 없이 Python 3.9+로 동작합니다. gaps.py는 PATH에 ffmpeg가 있으면 오디오 자체를 확인하여 공백을 검증합니다.

루프

1. 변경 전에 진단하세요. 이미 테이크가 있다면 gaps.py를 실행하세요. 문장 내부에서 0.2초 이상의 공백(쉼표나 마침표 뒤가 아닌)이 사람들이 'AI'라고 듣는 것입니다. 저희 이전 테이크에서는 'run' 앞에 0.3초, 'Instagram' 앞에 0.3초 공백이 있었는데, 이는 후크 중간에 있었습니다. 편집 과정에서 발생한 것이 아닙니다. 공백은 원시 파일에 있었습니다.

2. 귀에 맞게 다시 쓰세요. speakable.py를 실행하고 모든 플래그를 수정하세요. 규칙:

  • 문장, 제목 아님. "13 free Claude skills now run your Instagram."은 제목입니다. "Thirteen free Claude skills run your whole Instagram."은 사람이 말하는 방식입니다.
  • 목록은 쉼표, 마침표 아님. "Reels. Captions. Carousels."는 모델이 세 번 멈추게 합니다. "reels, captions, carousels, stories"는 흐릅니다.
  • 숫자는 글자로 말하는 줄에서: "eighty-four out of a hundred", "84 out of 100"이 아닙니다. 화면 텍스트는 숫자를 유지할 수 있습니다.
  • 축약형 (you've, it's, we'll). 아무도 큰 소리로 "you have"라고 말하지 않습니다.
  • 조각을 연결하세요 "so", "and", "then"으로. 연결어는 모델이 계속 진행하라는 신호입니다.
  • 대시 없음. ElevenLabs는 대시를 짧은 멈춤으로 취급하며 "덜 일관적"이라고 말합니다. 계속 진행하려면 쉼표를 사용하거나, 비트를 위해 줄임표를 사용하세요.
  • SSML 없음. <break time="1s"/>는 Eleven v4 또는 v3에서 지원되지 않습니다.

3. 연출하세요. Eleven v4는 대괄호 안에 오디오 태그를 사용합니다. 비트 시작 부분에 하나의 태그를 넣고, 모든 줄에 넣지 마세요. 태그가 해당 줄의 내용과 일치하는지 확인하세요. 전체 목록은 tags.md를 참조하세요. speakable.py는 알 수 없는 태그를 플래그로 표시합니다. 알 수 없는 태그는 음향 효과로 읽힐 수 있기 때문입니다.

[excited] Thirteen free Claude skills run your whole Instagram.
[mischievously] So we let it write this Reel...

문장 부호도 연출입니다. 줄임표는 무게감 있는 멈춤을, 느낌표는 에너지를, 대문자는 강조를 추가합니다(한 번만, 중요한 단어에 사용하세요).

4. 설정. eleven_v4에서:

설정사용값이유
stability0.30 ~ 0.40낮을수록 '더 넓은 감정 범위' 제공; 기본 0.5는 더 평평함. 0.3 미만은 테이크가 흔들릴 수 있음.
similarity_boost0.75기본값; 목소리 자체 유지
style0기본값; 다른 값은 지연 시간 추가
speed1.0 ~ 1.08허용 범위는 0.7~1.2; 소셜 음성 해설은 1 약간 위

5. 같은 텍스트, 다른 시드로 세 개의 테이크. 하나의 테이크는 동전 던지기입니다. takes.py를 시드 1, 2, 3으로 실행한 다음 gaps.py로 순위를 매기세요. 상위 두 개를 듣고 귀로 선택하세요. 시드를 보관하세요: 다시 실행했을 때 동일한 테이크에 가깝게 만듭니다(ElevenLabs는 '최선 노력'이라고 하며 보장되지 않습니다).

6. 부드럽게 편집하세요. 편집기가 무음을 자르는 경우, 문장 뒤에는 약 1초, 쉼표 뒤에는 대부분 1초를 유지하세요. 매번 동일한 짧은 길이로 잘린 멈춤은 기계처럼 들리는 또 다른 요소입니다.

7. 여전히 생성된 것처럼 들리나요? 더 이상 설정을 돌리지 마세요. 휴대폰에 해당 줄을 녹음하고 ElevenLabs의 Voice Changer(음성-음성)를 통해 원하는 목소리로 변환하세요. 당신의 타이밍, 강조, 감정이 그대로 전달됩니다. 목소리만 바뀝니다.

측정한 내용

저희 Reel 중 하나(examples/ 폴더에 파일 있음)에서:

이전이후
스크립트눈에 맞게 작성: 조각, 숫자귀에 맞게 작성: speakable.py 깔끔
태그없음[excited], [mischievously]
설정stability 0.5, speed 1.0stability 0.35, speed 1.05
테이크1개시드 3개, gaps.py로 순위 매긴 후 귀로 선택
speakable.py65점, 다시 쓰기 필요 (마침표로 된 목록, 숫자, 태그 없음)100점, 말하기 가능
문장 내부 공백후크에서 'now'와 'run' 사이 0.34초없음

목소리도 바뀌었습니다(Will에서 Chris로). 따라서 이는 하나의 설정을 테스트한 실험실 결과가 아닙니다. 스크립트 재작성이 우리가 들을 수 있는 가장 큰 차이를 만들었습니다.

규칙

  • 비용을 알리지 않고 유료 요청을 보내지 마세요. takes.py는 문자 수를 출력하고 --yes를 전달하지 않으면 중단됩니다.
  • API 키를 출력하거나 커밋하지 마세요. takes.py는 환경 변수 ELEVENLABS_API_KEY만 읽고 다른 것은 읽지 않습니다.
  • 레이블을 붙이세요. 음성이 생성된 경우 플랫폼의 AI 레이블을 켜세요.

관련 스킬