AIショートドラマを実際に動画化―画像生成・声の固定・fal.ai無料枠まで試した

ChatGPTで監視室の静止画を作り、音声生成の試行錯誤を経てElevenLabsで弥生と睦月の声を固定。fal.ai Sandboxの無料枠でImage-to-Videoを生成し、音声を合成してCUT01とCUT02をつないだ実作業記録。

公開:
AIショートドラマを実際に動画化―画像生成・声の固定・fal.ai無料枠まで試した

AIショートドラマは、静止画を1枚作ったところから急に作業が増えます。人物の声をどう固定するか、台詞へ自然な感情を付けられるか、Image-to-Videoへ何を渡すか、無料枠と従量課金をどう見分けるか。実際に触ると、サービスごとの得意分野がかなり違いました。

ゆまラボでは「未確認怪異記録 No.001 赤い傘の女」のCUT01とCUT02を使い、ChatGPTでの画像生成、MiniMax系TTSの試行、ElevenLabsでの固定音声作成、fal.ai Sandboxでの動画生成、最後の音声合成まで進めました。途中では日本語イントネーションが使いにくい音声、対応形式エラー、無料枠の見分け違いによるクレジット消費も実際に起きています。

この記事では、最終的に採用した流れだけでなく、途中で止めた方法と切り替えた理由も時系列で残します。画像から音声付きの短いドラマカットまで作るとき、どこで何を決めるかを追える内容です。

今回作ったCUT02#

題材は「未確認怪異記録 No.001 赤い傘の女」。CUT02は、駅の監視室で月島弥生と一条睦月が4台の監視モニターを確認している場面にした。

静止画はChatGPT側で生成し、監視室の構図、2人の位置、右下モニターに映る赤い傘まで画像内で確定させた。動画生成側へ多くを任せるより、最初の1枚で画面構成を決めた方が人物や小物の位置を守りやすい。

CUT02用に生成した監視室の静止画。弥生と睦月が4台の監視モニターを見ており、右下画面に赤い傘が映っている

CUT02で使う会話は3つ。

睦月:これが、昨夜送られてきた映像だ。
弥生:誰もいないのに、傘だけ?
睦月:三日続けて、同じ場所に映ってる。

この3本を別々に作り、最後に1本の会話音声へ連結する流れにした。

最初はMiniMax系の音声生成を試した#

動画へ入れる声は、人物ごとに固定したい。睦月には自分の声を使い、弥生には固定の女性Voiceを使う方針で進めた。

最初にGoogle AI StudioのVoice Replicationも試したが、作成時にRequest contains an invalid argument.が返り、画面から原因を切り分けられなかった。言語設定も確認したが、その場では解消しなかったため、この経路は止めた。

次にfal.aiのMiniMax Voice Cloneを試した。Windowsのサウンドレコーダーで作った音声をそのまま渡すと、入力形式で止まった。

MiniMax Voice Cloneで音声形式が非対応になったエラー画面

画面に出たエラーはこれ。

audio_url: Unsupported audio format. Supported formats are .wav, .mp3.

録音ファイルをWAVへ変換し、Voice Clone自体は実行できた。その後、作成したVoice IDをMiniMax Speech 2.8 HDへ指定し、日本語の台詞を生成した。

ここで引っかかったのがイントネーションだった。声質は自分に近づく一方、日本語の抑揚が平坦になり、漢字や時刻の読みも安定しなかった。読みをひらがなへ変更し、句読点や間も変えたが、監視室で自然に話している声としては使いにくい。

真ん中の「これが、昨夜送られてきた映像だ。」は使えるところまで来たものの、シリーズ全体で継続する音声基盤としては別の方法を探すことにした。

ElevenLabsへ切り替える#

次に使ったのがElevenLabs。登録後にプラットフォーム選択が出たため、音声生成を使うElevenCreativeを選んだ。

ElevenLabsでElevenCreativeを選択する登録画面

弥生については、既存Voiceを複数確認した。最終的に採用したのはMorioki - Calm, Measured and Muffled。落ち着いていて、監視映像に違和感を覚える役として使いやすかった。

Eleven v4では、角括弧のAudio Tagsを台詞へ付けて話し方を指示できる。弥生にはこのタグを使った。

[curious, quiet, slightly unsettled]
誰もいないのに、傘だけ?

ElevenLabsでMoriokiへAudio Tags付き台詞を入力して生成した画面

生成結果はMiniMaxで感じた機械的な平坦さがかなり減り、「傘だけ?」の疑問の上がり方も自然だった。弥生の固定VoiceはMoriokiで進めることにした。

睦月は自分の声をInstant Voice Cloneへ登録#

睦月は自分の声を使う。ElevenLabsでクローン音声を使用するには有料プランが必要だったため、画面からStarterへアップグレードした。

ElevenLabsでクローン音声利用のためStarterプランを確認した画面

ElevenLabs公式ドキュメントでは、Instant Voice CloneはVoicesから作成でき、1〜2分程度の明瞭な音声が推奨されている。今回は自分の音声を録音し、Mutsukiという名前で登録した。

作成後は自分の音声にMutsukiが追加され、Text to Speechから呼び出せる。

ElevenLabsの自分の音声にMutsukiを登録できた画面

睦月の台詞には、場面に合わせてAudio Tagsを付ける。

[calm, low, matter-of-fact]
これが、昨夜送られてきた映像だ。
[calm, slightly concerned]
三日続けて、同じ場所に映ってる。

ElevenLabsのクローンは、登録した声質を使いながらv4側のAudio Tagsで演技を変えられる。固定キャラクターの会話を続ける用途では、この組み合わせが扱いやすかった。

音声を3本に分けて作り、最後に連結する#

CUT02では、1回のTTSで3人分の会話をまとめず、話者ごとに生成した。

  • 睦月1:「これが、昨夜送られてきた映像だ。」
  • 弥生:「誰もいないのに、傘だけ?」
  • 睦月2:「三日続けて、同じ場所に映ってる。」

睦月1と睦月2はMutsuki、弥生はMoriokiを使用。生成後、3本を次の順番で連結した。

0.30秒の無音
↓
睦月1
↓
0.55秒
↓
弥生
↓
0.55秒
↓
睦月2
↓
0.45秒の無音

完成した会話音声は約10.5秒。動画側はこの尺より少し長めに作り、最後に音声へ合わせて切る方針にした。

fal.aiの通常Playgroundでクレジットが減った#

動画生成はfal.aiを使用した。最初はMiniMax H3 MaxのImage-to-Video画面を開き、静止画から動画を作った。

ここで無料枠の扱いを取り違えた。通常のモデルPlaygroundには秒単価が表示されており、この画面でRunするとクレジット残高が減った。

fal.aiの通常Playgroundに動画の秒単価が表示されている画面

この時点で「無料生成を使うなら、実行ボタンを押す前に画面上の無料表示まで確認する」という運用へ変えた。

fal.aiのH3 Max紹介ページには、サインイン済みユーザー向けの無料生成枠が案内されている。一方、今回実際に開いたSandboxのモデル一覧では、H3 Maxの行に5 freeバッジが見えず、Grok Imagine Video 1.5側には5 freeが表示された。

公式説明だけで判断せず、その日の実画面で無料対象を確認することにした。

Sandboxへ移動し、無料表示があるモデルを選ぶ#

fal.ai Sandboxを開くと、画面上部に当日の無料生成枠が表示された。

fal.ai Sandboxで当日の無料生成枠が表示されている画面

Image to Videoのモデル一覧を開くと、xai/grok-imagine-video/v1.5/image-to-videoには5 freeのバッジが表示されていた。

fal.ai Sandboxのモデル一覧でGrok Imagine Video 1.5に5 freeが表示されている画面

同じ一覧でminimax/h3-max/image-to-videoを選んだ画面では、そのバッジを確認できなかった。

fal.ai SandboxでH3 Maxを選択したときのモデル一覧

この表示を基準に、CUT02はGrok Imagine Video 1.5の無料枠へ切り替えた。

CUT02をImage-to-Videoへ渡す#

SandboxではImage To Videoを選択し、最初に作ったCUT02静止画をアップロードした。AudioはOff。生成側のネイティブ音声を使わず、ElevenLabsで作った完成音声を後から合成するためだ。

尺は15秒にした。会話音声が約10.5秒なので、長めに生成して最後を切れば合わせやすい。

fal.ai SandboxでCUT02画像、Audio Off、15秒を設定したImage-to-Video画面

動画生成用プロンプトでは、人物を大きく動かさず、監視室の構図とモニター内の赤い傘を維持する指示を中心にした。

A realistic late-night surveillance monitoring office.

Preserve the exact composition, characters, faces, hairstyles, clothing,
desk, four surveillance monitors, station footage, lighting, furniture,
and all objects from the input image.

The camera remains completely fixed.

The seated man calmly watches the surveillance monitors.
He makes only very subtle natural movements: breathing,
a slight head movement, and tiny posture adjustments.

The standing woman watches the monitors closely.
She makes subtle eye movements and a small head movement.
Her expression changes slightly as she notices something unusual
on the lower-right monitor.

Both characters remain calm and restrained.
No exaggerated acting.
No large gestures.
No walking.
Do not change their positions.

Keep all four surveillance monitor images stable.
Keep the red umbrella visible on the lower-right monitor.

No new people.
No extra objects.
No face distortion.
No morphing.
No camera movement.
No zoom.
No pan.
No tilt.
No scene transition.

Realistic live-action motion.
Quiet investigative suspense.

このカットは会話中に大きな芝居を入れない。睦月は後ろ向きに近く、弥生も横からモニターを見ている。厳密なリップシンクを入れなくても口元のズレが目立ちにくい構図を使っている。

生成動画へElevenLabsの会話を合成#

Grokで作った映像をダウンロードし、約10.5秒のCUT02_dialogue.mp3を合成した。元動画は15秒なので、会話が終わる位置へ合わせて後半をカットした。

最初の合成結果では、声が映像より前に出て聞こえた。監視室の引き画なのに、耳元で話しているような距離感が残っていた。

そこでCUT02音声を再調整した。

  • 音声レベルを約3.5dB下げる
  • 高域を少し抑える
  • ごく薄い室内反射を加える
  • 小さな環境音を下に置く

これで声が画面内の人物へ少し戻り、監視室の距離感に近づいた。

CUT01とCUT02をつないで確認#

最後に、すでに作っていたCUT01と今回のCUT02を接続した。CUT01は監視カメラ視点の駅ホーム、CUT02は監視室へ移る。

CUT01とCUT02で画角が違うため、CUT01側は映像を切らず、左右へぼかした領域を追加して横幅を合わせた。音声はCUT02から始まる。

完成動画のMP4はファイルサイズが大きいため、記事には収録しない。接続後の確認用として静止画だけ残す。

CUT01とCUT02を接続した完成確認用動画のフレーム

ここまでで、静止画から「人物固定の声が入り、次のカットへつながる動画」まで通った。

実作業で固まった制作フロー#

今回の作業を、そのまま次のカットへ使える形にするとこの順番になる。

  1. ChatGPTでカットごとの静止画を作る
  2. 人物、背景、小物、カメラ位置を静止画側で確定する
  3. ElevenLabsで固定Voiceを選ぶ、または自分の声をInstant Voice Cloneへ登録する
  4. Audio Tagsを付けて台詞を人物別に生成する
  5. 台詞を必要な間隔で連結し、カット単位の完成音声を作る
  6. fal.ai Sandboxで無料対象の表示を確認する
  7. Image-to-Videoへ静止画と動きの指示を渡す
  8. 生成動画へ完成音声を合成する
  9. 声の距離感が合わなければ音量、高域、反射、環境音を調整する
  10. 前後のCUTと接続して流れを確認する

最初から1サービスですべて作ろうとすると、日本語音声や人物固定、無料枠の条件で詰まりやすい。今回は静止画、TTS、動画生成、最終合成を分けたことで、問題が起きた工程だけ差し替えられた。

音声はElevenLabsを継続、動画は無料対象を画面で確認する#

音声はElevenLabsを継続する。弥生はMorioki - Calm, Measured and Muffled、睦月は自分の声から作ったMutsukiを固定Voiceとして使う。感情はAudio Tagsを台詞ごとに変える。

動画生成はfal.ai Sandboxを使い、実行前に無料バッジと残り枠を確認する。通常Playgroundに秒単価が出ている場合は、無料枠のつもりでそのままRunしない。

CUT02まで完成したので、次の作業は同じ固定Voiceを使いながらCUT03以降を動画化していく。

参考#