Communitygithub.com

hadi-a-azeez/viral-voice

페이스리스 릴에 음성 해설, 단어별 자막 및 음향 효과를 추가하여 완성된 동영상을 제작합니다. 무료 AI 음성(말라얄람어, 영어, 힌디어, 타밀어 등 다수), ElevenLabs 또는 사용자 자신의 녹음을 지원합니다. 릴에 음성 해설, 자막 또는 음향 효과를 추가하거나, viral-animate로 만든 릴을 마무리, 렌더링 또는 내보낼 때 사용하세요. viral 팩의 네 번째 단계입니다.

viral-voice란 무엇인가요?

이 스킬은 viral-animate로 생성된 페이스리스 릴에 음성 해설, 단어 단위 자막 및 음향 효과를 추가하여 완전한 동영상으로 마무리하는 전문 도구입니다. 사용자는 무료 AI 음성(말라얄람어, 영어, 힌디어, 타밀어 등 Microsoft Edge TTS 기반), ElevenLabs 연결, 또는 직접 녹음한 파일 중에서 선택할 수 있습니다. 각 옵션은 품질, 비용 및 자막 정확도 측면에서 장단점이 있으며, 자신의 목소리는 가장 자연스럽고 연출된 느낌을 줍니다. 음성 해설이 완료되면 렌더링 전에 스틸 프레임을 검토하여 모든 모션이 음성과 동기화되었는지 확인할 수 있습니다. sfx.py 스크립트는 자동으로 시작 쿵음과 비트 변경 시 부드러운 훑음 효과를 추가하며, 사용자 정의 음향 효과도 지원합니다. finish.py 스크립트는 마지막 단계로, 고품질 렌더링, 오디오 믹싱, LUFS 표준에 따른 음량 정규화를 수행하여 최종 동영상을 출력합니다. 모든 음향 효과는 합성되어 저작권 문제가 없으며, 배경 음악은 플랫폼 편집기에서 별도로 추가하도록 안내합니다. 이 스킬은 viral-animate, viral-script, viral-check 등 다른 viral 팩 도구와 함께 사용됩니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/hadi-a-azeez/viral-agent/tree/main/skills/viral-voice

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

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

문서

viral-voice은(는) 무엇을 하나요?

설치를 한 번 실행하세요: bash setup.sh. 이 가이드의 스크립트는 이 파일과 같은 디렉토리에 있으므로 전체 경로를 사용하세요.

1. 음성 선택

사용자가 원하는 음성을 물어보고, 장단점을 솔직하게 알려주세요:

옵션비용품질자막 타이밍
무료 음성 (기본)무료명확하지만 약간 평면적정확, 각 단어가 말해지는 대로 조명
ElevenLabs유료 플랜 또는 무료 크레딧가장 자연스러움모델이 타임스탬프를 제공할 때 정확
자신의 음성무료가장 개인적각 줄 내에서 추정. 비트별로 녹음하면 더 정밀

자신의 음성이 일반적으로 가장 좋은 성능을 냅니다. 사람들은 말하는 사람의 진심을 느낄 수 있기 때문입니다. 페이스리스 릴이 목소리 없을 필요는 없습니다.

# 무료 음성. 말라얄람어는 --voice ml-IN-MidhunNeural 사용. 다른 말라얄람어 음성은 --voice ml-IN-SobhanaNeural.
python3 voice.py <project>

# ElevenLabs. ELEVENLABS_API_KEY와 음성 ID 필요. 말라얄람어는 eleven_v3처럼 지원하는 모델 필요.
python3 voice.py <project> --engine elevenlabs --voice <voice id> --model eleven_v3

# 자신의 녹음, 전체 스크립트 한 번에 녹음
python3 voice.py <project> --engine file --audio take.m4a

# 자신의 녹음, 비트별 파일 (voice/b1.m4a, voice/b2.m4a). 이 방식이 타이밍이 더 정밀함.
python3 voice.py <project> --engine file --audio voice/

다른 도구의 오디오도 --engine file로 작동하므로, 음성 생성 도구가 연결되어 있다면 비트별로 하나씩 파일을 생성하여 폴더를 전달하세요.

녹음의 경우 각 줄은 일시 정지 사이의 단어 길이로 시간이 측정되므로, 한 번의 긴 테이크에서는 자막이 최대 약 1초까지 어긋날 수 있습니다. 실제 48초 말라얄람어 릴 테스트에서는 대부분의 자막이 0.5초 이내에 정확했습니다. 어색해 보이면 비트별로 녹음하세요.

무료 음성은 오픈 소스 edge-tts 도구를 통해 Microsoft Edge의 읽어주기 서비스에서 실행됩니다. 공식 API가 아니므로 변경되거나 중단될 수 있으며, 클라이언트 작업이나 상업적 작업에 사용하는 사람은 먼저 이용 약관을 확인해야 합니다. 사용자가 비즈니스용 동영상을 만드는 경우 이 점을 알려주세요.

2. 누군가는 들어야 합니다

이 도구를 통해 오디오를 들을 수 없으며, timing.json은 스크립트의 단어만 보여주고 실제로 말한 내용은 절대 알 수 없습니다. 따라서 여기서 발음을 확인할 수 있는 방법은 없습니다. 사용자에게 voice.wav를 들어보거나, 전사 도구가 연결되어 있으면 전사하여 비교하라고 요청하세요. 둘 다 하지 않으면 확인되지 않은 상태라고 솔직히 말하세요.

음성이 단어를 잘못 발음하면 script.json의 해당 비트에 "tts"를 추가하고 올바르게 발음되는 철자를 적어 다시 실행하세요. 자막은 계속 say를 사용합니다. 가능하면 tts의 단어 수를 say와 동일하게 유지하세요. 다르면 voice.py가 메모를 출력하고 해당 비트의 자막 시간이 추정치가 됩니다.

대사가 급하게 들리면 --rate를 변경하세요 (기본값 +8%). --gap은 비트 사이의 일시 정지를 설정합니다.

lint_script.py와 timing.py의 길이 추정치는 대략적인 수치에 불과하며 10~15% 정도 짧을 수 있습니다. 실제 길이는 voice.py가 출력합니다. 대상 길이에 맞추려면 --rate를 변경하거나 단어를 줄인 후 다시 실행하세요.

3. 사진 다시 보기

실제 음성이 모든 것을 변경했으므로 최종 렌더링 전에 확인하세요:

node <viral-animate folder>/render.mjs <project> --stills beats

stills/beats.jpg를 여세요. k, d 또는 kit.at에 연결된 모션은 음성을 따라갔습니다. 고정 초 단위로 설정된 것은 그렇지 않으므로 scenes.js에서 수정하세요.

4. 음향 효과

sfx.py는 자동으로 실행됩니다: 시작 시 낮은 쿵음과 각 비트 변경 시 조용한 훑음 효과를 추가합니다. 조용하고 감성적인 작품의 경우 script.json에서 "sfx_auto": false로 설정하여 끄세요. 더 추가하려면 동기화를 유지하기 위해 단어 위에 나열하세요:

"sfx": [{ "beat": "b2", "word": "charger", "kind": "pop", "db": -14 }]

word 대신 "at": 1.1을 사용하여 비트 시작 후 초 단위로 지정할 수 있습니다. 비트에 없는 단어는 명확한 메시지와 함께 중단됩니다. 종류:

종류소리용도
whoosh swell올라가는 바람변화, 날아오는 것
swipe빠른 바람 스치기빠른 움직임
pop작고 둥근 팝나타나는 것
tick아주 작고 건조한 틱카운터, 작은 순간
click날카로운 스위치 클릭조명 스위치, 버튼
knock나무에 두드리는 손가락 마디문, 테이블
thump낮은 충격오프닝, 큰 공개
stamp무게감 있는 강한 타격판결, 요점 강조

모두 합성된 소리이므로 라이선스 위험이 없습니다. 팩은 음악을 추가하지 않습니다: 음성을 명확하게 유지하고 저작권 문제를 피합니다. 사용자가 배경 음악을 원하면 Instagram 편집기에서 추가할 수 있습니다.

5. 마무리

python3 finish.py <project>

이 명령은 실제 음성 타이밍에 맞춰 고품질 사진을 렌더링하고, 효과를 믹싱하며, 음량을 약 -14 LUFS로 설정하고 final.mp4를 작성합니다. --no-render를 추가하면 사운드만 다시 믹싱합니다.

시험 버전: 다른 훅을 테스트하려면 프로젝트 폴더를 복사하고, 다른 훅의 say를 b1에, label을 최상위 label에 넣은 다음 복사본에서 voice.py와 finish.py를 실행하세요. k, d 또는 kit.at에 연결된 모션이 따라옵니다. 새 훅에 kit.at 단어가 여전히 있는지 확인하세요.

그런 다음 /viral-check로 이동하세요. 그 전에 릴이 완료되었다고 말하지 마세요.

관련 스킬