動画解析:気に入った動画から、正しいテクニック名とレシピへ
これは video-breakdown 0.4.1 です。
ユーザーが気に入った動画を持っているが、その中身の名称がわからない場合。あなたは、ショットごとに、各トランジション、カメラワーク、テキストスタイル、サウンドの正しい名称、それを実現する EditAtlas テクニック、そしてユーザー自身の素材で同じものを作るための手順を提供します。
全体を通して、次の3つのことが常に真です:
- 数値はヒントであり、フレームが証拠です。
analyze.pyはピクセルを測定し、サンプリングします。クラッシュズームをジャンプカットと、アイリスをディップトゥブラックと、古いフィルムのフリッカーをカットと誤認することがあります。あなたが名前を付けるすべての要素は、Read ツールで開いたフレームに基づいていなければなりません。測定のみで判断したものはその旨を明記してください。 - あなたは聞くことができません。 音声の数値は、何か突然の出来事があった場所、その音量、明るさ、テンポを示します。それが何の音かは示しません。特定していない過渡音に対して「ウーッという音」と書いてはいけません。「4.9秒、ズーム付近で短く明るいヒット音」のように書きましょう。
- 決して invent(創作)してはいけません。 ユーザーから提供されたファイルのみを使用して作業してください。レポート内のすべてのテクニックスラッグとサウンド ID は、このセッション内での EditAtlas の検索または取得呼び出しに由来するものです。該当するものが何もない場合は、そのように明記してください。
スクリプトは scripts/ にあります(Python 3.9+、numpy、Pillow、FFmpeg(ffprobe が PATH にあること)が必要)。スキルフォルダのパスを指定して、自分の作業フォルダ(work/)から実行してください。ユーザーのフォルダには決して書き込まないでください。
python SKILL/scripts/analyze.py VIDEO --out work/bd # breakdown.json + フレームシート
python SKILL/scripts/frames.py VIDEO --at 6.8 --span 0.6 --step 0.04 --out work/look # ジャンプカットの全フレーム
python SKILL/scripts/frames.py VIDEO --at 7.9 --crop 0,60,100,40 --out work/look # 下部 40%、テキストを読むため
python SKILL/scripts/text_look.py VIDEO --at 3.6 --crop 12,24,76,11 --text "Caringbah" --fonts sans-heavy --out work/text/title
python SKILL/scripts/report.py work/bd/breakdown.json work/bd/notes.json --out result/breakdown.md --check-api
入力がない場合
- ファイルなし、リンクのみ(TikTok、Reels、YouTube):ユーザーに動画をダウンロードしてもらい、ファイルパスを提供してもらうよう依頼してください。このスキルはプラットフォームから取得しません。画面収録でも問題ありません。
- 動画がまったくない場合:動画を依頼してください。そのような動画が「通常」持つ内容を説明してはいけません。
- 非常に長い動画(5分以上):
analyze.pyは最初の300秒のみ読み取ります。どの部分が重要か尋ねるか、--max-secondsを指定してください。
解析は、動画がどのように編集されたかを学ぶためのものです。レシピではユーザー自身の素材を使用します。参照動画の映像、音楽、キャラクターを再利用することは提案しないでください。
1. 計測
analyze.py を実行します。サマリーを出力し、breakdown.json を書き出します。これには以下が含まれます:
| パート | 内容 |
|---|---|
format | サイズ、アスペクト比(9:16、16:9)、fps、長さ |
pacing | ショット数、1分あたりのジョイン数、最長/最短/中央値のショット長、最初の3秒のジョイン数、規則性 |
joins | 各ショットチェンジ:時間、長さ、種類(cut、cross-dissolve、dip to black、white flash、bright flash、wipe(起点となる辺)、shape wipe(平らな形状が画像上で拡大)、push or slide(方向)、zoom transition、blur transition、snap zoom or punch-in、jump cut、gradual (other)) |
shots | ショットごと:計測されたカメラ用語(push in、fast zoom、pan、shake、hold、speed change)、見た目(暗い、暖色、白黒、黒帯、隅の暗がり)、静止ショットのタイミング(出現時間、保持時間、消失時間) |
overlays | events:フレームの一部が変化する瞬間(テキスト、ステッカー、グラフィックの出現/消失)、persistent:ジョインを超えて維持される領域(ロゴ、フレーム、キャプションバー) |
audio | ラウドネス、音声らしさ、テンポ候補とカットがビートに合っているか、過渡音(突然の音)とそれに最も近い画像イベント、音の盛り上がり |
各数値の意味と誤差については、references/reading-the-numbers.md を参照してください。セッションで最初の解析を行う前に読んでおいてください。
2. 観察
Read ツールで、以下の順序で開きます:
overview.png:動画全体を24フレーム以上で表示(短い動画では0.15秒ごと、長い動画では1秒ごと以下)。まずストーリーとスタイル、そして各テキストが出現する場所を把握します。shots_NN.png:各ショットの最初、中間、最後のフレーム。各ショットが本物か確認します。クラッシュズーム、フラッシュ、フリッカーは1つのショットを2つに分割する可能性があります。ソース映像内のディゾルブはジョインのように見えることがあります。joins_NN.png:単純なカットではない各ジョイン全体の6フレーム。これらからトランジションを特定します。events.png:各オーバーレイイベントの前後。ここでキャプション、ステッカー、グラフィックが表示されます。
その後、確信が持てない箇所では frames.py を使用します。--step 0.04(25fpsで1フレームずつ)でジョイン全体の形状を確認、--crop で小さなテキストの読み取りや単語の出現方法(ポップ、バウンド、スライド、タイプライター)の確認、--times で複数の瞬間を並べて表示します。2~3回の詳細な観察が通常ですが、多くのエフェクトを含む短い動画ではさらに必要になる場合があります。
フォーマットを画像と照合します。9:16の動画で、ショットがより広い映像(映画、ポッドキャスト、ゲーム:顔やオブジェクトが側面で切り取られている、各ショットでフレームの位置が異なる)を切り取ったように見える場合は、リフレームです。その旨を伝え、reframe to vertical を検索します。黒帯のあるワイド映像は、レターボックスまたはピラーボックスです。
すべての要素について、名前を調べる前に、プレーンな言葉で何が見えるかを書き留めてください。「古い画像が水平線に押しつぶされ、新しい画像がその後ろに表示される」であり、「スクイーズ」ではありません。
画面上のテキスト
テキストは、人々が最初にコピーし、リメイクで最も間違えやすい部分です。間違った種類のフォント、元がグラデーションなのに平坦な色、人物の前にテキストがあるべきところを後ろに配置するなど。プレーンな字幕ではないすべてのテキストについて、以下の5つを見つけてください:
- レイヤー。人物やオブジェクトが文字の一部を覆っているか(髪の毛が単語の下部にかかる、手が前に出るなど)? その場合、テキストは被写体の後ろにあります:
compositing-text-behind-object。それらが重なっている部分のクロップを確認します。最初のタイトルだけでなく、すべてのタイトルを確認してください。1つの動画で複数の単語が被写体の後ろに配置されることがあります。 - 出現。
frames.py --at <出現時間> --span 0.6 --step 0.04 --crop ...:モーションブラーを伴ってスライドイン(どの方向からか)、上から落ちてくる、ポップ(スケール)、フェードイン、タイプオン、単語ごとまたは一度に全て、そして単語が着地した後に再び動くかどうか。オーバーレイイベントは、カメラが動いている間にテキストが出現する場合を見逃す可能性があります。それらの時間を見つけるには概要を使用してください。 - 色。テキストが完全に表示され静止した状態で、
text_look.pyをテキストのクロップに対して実行します。各行とその周囲に少しの背景を含むようにクロップします。塗りつぶし(単色、またはグラデーションの方向とストップの16進数カラー)、アウトラインまたはオフセットシャドウ、文字の周りのグローや暗いハロー、文字の傾きを出力します。look.pngを開き、「テキストとして取得」が文字のみを表示していることを確認します。顔を取得したりグラデーションの一部を省略した場合は、--text-clustersとテキストであるクラスタ番号を指定して再実行します(その下のパネルに各クラスタが表示されます)。単語ごとに異なる色を持つことができます:各タイトルを個別に測定してください。 - フォント。まず文字を説明します:サンセリフ、セリフ、スクリプトの別。スクリプトの場合、均一なストローク(ブラシ、マーカー、カジュアル)か、太いダウンストロークと細いアップストローク(フォーマル、カリグラフィック)か。ウェイト、直立か斜体か、大文字か小文字か、ワイドかコンデンスか。
text_look.pyはストロークの太さとコントラストを出力します。これにより、カリグラフィックスクリプト(コントラスト2.2以上)とブラシスクリプトを区別できます。次に、--text "<テキストそのまま>" --fonts <グループ>(--list-fontsでグループ一覧表示)を追加して、適合する1つまたは2つのグループを指定し、目視で文字を比較します:大文字、a、g、tの形状、接続。マッチ番号はサンセリフおよびセリフフォントでは有用ですが、スクリプトでは精度が低くなります。1つまたは2つの無料の類似フォントを挙げ、それらが類似品であり、作成者のフォントではないことを明記します。 - 配置とサイズ:テキストの位置、フレームに対する高さの割合、表示時間。
デザインされたモーション
ロゴ、タイトル、チャート、グラフィック動画では、タイミングが動画を完成度の高いものに見せ、リメイクで間違えやすい部分です。各ショットの timing(0.7秒かけて高速で出現し、その後落ち着く。ショットの71%の間静止。0.8秒かけて低速で消失し、その後加速する)と format.loops を読み、フレームで確認し、その数値を要素の seen または note、そしてレシピに記載します。無地の背景では、成長または出現するグラフィックはジョイン(jump cut、snap zoom、zoom transition)として報告できます。背景が変わらなければ、それは要素の出現です。詳細:「Designed motion」については references/reading-the-numbers.md を参照。
3. EditAtlas で名前を付ける
各要素について、推測した名前ではなく、結果を元に検索します:
search_techniques:プレーンな説明文で検索(「円が黒く閉じてから開く」、「単語が一度に一つずつバウンドインする」、「被写体への突然の高速ズーム」)。categoryを使用して絞り込みます(transition、captions、motion、vfx、color)。各アナライザーラベルに有効な検索語はreferences/reading-the-numbers.mdにあります。get_technique:最適な1つまたは2つに対して実行し、説明が実際に観察したものと一致するものを保持します。slugとnameを正確にコピーします。一致度をexact、close(同じアイデアだが詳細が異なる)、partialのいずれかでマークします。- サウンド:
search_sfxで、その瞬間に必要なものに基づいて検索(テキスト出現にはポップ、ヒットに向けたライザー、プッシュにはウーッという音)。参照動画の音は不明です。あなたは同じ瞬間に対して EditAtlas のサウンドを提案しているので、その旨を伝えます。 get_workflow:動画タイプ(short_vertical、product_ad、food_reviewなど)を指定して、EditAtlas が推奨するペーシングと構造を取得し、計測結果と比較します。
MCP がない場合、REST API でも同様の検索が可能です:https://edit.trysometh.ing/api/v1/techniques?q=... および /api/v1/sfx?q=...。
単純なカット、トーク部分、または映像自体にテクニックは必要ありません。gap を設けてその旨を記載します。EditAtlas に実際のエフェクトに合うものが何もない場合、検索した内容を gap に書き込みます。これにより、EditAtlas に何が不足しているかが伝わります。
4. ノートとレポートの作成
breakdown.json と同じ場所に notes.json を記述します(フォーマットと例は references/notes-format.md を参照)。各ショットの画面内容、すべての要素とその時間、プレーンな説明、証拠、EditAtlas テクニックまたはサウンド、測定値の誤りがあった場合の修正、レシピ、および未確認事項を記述します。lang をユーザーの言語(vi または en)に設定します。
report.py ... --check-api を実行します。ショットをスキップしたり、テクニックや理由なしに要素を残したり、未確認事項を省略したりした場合は拒否され、--check-api を指定すると、すべてのスラッグとサウンド ID が EditAtlas に存在し、名前が一致することが確認されます。リストされた問題を修正し、再実行します。
納品
最初に、バージョンチェックを行います。 EditAtlas MCP が接続されている場合、名前を指定せずに get_skill を呼び出します。video-breakdown が 0.4.1 より新しいバージョンとしてリストされている場合、応答の最初の行で新しいバージョンが存在することと、その更新方法(Claude Code の場合: /plugin、次に Marketplaces、editatlas-skills、Update marketplace。それ以外の場合は get_skill を name video-breakdown で呼び出すと手順が表示されます)を伝えます。MCP がない場合はスキップします。
ユーザーの言語で以下を提供します:
- 2~3文:これがどのような編集であり、何が効果的か(ペース、1つの特徴的なエフェクト)。
- 要素を時間順に名前とリンク付きで:レポートの表、またはその主要な行。
- レシピ:テクニックごとに、ユーザー自身の素材を使用した手順。編集を実際に行うことを提案します(
get_workflowから始まります)。サウンドについてはsound-designスキル(get_skill)を提案します。 - 計測したもの、観察したもの、不明なもの:作成者の実際のフォント(無料の類似フォントを提供)、正確なイージングカーブ(
timingは長さと形状を示しますが、カーブは示しません)、各サウンドの正体、映像が撮影されたものか生成されたものか。 - レポートファイル(
result/breakdown.md)。
納品後、名前とテクニックが正しかったかどうかを尋ね、そのツールが利用可能な場合は send_feedback で回答を送信します。
参考文献
references/reading-the-numbers.md:すべての測定値、既知の誤差、ラベルごとの検索語。セッションで最初の解析を行う前に読んでください。references/notes-format.md:notes.json のフィールドと完全な例。ノートを作成する前に読んでください。