西川和久の不定期コラム

Fable 5でも苦手なことがあった!AI撮影チームによるLTX-2.3プロンプト変換術

 筆者のXを見ていると、クラウド動画生成AIサービス「Seedance 2.0」用のタイムライン(Timeline)付きプロンプトが数多く流れてくるようになった。試しにローカルの動画生成AI「LTX-2.3」へそのまま入力してみると、それらしい映像はできるものの、タイムラインを理解していないため意図した動きにならない。

 ならば、タイムラインをLTX-2.3向けに変換するロジックをFable 5で作れないだろうか……そう考えたのが今回の始まりだ。

きっかけは

 今、動画生成AIの中で頭1つ(もっと?)抜けているのが、Seedance 2.0というモデルだ。あまりに評判がいいので、ネット上には「Seedanceにこう書けばこう動く」というプロンプトが大量に流れている。たとえばこんな感じだ。

0–2s: sits on sidewalk, fixes ponytail, arms raised, smiles
2–4s: close-up, smiles looking away, morning light
4–6s: crouches feeding a cat in alley
...
Ambience only: birds, breeze, distant motorbikes, cat sounds

 つまり、秒単位で「この時間はこう動く」と指定して、短編ドラマを一発で作らせるような感じだ。しかも、登場人物は最初から最後まで同一人物で一貫性を保ちつつ、カメラのアングルをいろいろ変え、観てて飽きさせない工夫をしている。

 面白そうなので、この台本形式のプロンプトを手元のローカル環境のLTX-2.3にのまま渡してみると、それっぽいのは出るのだが、ちょっと違う。これは、そもそもLTX-2.3がタイムラインに未対応だからだ。

 ではどうすれば?というのが今回のお題となる。

タイムライン付きプロンプトそのままでSeedance 2.0対LTX-2.3

 まずタイムライン付きプロンプトで生成すると実際どうなるか?をSeedance 2.0とLTX-2.3で実験したい。用意したプロンプトは以下の通り。

Main Subject:
Young Japanese woman, mid-20s, black bob hair, wearing a white crop tank top and
denim shorts, warm natural smile, sun-kissed skin.

Location:
A sunlit seaside boardwalk in early afternoon, transitioning to a small rooftop
terrace overlooking the ocean at sunset.

Visual Style:
Ultra-realistic observational documentary, warm summer color palette, candid
slice-of-life mood, natural lighting.

Camera Style:
Handheld, natural micro-shake, occasional soft refocus, no cinematic gimbal moves.

---

00:00–00:03 → She walks along the sunlit beach boardwalk, drink in hand, hair
lifting in the sea breeze, humming to herself.
00:03–00:06 → She stops at the railing, snaps a photo of the waves with her
phone, then laughs and says, "いい写真撮れた!" ("Got a great shot!").
00:06–00:09 → She climbs the stairs to a small rooftop terrace, glancing back
at the ocean below.
00:09–00:12 → She sits at a terrace table, sipping her drink under a warm
orange sunset sky.
00:12–00:15 → She stands at the terrace railing, watching the golden sunset,
and quietly says, "きれいだね" ("It's beautiful").

Audio:
Rolling waves, distant seagulls, café chatter, warm evening breeze, footsteps
on wood

 内容をざっくり訳すと、主人公は20代の日本人女性(黒髪ボブ、白のクロップタンクトップ+デニムショートパンツ)。夏の午後の海沿いの遊歩道から、夕暮れの屋上テラスへ場所が切り替わるという、15秒のミニドラマだ。

 3秒刻みで5つの場面があり、「歩く→写真を撮って一言→階段を上る→座って一息つく→夕日を眺めて一言」という流れ。セリフも「いい写真撮れた!」、「きれいだね」の2カ所ある。

 と、このようなものだ。上部では全体的なプロンプト。そしてタイムライン、最後に音関係。まずこれをそのまま720pでSeedance 2.0(執筆時のレートで約527円)、続いてLTX-2.3 t2vへ入れ生成すると以下の結果となった。

Seedance 2.0で生成
タイムライン付きプロンプトをそのままLTX-2.3 t2vで生成するとこうなる

 Seedance 2.0は、タイムラインの指示通り動いているのが分かる。ただ欠点もあって、t2vの場合、「Young Japanese woman」とするとほぼ毎回この顔が出る。

 LTX-2.3の方は、なんか全部1カ所に詰め込んだ感じだ。椅子に座ってない以外は雰囲気は出ているものの、スマホとカップが一体化したり消えたり、椅子をすり抜けたりと、破綻もある。

 よって、誰がどう見てもSeedance 2.0の圧勝となる。ただし前述の通り720p/15秒で約527円もかかる(ComfyUI APIを使った場合。使うサービスによる)。一部気に入らないからといって、ガンガンSeed変えて生成するのは難しいだろう。

タイムラインのセグメントごとに生成、マージしてみる

 LTX-2.3、破綻部分はともかくとして、やはりタイムラインを理解するようにしないと駄目だな……と、早速手でプロンプトを書き換えやってみた。普通に考えると区切っている時間帯(セグメント)ごとに動画を生成、それを最後につなげれば行けるよね!となる。全体設定は毎回入れてセグメントごとに生成、マージすると以下のようになった。

全体設定は毎回入れてセグメントごとに生成、マージした結果

 これはなかなか良い結果だ。シーンが分かれているので、スマホとカップを同時に持たず、結果破綻も出ない。ただ分割して生成してる関係上、BGMはつながらない。これはこの方式での最大の欠点となりそうだ。

 ところが、気を良くしていろいろ試すと、ダメなケースも出てきた。流れを簡単に説明すると、

セグメントごとで切って生成、マージしてみたダメだったケース
  1. 起きる(明るい)
  2. 外出1(明るい)
  3. 外出2(明るい)
  4. 料理(夜)
  5. 食べる(指定なし。流れ的には夜のはずが明るく)
  6. 寝る(夜)

 つまり、5は本来、シーン全体が夜のはずだが、プロンプトに明確に記述していないため、前後の流れが把握できず、明るくなっているというパターンだ。

 また、多くは全身が映るものとなっている。これは生成AI画像/動画あるあるなのだが、衣装に関しては書いてるものを全部出そうとするため、どうしても引きの構図になってしまう。加えて、多くは正面からの構図だ。

 さらに、audioへ「Cicadas buzzing, distant traffic, ocean waves, page turning, faint outside birds, chair creaking」と書いてある関係で、すべてで海が見え、なぜか本を持っているパターンが多い(笑)。

Fable 5で撮影チームを作ってもらおうとしたが……

 上記から分かったのは、単純にグローバル設定+タイムラインの各セグメントで複数の映像を作りマージするだけだと限界があること。そこでFable 5で撮影ロジックを作ってもらうことにした。

 つまり、キャラクタの一貫性を保ちつつ、全体の内容を把握して、各セグメントで(本来ないもの、不要なものが出るなど)矛盾や(構図や動きなど)単調さがないかを確認しつつ、プロンプトを変換してもらおうというわけだ。

 ところが、これがまったくうまくいかない。筆者の指示の仕方が悪いのかもしれないが、とにかくあっちを直すとこっちが崩れるような感じだ。指摘すると、忘れてました。どうも全体を見ずに局所的に直そうとする。というか、そもそも意味を理解してない感じだ。

 筆者が契約したのはProプランなので、Fable 5は1回30分ほどしか使えず、その範囲内で数日粘ったものの、やっぱりダメだった。

 “元々学習していないもの、もしくはネット上にもないもの”は、そもそも何をしていいか分からないというのが理由らしい。

 確かに上記のような、プロンプトを映画やドラマ制作並みのプロンプトへ変換するロジックなどどこにも載っていない(存在するかもしれないが、非公開なのだろう)。

 結局Fable 5は諦め、Sonnet 5で筆者のアイディアを入力。それを実現するコードを書いてもらう手法に切り替えた。やったことは以下の6つ。ただし一気に6つ思いついたのではなく、出てくる映像を見ながら順番に考えた内容となる(撮影チームという発想)。

 つまり、AIが1人に全部やらせるのではなく、映画の撮影現場のように役割を分ければいいのではないか、と考えた。

  1. キャラクターの一貫性: 衣装など変わる部分は許可し、外せない部分は残す
  2. 監督: 全体を1本の映像として見渡し、各場面の役割テンポを決める
  3. 記録係: 各カットの服装・小道具・時間帯が前のカットと矛盾していないかをずっと記録し続ける専門職
  4. 撮影監督: 2(監督)の意図を受けて、各場面のカメラの寄り引き・アングル・カメラの動きを決める
  5. 単調さチェック係: 4(撮影監督)で決まった構図一覧を通しで見て、「正面顔が3カット続いている」「同じ側からのショットばかり」といった単調さを見つけたら、そこだけ書き直しを指示
  6. 情景描写係: 構図と場面の内容から、画面に実際に何が見えるかを言葉で描写する

いかがだろうか?これなら行けそうだ。ただ1つ問題があって、一部LLMを使って与えた情報から作文しているが、ここで意図しない内容に変わってしまうことがある。そこで翻訳・検品チームも追加した。

  1. 翻訳者: 汎用版として出来たプロンプトをLTX-2.3が得意とする書式へ変換
    リファレンス
     https://ltx.io/model/model-blog/ltx-2-3-prompt-guide
     https://docs.ltx.video/open-source-model/getting-started/quick-start
     https://huggingface.co/Lightricks/LTX-2.3
  2. 検品係: 出来上がった最終プロンプトが、決まったチェックリスト(分身していないか、持ち物が二重に描かれていないかなど)に沿って機械的に検品し、違反があれば翻訳者に直させ、直ったかどうかをもう一度確認。および台本通りに撮れているかを確認する

と、こんな感じだ。確かに何もないところからFable 5にこれを作って!ということ自体、無理がある(笑)。

 どちらも長くなるので詳細は省略するが、使用しているLLMは最近人気の「Ornith-1.0-35B」。小型モデルの場合、一度にいろいろ頼むとミスが増えるので、基本単機能。DGX Spark互換機でvLLMを使いNVFP4で動かし、4並列で約60tok/sとそれなりに高速だが、3秒×5=15秒程度のプロンプトに落とし込むのに1分半ほどかかっている。もちろん非同期動作。主に検品でひっかかりループしているのが原因だ。とはいえ決して軽い処理ではない。

 まだまとまり切っていないため、GitHubには公開していないが、このロジックで先のうまくいかなかったプロンプトを使い生成するとこうなる。

 2つ目は、映像のクオリティを上げるため、セグメントごとにキーフレーム(画像)を作りi2vで動画にしたものだ。

筆者が考えたいろいろなロジックを使い生成した映像。t2v版
筆者が考えたいろいろなロジックを使い生成した映像。i2v版(Z-Imageを使用)

 なおこの分割方式の良いところは、1分を超える長尺にも対応でき、さらに「うーん……」と思うセグメントのみ生成することが可能な点だ。

 3秒×5=15秒なら全部作り直す必要がなく、気に入らない一部だけ差し替えればいいので効率が良い。加えてi2vの場合は、キーフレームも作り直しか今のをキープかというオプションも追加してある。

最後の難関。BGMをどうする?

 これでタイムラインのセグメントごとに分割生成してマージした動画は、結構いい感じになった。しかし最後に残るのは、先に書いたBGMが切れること。これを何とかしないと不自然だ。

 そこで思い出したのが以前、MVを作る時、リップシンクの精度を上げるため、「Mel-Band RoFormerを使い、声とほかを分離したことだった。

 ただ、これだと声とそのほかが分離するだけで、今回のように、声、効果音(波の音/ヒールの音/包丁の音など)、BGM、3つある場合、効果音も消えてしまいつまらなくなってしまう。

 いろいろ検索した結果、「BandIt v2」を発見!これを使えば声/効果音/BGMを分離できる。

 ライセンスはコード(Apache License 2.0)、学習済み重み(CC BY-SA 4.0、表示-継承)で別々。商用利用自体は問題なく、重みへのリンクだけ持って自前配布しない使い方なら実務上の制約にはならない(重み/約450MB、7言語+多言語版)。

 重みが450MB程度ならCUDAでなくてもM4 Maxで動くかな!? と、性能向上したSonnet 5に任せて、ランチに行ってる間にCLI版でよろしく……と指示(笑)。戻って確認すると見事に動作!さすがだ。

 これを使えば、

  1. mp4からmp3を分離
  2. mp3からVoice/SFX/BGMを分離
  3. BGMを破棄、Sunoなどで作ったBGMを尺すべてに適用。このとき音量も指定

として、BGMがすべてつながった動画が出来上がる。以下、分離した音声(動画にはしてあるが音のみ)と、完成動画を掲載する。

すべて
音声
効果音(花火、足音)
BGM
別途SunoでBGMを作りセグメントごとで切れることなく通しで生成している動画

このように全部綺麗にBGMがつながるとグッと雰囲気を増す。タイムラインからのプロンプト拡張はまだチューニング中だが、いったんこれで今回のお題は完了した。

 この分離プログラムは、CLI版だがここに公開したので興味のある人は試してほしい。ただし、CUDAは実装しているものの未確認だ。


 今回は、Fable 5が苦手だったというより、「まだ世の中に答えが存在しない問題」をAIだけで解かせようとしたのが難しかった、ということだ。こちらが試行錯誤して見えてきたロジックを渡し、「これを実装して」と頼む方が、現時点では現実的なのだろう。いくら超優秀なFable 5でも、知らないことまでは考えられない。それが分かっただけでも、今回の収穫だった。

 Seedance 2.0と真っ向勝負は無理としてもローカルでこれだけ作れるようになると、これはこれで楽しい。キーフレームをZ-Imageではなく、最新のKrea 2にすればもっとクオリティも上がる(ライセンスの関係で作例には使えず)。また同じ考え方でストーリーボード対応もできるはずだ。

 本当はもっと性能の良いオープンな動画生成モデルが出てほしいのだが、ないものねだりしても仕方ない(笑)。