viral-voice は何をしますか?
セットアップは一度だけ実行: bash setup.sh。このガイド内のスクリプトはこのファイルと同じ場所にあるので、フルパスを使用してください。
1. 音声を選ぶ
どれを希望するか尋ね、トレードオフについて正直に伝えてください:
| オプション | コスト | 品質 | キャプションのタイミング |
|---|---|---|---|
| 無料音声 (デフォルト) | 無料 | 明瞭、やや平板 | 正確、各単語が発話されると同時にハイライト |
| ElevenLabs | 有料プランまたは無料クレジット | 最も自然 | モデルがタイムスタンプを提供する場合は正確 |
| 自分の声 | 無料 | 最もパーソナル | 各行内での推定。ビートごとに録音するとより正確 |
自分の声が最も良い結果をもたらす傾向があります。人が本気で言っている言葉は聞き手に伝わるからです。フェイスレスリールだからといって無声である必要はありません。
# 無料音声。マラヤーラム語の場合はMidhunを選択。--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
# 自分の録音、ビートごとに1ファイル (voice/b1.m4a, voice/b2.m4a)。この方がタイミングが正確。
python3 voice.py <project> --engine file --audio voice/
他のツールからの音声も --engine file で動作します。そのため、音声生成ツールが接続されている場合は、ビートごとに1ファイル生成してフォルダを渡してください。
録音の場合、各ラインはポーズ間の単語長でタイミングが計られるため、単一の長尺テイクではキャプションが最大約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 に進んでください。その前にリールを完成したと言わないでください。