※ この記事で触れるサービスは筆者が個人で開発・運営しています。宣伝が目的ではなく、動画生成モデルを使ったプロダクト開発で得たプロンプト設計の知見を共有する記事です。
はじめに
動画生成モデルは年々よくなっていますが、「毎回安定して使える品質で出す」のはまだ難しいと感じています。同じプロンプトで10回生成すると、口の動きが合わない、手が崩れる、背景に意味不明な文字が出る、いないはずの人が映り込む、といった失敗が何度か混ざります。
私は AI Rap Generators という、2人の成人のポートレート写真から 15秒・縦型(9:16)のラップ動画 を作る小さなWebサービスを作っています。歌詞とビートはAIが生成し、動画の生成には Seedance 2.0 を使っています。
この記事では、安定性を上げるために効果が大きかった次の3点をまとめます。
- プロンプトを5つのブロックに分ける
- 失敗パターンごとに「禁止事項」を1行ずつ足す
- 歌詞を短くして、15秒に収める
なお、記事中のプロンプトは設計の考え方を示すための簡略版です。
Seedance 2.0 について(前提)
調べた範囲では、Seedance 2.0 は ByteDance のマルチモーダルな音声付き動画生成モデルで、次のような特徴があります。
- 映像と音声を同時に生成する(ラップのように声・ビート・動きが一体のコンテンツと相性がよい)
- 参照画像を受け取れる(ユーザーのポートレートを人物の参照として渡せる)
- 生成できる長さは最大15秒程度
ただし、利用するAPI提供元によってパラメータや制限が異なる可能性があります。実際に使うときは、各提供元の最新ドキュメントを確認してください。
散文のプロンプトでは調整できなかった
最初は、1シーンにつき1段落の文章でプロンプトを書いていました。
屋上でラップする人。夜景がきれいで、ライトが光っている。
かっこいいビートに乗って、カメラに向かって手を動かす。
これだと、結果が悪いときに「どの一文が原因か」が分かりません。直したつもりが別の部分を壊すこともありました。
解決策:プロンプトを5ブロックに分ける
そこで、すべてのシーンのプロンプトを次の5ブロックに分けました。
[Scene] 人物の同一性 + 環境 + カメラ設定
[Music] ジャンル、テンポ、楽器、ボーカルの条件
[Timeline] 秒単位の動きの台本
[Lyrics] 歌わせる歌詞(一字一句そのまま)
[Constraints] 守るべきルールと、起こしてはいけないこと
屋上ステージの例(簡略版)です。
[Scene]
Use reference image 1 for the single rapper's identity, outfit, hair,
and proportions. On the rooftop terrace, keep the performer centered in
a locked-off knee-up vertical 9:16 shot. Preserve the city skyline,
string lights, palms, lounge furniture, and reflective stone floor;
no other people enter.
[Music]
Confident melodic rap, 110 BPM: hard kick, snare, rolling hats, deep sub
bass, piano-and-bell hook, airy pads. One clear vocal rides a constant
radio-loud beat.
[Timeline]
0-3s: bounce on beat and point at camera. 3-6s: broad arm sweeps.
6-9s: lean in with a smile and head bob. 9-12s: step side to side,
hands wide. 12-15s: keep the energy high and freeze on the final hit.
[Lyrics, in English, perform exactly these]
1. ...
(全6行)
[Constraints]
Accurate lip-sync, one rapper only, no subtitles or text, no cuts, no
camera move, no extra people. Keep the performer in the lower three
quarters, knee-up, with hands below the top quarter.
ブロックごとに分けると、「Musicだけ変えて比較する」「Constraintsに1行足して効果を見る」といった1回に1箇所だけ変える調整ができるようになります。これが一番大きな改善でした。
各ブロックの設計意図
Scene:まず人物を固定し、次に画面の枠を固定する
- 「参照画像1が人物の同一性・服装・髪型・体格を決める」と明示して、モデルの自由度を減らします。
- 構図は「固定カメラ・膝上・縦9:16」に決め打ちします。全身よりも膝上のほうが、顔・手・口の動きが安定しやすいと感じています。
- 背景は要素を具体的に列挙します(夜景、ストリングライト、ヤシの木、ラウンジ家具、反射する石の床)。背景が単純で要素が明確なほど、フレーム間でブレにくくなります。
- 「no other people enter」のように、勝手に人が増えることを先に禁止します。
Music:雰囲気ではなくパラメータで書く
「かっこいいラップビート」では何も指定していないのと同じです。次のように具体化します。
- BPMを固定する(例:110)
- 楽器を列挙する(キック、スネア、ハイハット、サブベース、ピアノ、パッド)
- ボーカルは「1本だけ、はっきり」と指定する(コーラスやハモりを足されると口の動きが難しくなる)
BPMが決まっていれば、歌詞の長さもあらかじめ設計できます。
Timeline:「踊って」ではなく、3秒ごとに動きを1つ
15秒を3秒×5区間に分け、区間ごとに主な動きを1つだけ書きます。
| 区間 | 動き | 狙い |
|---|---|---|
| 0〜3秒 | ビートに合わせて弾む、カメラを指差す | 冒頭で注意を引く |
| 3〜6秒 | 大きく腕を振る | 見た目の変化 |
| 6〜9秒 | 少し前に出て笑顔、頷く | 親近感 |
| 9〜12秒 | 左右にステップ、両手を広げる | リズムの変化 |
| 12〜15秒 | テンションを保ち、最後の1拍で静止 | きれいな終わり方 |
最後を「静止」で締めると、途中で切れたようにならず、作品として完結した印象になります。
Lyrics:短く、そのまま歌わせる
- 全部で6行、7〜10音節程度(英語の歌詞を想定)に収めます。長い行ほど口の動きがずれやすくなります。
- 見出しに「perform exactly these」と書いて、モデルが歌詞を勝手に書き換えないようにします。
- 名前や記念日などのパーソナライズ要素は、1〜2行だけに入れます。
Constraints:失敗パターンごとに1行足していく
このブロックが一番育ちました。よく見る失敗と、対応する制約は次のとおりです。
| 失敗パターン | 追加した制約 |
|---|---|
| 口の動きと歌詞がずれる |
Accurate lip-sync、歌詞を短くする |
| いない人が映り込む |
one rapper only、no extra people
|
| 背景や字幕に意味不明な文字が出る | no subtitles or text |
| カット後に顔が変わる | no cuts, no camera move |
| 手が画面上部で切れる・崩れる | hands below the top quarter |
| アプリのUIに隠れる | lower three quarters, knee-up |
ここで感じたのは、プロンプトは長ければよいわけではないということです。「起こしてほしいこと」と「絶対に起こしてほしくないこと」を両方、短く具体的に書くほうが効きました。
運用で気をつけていること
- 1回に1箇所だけ変える。 ブロックを分けているのは、そのためです。
- 失敗を記録する。 どのシーンで、どんな失敗が出たかをメモして、制約の追加につなげます。
- シーン別の成功率を見る。 全体の成功率だけでは、どのシーンのプロンプトが弱いのか分かりません。
- 失敗時は自動で返金する。 生成にはコストがかかり、失敗もゼロにはできないので、ユーザーが損をしない仕組みを最初から作りました。
現状の制限
正直に書くと、次のような制限があります。
- 動画は15秒のみ
- 自分の曲のアップロードには未対応
- 出演者は成人2名のみ
- AI生成のため、写真との似かたにはばらつきがある
また、実在の人物の顔を扱うので、出演者本人または同意した成人のみ、未成年者と公人の画像は受け付けない、動画にはAI生成の表示を付ける、アップロード写真は7日後に削除する、というルールを設けています。
料金はクレジット制で、動画1本あたり10クレジット、クレジットパックは$6.99から(サブスクなし)です。ステージ(シーン)は無料で閲覧できます。
まとめ
- プロンプトは Scene / Music / Timeline / Lyrics / Constraints の5ブロックに分けると、調整しやすくなる
- 失敗パターンが見つかるたびに、Constraintsに1行ずつ追加する
- 15秒に収めるため、歌詞は短く(6行・7〜10音節)
- 「長いプロンプト」より「やること+やらないことを具体的に書く」ほうが効く
同じように動画生成モデルを使って開発している方がいれば、どんな失敗パターンに対してどんな制約を足しているか、ぜひ教えてください。サービスは airapgenerators.com で、ステージの閲覧は無料です。使ってみて気になった点があれば、コメントで教えていただけると嬉しいです。