0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

映像の「演出考察」をAIにさせようとして挫折したが、なんとかリファレンス収集ツールに着地できた件

Last updated at Posted at 2025-12-04

はじめに

CYBIRD Advent Calendar 2025 5日目担当、RN-Vidと申します。

4日目は@kyukkyu81(しの やん)さんの「Cloudflare Workers AI + Bookmarkletでいつでも励ますちびキャラ召喚ボタン作ってみた(無料でな)」でした。

ワンクリックでキャラ召喚を無料でできるとは・・・
イルカを消す方法を探してた頃から時代は大きく進みましたね!


さて、私事で恐縮ですが、今年サイバードに入社しまして、映像まわりを担当させて頂いております:projector:
ですので、エンジニアではない私なのですが、この度、AIを介してはじめてPythonでツールを作成しました:clap::clap::clap:

AI活用の一事例として記させて頂きます:muscle_tone2::muscle_tone2::muscle_tone2:

この記事で分かること
・非エンジニアがAIを使って効率化ツールを作るプロセス
・動画解析AI開発でぶつかる「API制限」「コスト」「自動検出」の壁

こんな人におすすめ
・制作用のリファレンスがたくさんほしい!
・制作動画の絵コンテ風でのアーカイブ化に興味がある方

はじめに:動機と野望

入社間もない私ですので、先輩方がこれまで制作されてきた大量の動画を日々観ては分析・勉強しお客様に刺さる映像演出を考察する毎日を過ごしております。

そういった映像演出の勉強や分析作業をしていると、頭の痛い問題があります。

それはーー

映像演出の分析そのものよりも、準備作業(コマ送り、スクショ、Excel貼り付け…)に時間がかかりすぎる

という問題です。

そもそもですが、映像演出の分析自体が考えることの多い作業になります。

映像演出の分析が混み入っている件

映像分析が一筋縄ではいかない理由は、静止画と違い、
以下の要素が複雑に掛け合わされているからです。

  • 2次元の情報(絵作り)
    • 構図、ライティング、色彩設計
  • 3次元の情報(空間・動き)
    • カメラワーク、被写体のモーション、レンズの深度
  • 4次元の情報(時間・文脈)
    • 編集のリズム(尺)、前後の文脈、音響(BGM・SE)

これらが同時進行で変化し続けるため、人間が感覚的に捉えている「演出」をデータとして言語化するのは、非常に難易度が高い作業になります。

この:point_up_tone1:『分析をする為の時間のかかる準備』をAIに丸投げしたい
いや!あわよくば、動画を渡すだけで、勝手に:point_up_tone1:のような映像演出分析してくれる「AI映像分析マン」がいたら色々捗るのでは:thinking:

そんな野望を抱き、Python初見の映像DがAI(Gemini)とペアプログラミングをして映像演出分析ツール開発に挑戦しました。

結果として、「AI映像分析マン」を作ることはできませんでしたが、学びはあったので、それを共有していきたいと思います。

最初のプロンプト

ちゃんと調べて打ったわけではなく、普通に文章を入力しただけで、
なんなら一行目から誤字ってるので、非常に恥ずかしいのですが・・・

以下のような文章を最初Geminiにつたえました。

Geminiに最初伝えた内容
やらいたいことがあります。実装できますか?

【やりたいこと】
学ぶための映像分析のめんどくさい箇所を自動化
なんなら、さらにその先も行えれば僥倖

【やりたいことを手動でやる場合の手順】
①現状分析したい動画をPremiereなどのタイムラインのせて、すべてのカット箇所にカット点をいれて、それぞれカットの長さを確認→エクセルに記載。
②また、それぞれカットのスナップショットを出力しエクセルに乗せる
③それぞれのカットがどのようなカットかを確認(カメラワークや、どのようなキャラクターがどういう演技をしているのか、どういうテキストを表示しているのか、などのカットの内容)→エクセルに記載。
④それぞれカットのレイアウト、アニメーション、カラーなどがどのような意図でそうされているのかを考察する。

【あなたにやってほしいこと】
分析してほしい動画ファイルをお渡しして、③までの事を行ったエクセルまたはスプレッドシートの出力、さらに演出の分析までできるとさらに良いです。

出力するスプレッドシートの見た目はパッと見絵コンテのような感じで、カットの該当タイム、その横に該当シーンのスナップショット、さらにその横にカットの概要、さらにその横に演出意図の仮説記入欄がある。みたいな感じです。
もっと良いものがあれば、それを採用しても良いので、提案してください。

Geminiからの提案に心躍る

最初のGeminiからの回答に夢は広がりまくりでした。

Geminiからの最初の回答

Geminiからの回答

結論から申し上げますと、実装は可能です。しかも、現在のAI技術(特にマルチモーダルAI)を使えば、かなり高い精度で自動化できます。

これまで数時間かかっていた「手動によるコマ送り・スクショ・書き込み」の作業を、プログラムを実行して待っているだけの数分〜数十分に短縮できる可能性があります。

ご要望の「③内容確認」と「④演出意図の考察(仮説)」を含めた、「自動逆コンテ生成ツール」の構成案と、さらに一歩進んだ提案をさせていただきます。

しかし!
最後に思い知ることになるのですが、これはあくまで机上の空論。
やっていくうちにできないことがたくさん見えてくることになります。。。:fearful:

Geminiに言われるがまま実装:wrench:

それぞれ細かいやり取りや手順は割愛しますが、Geminiに言われるがまま以下のことを行いました。

行ったこと

  1. Google AI Studio でAPI取得 (無料)
  2. Google Colabへ分析したい動画ファイルをアップロード
  3. Google ColabにてGeminiの書いたPythonコードを投入し実行
  4. 出力エクセルをGeminiに渡し、問題箇所をFB
  5. ひたすら 3と4を繰り返す:arrows_counterclockwise:

基本的にこれしかしてないです。

後ほど詳細記載しますが、この3と4のサイクルをひたすら回す中で出てきた壁が三つあり、結果的にやりたいことをいくつか断念する事になります。

アウトプットの変遷

それぞれの壁については、まとめて後述いたしますので、
まずは、今回の制作ツールを使用したアウトプットの変遷をご覧ください:pray_tone1:

ここでいうアウトプットとは、
動画ファイルをColabにアップし、Pythonで読み込み実行すると出力されるエクセルファイルです。

ちなみに、今回、解析のテストとして使用したのは、
イケメン王子より、ジンさんの続編PVです。

ジンさんの続編PV

1回目の出力:カット検知が正しくできていない / エラー頻出
image.png
結果:
・カット検知できていない:no_good_tone1:
・カメラ解析や考察欄はエラー:no_good_tone1:
・エクセルの形式は意図してた絵コンテ風の見た目だったので、大変満足:hugging:

ここからひたすら実行→FBを繰り返します:arrows_counterclockwise: :arrows_counterclockwise: :arrows_counterclockwise:

12回目の出力:壁の出現
image.png
image.png

結果:
・一見それっぽく出力されている・・・?:thinking:

 しかし

・演出上重要なカット切り替わりの際のカメラワークの検知ができていない:worried:
・アングルが判断できていない箇所が多数、やたらローアングル判定が多い:worried:
・考察を文脈ではなく、スナップショット単体から出力していることが判明:worried:

 :arrow_forward: :arrow_forward: :arrow_forward: コストと速度の壁文脈解析の壁

・カット検知がうまくいく箇所といかない箇所がある:worried:

 :arrow_forward: :arrow_forward: :arrow_forward: カット検知の壁

36回目(最終)の出力:壁への対応と諦念
image.png
結果(着地点):
・コストと速度の壁:3フレーム法を採用:fist:
・文脈解析の壁:実装中止 :put_litter_in_its_place:
・カット検知の壁:妥協案=高感度での検知に設定:thinking:
・機能追加①カラーパレット表示:bangbang:
・機能追加②カラーコード追加:bangbang:
・機能追加③Pintarestへの一発リファレンス検索:bangbang:

追加した機能について :gear:

試行錯誤の中で、がっつり解析と仮説を削除する際に、代替となるお役立ち情報を盛り込みたいと考えました。

そうするとカラー情報くらいかなぁ…。
あっ、あと似たようなリファレンスもっと見れたら便利かも!
というノリで入れています:innocent:

Pintarest表示例

このカットのURLから飛ぶと・・・
image.png

このような似たようなライティング、シチュエーションの絵が多数でてきます。
image.png

開発の壁とピボット

壁の詳細と、なぜ開発を中止したのかを順を追ってご説明いたします。

1. 演出分析に立ちはだかる二枚の壁 :sob: (序盤~中盤)

当初は動画そのものをAIに読み込ませて「このシーンの演出意図は?」と語らせようとしました。しかし、ここで大きな壁にぶつかりました。

二枚の壁

コストと速度の壁:
動画ファイルは情報量が多すぎて、APIの無料枠(トークン制限)を一瞬で突破してしまう。対処法として3フレーム法(後述)を採用。

文脈解析の壁:
AIは前後の文脈や、人間の機微(エモさ)を理解するのがまだ苦手。
1枚のスナップショットからは、「悲しいシーンです」くらいの考察しか出てきませんでした。また、先述したコストと速度の問題から、動画を断片的にしか読み込めないので、3フレーム法が完全に機能したとしても、文脈考察のスタートラインにたどり着けない。(=動画の時間的な変化を精度高く認識できない)

2. 「答え」を求めるのをやめた:innocent: (中盤)

「AIに考察させる(答えを出させる)」のは諦めました。 その代わり、「人間が考察するために必要な『材料』を最速で揃える」ことに方向転換しました。

AIとの役割分担

演出考察:
人間がやる。

作業:
カットの切り出し、スクショ撮影、配色の抽出、Pinterestの検索リンク生成。これらは全部AIにやらせよう。全自動化だ!

3. 三枚目の壁 :imp: (中盤~後半)

演出の自動考察をあきらめ、リファレンスツールとして使用していこうと決意したところに、更なる壁が立ちふさがりました。

カット割りくらい簡単だろう」と思っていたが、アニメOPやイラストMVなどに特有の「ゆっくりしたクロスディゾルブ」や「激しいカメラワーク」が鬼門でした。
もしかしたら、実写なら、この辺うまくいくかもしれません。

カット検知の壁

①ゆっくりしたクロスディゾルブ:
閾値(感度)を上げれば検知できるが、その他の通常カットで誤検知が増加。
感度が高い分、ちょっとの変化でも検知してしまう。

高感度時の誤検知例:一つのカットが複数カットとして認識されてしまう
image.png

激しいカメラワーク:
閾値を下げないと誤検知が増加。ただし、上記ゆっくりしたクロスディゾルブが検知不可になる。

低感度時の誤検知例:複数カットを一つのカットとして認識してしまう。
image.png

つまりはいたちごっこになっていしまいます。
検知しないよりは、検知したほうが良いか・・・ということで、最終的には高感度(Threshold:5.0)に設定しています。

4. 開発中止 :innocent: (結果)

このいたちごっこを解決するためでてきた案というのが、動画ファイル読み込み時に「秒数を人間が指定して強制的にカット位置を固定」というものでした。(後述)
これでは、当初目指していた自動化から脱線してしまいますし、現状でも、リファレンス収集ツールとして機能はするので、ここで今回の開発中止を決定しました!

自動化できたこと(勝敗表)

やりたかった機能 実装可否     結果の詳細
①カット箇所の自動検知 △ 条件付き 全自動は断念。ディゾルブ(クロスフェード)や激しい動きで誤検知が多発するため、手動補正機能を追加して解決。
②絵コンテ風エクセルの作成 ⭕ 成功 カットごとのスクショをExcelに自動貼り付け。これだけで数時間の時短。リファレンス収集機能も追加。
③映像分析(カメラ・カラー等) △ 部分的 動画そのものの動きではなく、静止画(3枚)からの推測に変更し、分析対象もカラーのみ。
④演出考察(文脈の理解) ❌ 失敗 二枚の壁により、AIに動画全体の「流れ」や「文脈」を理解させるのは、現時点では困難だった。

【技術パート】

正直、何をしているのかまったくわかっていませんが、Geminiとの対話でこういったことを実装したりしていたらしいです。

Q. 動画解析の「API制限」をどう回避したか?(3フレーム法)

動画ファイルをそのままAPIに投げると、データ量が膨大でエラー(429 Too Many Requests)になりますし、処理に何時間もかかります。

そこで、「動きがわかる最小限の静止画だけを送る」という手法(3フレーム法)を採用しました。

1つのカットから「開始点」「中間点」「終了点」の3枚だけ画像を抜き出す。

その3枚をAIに見せて「画像の差分から動き(パン、ズームなど)を推測して」と指示する。

# 1カットの中から3枚の画像を抽出するロジック
start_frame = scene[0].get_frames()
end_frame = scene[1].get_frames()
mid_frame = start_frame + (end_frame - start_frame) // 2

# OpenCVを使ってフレームを取得・保存
cap.set(cv2.CAP_PROP_POS_FRAMES, mid_frame)
ret, frame = cap.read()
cv2.imwrite("mid.jpg", frame)

これだけでデータ量が数千分の一になり、サクサク動くようになりました。

Q. 「カット割り検知」はどうやって自動化したのか?

ここにはAI(大規模言語モデル)ではなく、「PySceneDetect」というPythonのライブラリを使用しました。これは「画素(ピクセル)の変化量」が一定の基準を超えた瞬間をカットの変わり目として判定する仕組みです。

from scenedetect import VideoManager, SceneManager
from scenedetect.detectors import ContentDetector

video_manager = VideoManager([video_path])
scene_manager = SceneManager()

# 感度(Threshold)は 27.0 ~ 5.0の間でいろいろ試し、妥協して5.0に落ち着きました。
# 早いカット割りや、テキストのカットで誤検知が多発します。
scene_manager.add_detector(ContentDetector(threshold=5.0))

video_manager.start()
scene_manager.detect_scenes(frame_source=video_manager)

Q. なぜ「ディゾルブ(クロスフェード)」で失敗したのか?

理由:変化が「なだらか」すぎる

  • 通常のカット切り替え(パッと画面が変わる)は、画素の変化量が「ドカン!」と跳ね上がります。

  • しかし、ディゾルブ(じわじわ変わる)は、1フレームごとの変化量が微々たるものです。

  • そのため、プログラムは「まだ同じカットが続いているな」と判断してしまい、スルーしてしまいます。

あちらを立てればこちらが立たず

  • 「微細な変化も拾う」ように感度を上げると、今度は「カメラがちょっと動いただけ」や「テロップが出ただけ」でもカットとして検知してしまい、過剰検知(切れすぎ)状態になります。
  • この調整に時間をかけすぎるよりは、「人間が目視で確認して、手動でタイムスタンプを指定する」方が、結果的に早いという結論に至りました。
# 最終的な解決策:自動検知 + 手動リストのハイブリッド
scene_list = scene_manager.get_scene_list()

# 手動で指定した秒数(ディゾルブ箇所など)を強制的に追加
MANUAL_CUTS = [3.5, 8.2] # 秒数指定
# ... (これをフレーム数に変換してリストにマージする処理) ...

まとめ :point_up:

結果として:

動画・カットの種類によっては、うまく検知できないものがあるため、ボタン一つで完璧な結果が出る「実用レベル」の全自動化までは持っていけなかった:crying_cat_face:

また、今更ですがサウンドについて当初、頭から抜けてしまっており、演出考察にはその辺もかなり重要だよなぁ・・・と機能を削除していく段階で思ったりしました。

ただ、まったく初見でもPythonでの便利ツール作成ができることがわかったので良かったです。


来週月曜日のCYBIRD Advent Calendar 2025 6日目は、
池田 千賀子@chikako_ikedaさんの「Androidのライブ壁紙を作ってみた〜アセットはnano bananaに任せ…られるのか?〜」です!:point_up:

動く壁紙でしょうか? 気になりますね?
こちらも宜しければ是非ごらんください!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?