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로 이동하세요. 그 전에 릴이 완료되었다고 말하지 마세요.