Codexにテーマを渡すだけで、企画、台本、ナレーション、背景映像、字幕、編集、書き出しまで行う「動画作成スキル」を試作しました。
最初は、動画生成を自動化する既存の仕組みを使えば簡単に作れると思っていました。しかし実際に試すと、完成したのは「それっぽく動く動画」であり、自分が作りたい動画とはかなり違いました。
特に問題になったのは、次のような点です。
- ナレーションと背景映像が合っていない
- 背景画像の中に意味不明な文字が生成される
- 修正を頼んだら字幕まで消える
- カット数を増やしただけで、内容との対応がさらに崩れる
- 音声は読めているが、イントネーションが不自然
- MP4を作成したと言われても、実際にはダウンロードできない
この記事では、これらの失敗をもとに、動画作成スキルへどのようなルールを追加したかをまとめます。
作りたかったもの
目標は、単なるテンプレート動画ではありません。
テーマを与えると、Codexが次の工程を一通り進める仕組みです。
- 動画の目的と中心メッセージを整理する
- 日本語のナレーション台本を作る
- 台本を意味のまとまりごとに分割する
- 各場面に対応する背景映像を作る
- AivisSpeechでナレーションを生成する
- 音声の長さに合わせて字幕を作る
- 映像、音声、字幕、BGMを合成する
- 完成した動画を実際に確認する
- 問題があれば修正して再度書き出す
重要なのは、動画生成モデルへ一度プロンプトを投げることではなく、制作工程そのものをスキルとして定義することです。
最初に分かったこと:レシピだけではオリジナル動画にならない
動画制作を自動化するスキルには、広告、解説、SNS向け短尺動画などの「レシピ」が用意されていることがあります。
レシピは、工程を素早く組み立てるには便利です。しかし、レシピを使うだけでは、構成や画面の見せ方がテンプレートに引っ張られます。
自分の動画に必要だったのは、次のような固有の方針でした。
- 哲学や心理学の話を、日常の具体例で説明する
- 背景は装飾ではなく、ナレーションの意味を補助する
- 画面内に不要な文字を生成しない
- 字幕は読みやすさを優先し、背景とは別レイヤーにする
- 一枚絵を微妙に動かすだけの場面を続けない
- 落ち着いた雰囲気を保ちつつ、単調にはしない
そのため、既存レシピは完成品ではなく、あくまで土台として扱う方がよいと感じました。
失敗1:背景映像とナレーションが無関係になる
最初の動画では、映像自体はきれいでも、話している内容とほとんど関係がない場面が多くありました。
例えば「SNSで他人と比較してしまう心理」を説明しているのに、抽象的な風景や人物が歩いているだけの映像が表示されます。これでは背景映像が内容理解に役立ちません。
さらに、「テンポを上げるためにカット数を増やす」とだけ指示すると、短い映像が大量に切り替わるだけになりました。カット数が増えても、意味の対応がなければ改善にはなりません。
そこで、スキルに次の工程を追加しました。
台本と映像の対応表を先に作る
映像を生成する前に、ナレーションを意味単位に分割します。
| 項目 | 内容 |
|---|---|
| narration | その場面で読まれる文章 |
| intent | 視聴者に理解してほしいこと |
| visual | 画面で見せる具体的な状況 |
| avoid | 入れてはいけない要素 |
| duration | 音声に基づく表示時間 |
例は次のようになります。
{
"narration": "SNSを開くと、他人の人生の良い場面ばかりが目に入ります。",
"intent": "他人のハイライトと自分の日常を比較してしまう状況を示す",
"visual": "夜、自室でスマートフォンを見た人物の表情が少し曇る",
"avoid": [
"画面内の読める文字",
"SNS企業のロゴ",
"無関係な自然風景"
]
}
この中間データを作ることで、「台本から直接それっぽい映像を生成する」のではなく、「意味を解釈してから映像へ変換する」流れにできます。
失敗2:「背景に文字を入れない」で字幕まで消えた
背景画像に、意味不明な英字、看板、UIのような文字が入り込むことがありました。そこで「映像内に文字を入れない」と指示したところ、修正版ではナレーション字幕まで消えてしまいました。
原因は、背景映像の文字と字幕を同じ「文字」として扱わせたことです。
スキルでは、この2つを明確に分離する必要があります。
背景映像
- 生成画像内に文字を入れない
- 看板、ラベル、ロゴ、UI文字も避ける
- 意味不明な英字を入れない
字幕
- 必ず残す
- 背景とは別の編集レイヤーで追加する
- 元のSRTがあれば再利用する
- SRTがなければナレーションから作成する
- 内容を要約、言い換え、省略しない
- 音声の区切りと表示時間を合わせる
「文字を消す」という一つの指示ではなく、背景生成工程と字幕合成工程を別々に定義することが重要でした。
失敗3:音声が機械的になる
日本語ナレーションにはAivisSpeechを使用しました。
ただし、台本をそのまま一括で読み上げさせるだけでは、固有名詞、疑問文、強調したい箇所などのイントネーションが不自然になることがあります。
そこで、音声生成も一回で終わらせないようにしました。
- 台本を意味の切れ目で分割する
- AivisSpeechで音声を生成する
- 文ごとの長さ、無音、読み方を確認する
- 不自然な箇所は表記や句読点を調整する
- 必要な箇所だけ再生成する
- 最終音声から字幕タイミングを決める
ポイントは、台本を先にSRTへ変換しないことです。音声を作り直すと長さが変わるため、字幕がずれます。
基本の順序は次の通りです。
台本確定
↓
音声生成・調整
↓
最終音声の時間を確定
↓
字幕タイミングを生成
↓
映像と合成
また、AivisSpeechのAPIを使う場合でも、ローカルのポートを認証なしでインターネットへ直接公開するのは避けるべきです。Codexがローカル環境で動いているなら、基本的にはローカルから接続します。外部環境から利用する必要がある場合は、認証、アクセス制限、暗号化を備えた安全な接続方法を用意します。
失敗4:「完成しました」を信用すると完成していない
動画生成では、処理が正常終了したことと、動画として正しいことは別です。
実際には、次のような問題が起きました。
- 字幕ファイルはあるが、動画へ合成されていない
- 背景映像と音声の長さが合わない
- 最終フレームが途中で切れる
- 音声はあるが無音区間が長い
- 出力先が不明でダウンロードできない
- 修正版で以前直した問題が再発する
そこで、スキルの最後に検品工程を追加しました。
最低限の機械的チェック
- MP4が実際に存在する
- ファイルサイズが0ではない
- 動画と音声のストリームが存在する
- 解像度とフレームレートが指定通り
- 音声と映像の長さの差が許容範囲内
- SRTが空ではない
- 最後までデコードできる
ffprobeを使えば、ストリームや長さを確認できます。
ffprobe -v error \
-show_entries format=duration \
-show_entries stream=index,codec_type,codec_name,width,height,r_frame_rate \
-of json \
output/final.mp4
目視・試聴によるチェック
機械的チェックだけでは、ナレーションと映像が合っているかは判断できません。
そのため、一定間隔のフレームや場面の代表画像を取り出し、台本との対応を確認します。また、冒頭、場面転換、終盤、エンドカードは実際に再生して確認します。
修正時には、直す項目だけでなく、維持する項目も指定します。
修正する:
- 背景映像をナレーションの内容に対応させる
必ず維持する:
- ナレーション音声
- 字幕の全文
- 字幕タイミング
- 解像度
- BGM音量
これにより、一つの問題を直した結果、別の要素が消える事故を減らせます。
スキルに入れた重要ルール
最終的に、動画作成スキルには次のルールを入れました。
企画・台本
- 最初に中心メッセージを一文で決める
- 理論だけでなく日常の具体例を入れる
- 同じ説明を言い換えて繰り返さない
- ナレーションとして自然な日本語にする
背景映像
- 各カットをナレーションの意味と対応させる
- 雰囲気だけの無関係な映像で埋めない
- 一枚絵の弱いズームだけを長時間続けない
- 画面内に文字、ロゴ、ラベルを生成しない
- カット数ではなく、意味の変化に合わせて切り替える
音声
- AivisSpeechで生成する
- 固有名詞や疑問文の読み方を確認する
- 不自然な箇所だけ再生成できる単位に分割する
- 音声確定後に字幕タイミングを作る
字幕
- 背景とは別レイヤーにする
- ナレーションを省略せず表示する
- 一度に表示する文字数を制限する
- 画面端から十分な余白を取る
- 修正時にも字幕を維持する
編集・出力
- BGMがナレーションを邪魔しない音量にする
- エンドカードを追加する
- 出力先を明示する
- 完成MP4を実際に開ける形で返す
- 一時ファイルではなく最終成果物を提示する
検品
- 機械的チェックを行う
- 代表フレームを確認する
- ナレーションと映像の対応を確認する
- 修正後に以前の要件が維持されているか回帰確認する
スキルの構成例
スキルは、1つの長大なプロンプトにすべて書くより、工程を分けた方が管理しやすくなります。
video-skill/
├── SKILL.md
├── references/
│ ├── script_rules.md
│ ├── visual_rules.md
│ ├── subtitle_rules.md
│ └── qa_checklist.md
├── templates/
│ ├── storyboard.json
│ └── render_config.json
└── scripts/
├── synthesize_voice.py
├── build_subtitles.py
├── render_video.py
└── validate_output.py
SKILL.mdには全体の流れと判断基準を書き、細かな規則は参照ファイルへ分けます。再現可能な処理はスクリプトにし、モデルの判断へ任せすぎないようにします。
動画作成を依頼するときのプロンプト例
スキルへ渡す依頼では、テーマだけでなく、壊してほしくない条件まで明記します。
「幸福のパラドックス」をテーマに、日本語の解説動画を作成してください。
中心メッセージ:
幸せを直接追いかけすぎると、今の不足ばかりに注意が向き、
かえって幸福を感じにくくなることがある。
必須条件:
- 哲学・心理学の内容を日常的な例で説明する
- ナレーションにはAivisSpeechを使用する
- 不自然なイントネーションを確認し、必要箇所を再生成する
- 背景映像は各ナレーションの内容と対応させる
- 背景画像内に文字、看板、ラベル、ロゴを入れない
- ナレーション字幕は必ず別レイヤーで追加する
- 字幕を要約、省略、言い換えしない
- 修正時にも字幕、音声、解像度を維持する
- 完成後に映像、音声、字幕、内容対応を検品する
- 最終MP4の保存先を明示し、ダウンロード可能な成果物として提示する
まとめ
動画作成スキルを作って分かったのは、生成AIへ「良い動画を作って」と頼むだけでは足りないということです。
特に重要だったのは、次の4点でした。
- 台本と背景映像の対応関係を中間データとして持つ
- 背景内の文字と、編集レイヤーの字幕を分離する
- AivisSpeechの出力を確認し、部分的に作り直す
- 書き出し後に機械チェックと目視確認を行う
動画生成モデルやテンプレートは、素材作りや工程短縮には役立ちます。しかし、オリジナルの動画にするためには、「何を作るか」だけでなく、「どのように確認し、何を維持しながら修正するか」までスキルへ組み込む必要があります。
今後は、場面ごとの評価結果を記録し、背景映像の再生成が必要な箇所だけを自動で特定できるように改善したいと考えています。