Communitygithub.com

iamaanahmad/voiceover-tts

텍스트-음성 변환(ElevenLabs, OpenAI TTS, Kokoro, Piper)을 사용하여 내레이션을 생성하고 타이밍을 조정하거나 녹음된 음성을 준비합니다. 스크립트 준비, 장면별 오디오 파일, 말하기 속도, 발음, 정리 및 음량 조절을 포함합니다. 사용자가 나레이션, 더빙 또는 음성 복제 안내가 필요할 때 사용합니다.

voiceover-tts란 무엇인가요?

이 스킬은 비디오 편집 및 콘텐츠 제작을 위한 텍스트-음성 변환(TTS) 및 음성 해설 워크플로우를 제공합니다. ElevenLabs(최고의 자연스러움 및 음성 복제), OpenAI TTS(간단하고 일관된), Kokoro(무료, 로컬, 고품질), Piper(빠름, CPU에서 실행) 또는 녹음된 인간 음성 등 여러 TTS 엔진을 지원하며 각각의 장단점을 명확히 설명합니다. 이 스킬은 스크립트를 음성에 맞게 준비하는 방법(숫자/약어 음성 표기, 쉼표/마침표 사용, 발음 목록 테스트), 장면별 오디오 파일을 생성하고 `ffprobe`로 지속 시간을 측정하며 분당 140-160 단어의 적절한 속도를 유지하는 방법을 안내합니다. 또한 `ffmpeg`를 사용한 녹음 음성 정리(하이패스 필터, 잡음 감소, 압축, 음량 정규화)와 침묵 제거, 0.4초 간격으로 오디오 파일을 결합하는 방법을 제공합니다. 윤리적 지침으로는 동의 없이 음성 복제 금지, 합성 음성 공개 의무, TTS 제공자 라이선스 확인을 강조합니다. 주요 도구: `requests`(API 호출), `ffprobe`, `ffmpeg`, 환경 변수 또는 `.env` 파일의 API 키 관리.

지원 대상~Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/iamaanahmad/agents-video-editing-skills/tree/HEAD/skills/voiceover-tts

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

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

문서

음성 해설 및 TTS

음성 해설은 타임라인을 주도합니다. 비주얼을 구축하기 전에 생성하세요.

엔진 선택

엔진위치강점주의사항
ElevenLabs클라우드 API최고의 자연스러움, 음성 복제유료, 동의 없이 복제 금지
OpenAI TTS클라우드 API간단하고 일관된제한된 음성 선택
Kokoro로컬무료, 고품질, 오프라인Python 설정 필요
Piper로컬빠름, CPU에서 실행덜 표현력 있음
녹음된 인간마이크가장 자연스러움정리 필요

API 키는 환경 변수 또는 git에서 무시되는 .env 파일에 보관하세요. 절대 출력하거나 커밋하지 마세요.

음성용 스크립트 준비

  • 숫자, 단위 및 약어는 발음대로 작성: "이천이십육", "A P I" (철자할 경우), "기가바이트".
  • 쉼표는 숨쉬기용, 마침표는 멈춤용으로 사용; 괄호는 피하세요.
  • 어려운 이름은 발음 목록에 넣고 짧은 샘플로 먼저 테스트하세요.
  • 장면당 하나의 파일(audio/scene-01.mp3)로 분할하세요. 장면별 파일을 사용하면 한 줄만 다시 녹음하고 타이밍을 유연하게 조정할 수 있습니다.

생성 (예시, ElevenLabs REST)

import os, requests, pathlib

def tts(text: str, voice_id: str, out: pathlib.Path) -> None:
    r = requests.post(
        f"https://api.elevenlabs.io/v1/text-to-speech/{voice_id}",
        headers={"xi-api-key": os.environ["ELEVENLABS_API_KEY"], "Accept": "audio/mpeg"},
        json={"text": text, "model_id": "eleven_multilingual_v2",
              "voice_settings": {"stability": 0.5, "similarity_boost": 0.75}},
        timeout=120,
    )
    r.raise_for_status()
    out.write_bytes(r.content)

모델 이름과 엔드포인트는 변경될 수 있습니다. 사용 전에 제공자의 최신 문서를 확인하세요.

측정 및 속도 조절

ffprobe -v error -show_entries format=duration -of default=nw=1:nk=1 audio/scene-01.mp3
  • 분당 140~160 단어를 목표로 하세요 (단어 / 초 * 60). 장면이 분당 180단어를 초과하면 약간 다른 전달로 다시 생성하거나 텍스트를 줄이세요. 너무 빠르게 들릴 수 있습니다.
  • 음성을 10% 이상 시간 압축하지 마세요. 인공적으로 들립니다. 대신 다시 작성하세요.

녹음된 음성 정리

# 하이패스, 부드러운 잡음 감소, 압축, 음량
ffmpeg -i raw.wav -af "highpass=f=80,afftdn=nf=-25,acompressor=threshold=-18dB:ratio=3:attack=5:release=80,loudnorm=I=-16:TP=-1.5:LRA=11" -ar 48000 clean.wav

시작과 끝의 침묵 제거:

ffmpeg -i in.wav -af "silenceremove=start_periods=1:start_threshold=-45dB,areverse,silenceremove=start_periods=1:start_threshold=-45dB,areverse" out.wav

조립

# 장면 파일을 0.4초 간격으로 결합
python - <<'PY'
import subprocess, pathlib
files = sorted(pathlib.Path("audio").glob("scene-*.mp3"))
parts = []
for i, f in enumerate(files):
    parts += ["-i", str(f)]
n = len(files)
filt = "".join(f"[{i}:a]apad=pad_dur=0.4[a{i}];" for i in range(n)) + "".join(f"[a{i}]" for i in range(n)) + f"concat=n={n}:v=0:a=1[out]"
subprocess.run(["ffmpeg", "-y", *parts, "-filter_complex", filt, "-map", "[out]", "voiceover.mp3"], check=True)
PY

그런 다음 audio-mixing에서 음악과 믹싱하고 captions-subtitles를 사용하여 자막을 추가하세요.

윤리 및 권리

  • 화자의 명시적 허가가 있을 때만 음성을 복제하세요.
  • 플랫폼 규칙이나 법률에서 요구하는 경우 합성 음성을 공개하세요.
  • 상업적 사용을 위해 TTS 제공자의 라이선스를 확인하세요.

Individual skills in this repo

This repo contains 6 individual skills — each has its own dedicated page.

iamaanahmad/captions-subtitles

Create, edit, translate and burn in captions and subtitles - transcribe speech with Whisper, write SRT/VTT/ASS files, style them, and hard-burn word-highlight captions for Shorts, Reels and TikTok. Use for any captioning, subtitle, transcript or accessibility request.

iamaanahmad/ffmpeg-essentials

Core FFmpeg and ffprobe recipes for trimming, joining, converting, resizing, compressing, speed changes, fades, audio extraction and GIF conversion. Use for any direct media transformation task, or when a video will not play, has odd dimensions, or is out of sync.

iamaanahmad/motion-design-craft

Motion design rules for programmatic and edited video - durations, easing, springs, staggering, read time for on-screen text, beat grids, transitions and visual hierarchy, plus the defaults that make a video look AI-generated. Use when animating scenes, choosing timings, or reviewing a video that feels off.

iamaanahmad/moviepy-python-video

Compose and edit video in pure Python with moviepy 2.x - overlay text, lower thirds and captions on footage, cut and join clips, add audio, build short single-file build.py videos without Node. Use when the user wants Python-based video editing or deterministic text over AI-generated video.

iamaanahmad/remotion-programmatic-video

Build videos as React code with Remotion - compositions, sequences, springs, interpolation, audio sync, data-driven props, studio preview and rendering to MP4. Use for explainers, product demos, release notes, data charts, branded templates, or any video that should be reproducible from code.

iamaanahmad/screen-recording-demos

Record clean product and web app demos - scripted browser recording with Playwright, cursor and zoom polish, speed ramps, trimming dead time and syncing to narration. Use when the user wants a walkthrough, tutorial, UI demo or release video of a web app, or a repeatable recording.

관련 스킬