video-to-deck は何をしますか?
動画からプレゼンテーションを作成します。あなた(モデル)はテキストのみ — 音声を聞いたりフレームを見たりできません。
そのため、このスキルのスクリプトが「見る」と「聞く」を担当し、テキストのエビデンスバンドル(evidence.md)をあなたに渡します。
あなたの仕事は統合のみです:エビデンスを読み、良いデッキを書くこと。エビデンスが裏付けていないものを創作してはいけません。
出力はMarpマークダウン(deck.md)です:今すぐ読める通常の.mdであり、後でrender.shコマンド1つで本物のスライドデッキ(PPTX/PDF/HTML)になります。
$SKILL 以下 = このスキルのディレクトリ(このファイルを含むフォルダ)。
手順
1. 一度だけのセットアップ(冪等)
bash "$SKILL/scripts/setup.sh"
faster-whisper(文字起こし)、tesseract(OCR)、およびnpmが存在する場合はmarp-cliとmermaid-cliをインストールします。再実行しても安全です。ffmpegは事前にインストールされている必要があります。
2. 動画を探す
bash "$SKILL/scripts/find_videos.sh" "<folder>" # 1行に1つのパス、再帰的
単一の名前付きファイルの場合は、これをスキップしてパスを直接使用します。
3. 各動画のエビデンスバンドルを構築する(一度に1つ)
bash "$SKILL/scripts/process_video.sh" "<video>" "<out_dir>/<video-stem>"
これにより、音声を抽出→文字起こし、キーフレームをサンプリング→画面上のテキストをOCRし、
<out_dir>/<video-stem>/evidence.md(およびtranscript.txt、segments.tsv、frames/、
ocr.txt)を書き出します。CPUで長い動画は遅くなります。品質のためにWHISPER_MODEL=smallを設定するか、
CUDA GPUを使用して高速化します(自動検出、scripts/transcribe.pyのWHISPER_DEVICEを参照)。
動画は並列ではなく逐次的に処理します。
オプションのビジョンパス(Qwen-VL)。 OCRはテキストのみを読み取ります。テキストでは捉えられないもの(
グラフとそのトレンド、図、UIレイアウト、話者のジェスチャー)もキャプチャするには、保存された各キーフレームに
キャプションを付けるビジョンモデルを有効にします。デフォルトではオフです。同じコマンドの環境変数で
VISION_MODEL(および必要に応じてVISION_ENDPOINT)を設定してオンにします:
VISION_MODEL=qwen2.5-vl \
VISION_ENDPOINT=http://127.0.0.1:8081/v1/chat/completions \
bash "$SKILL/scripts/process_video.sh" "<video>" "<out_dir>/<video-stem>"
オンにすると、evidence.mdにOCRとともに**「## 視覚的な説明」**セクションが追加されます —
グラフ/図のスライドに使用します。OpenAI互換のビジョンエンドポイントであれば何でも動作します
(llama-swap / llama.cpp / Ollamaなどのローカルサーバー、またはホスト型API、トークンが必要な場合はVISION_API_KEY)。
エンドポイントに到達できない場合も、OCRのみで実行は続行されます — 何も壊れません。
4. デッキを書く
evidence.md全体を読んでください。"$SKILL/templates/deck.marp.md" を <out_dir>/<video-stem>/deck.md
にコピーし、埋めてください。ルール:
marp: trueフロントマターを維持 — これがスライドデッキにするものです。- 話された内容には文字起こしを使用;正確なラベル、数字、タイトル、スライドに表示されたコードにはOCR/画面上のテキストを使用; **「視覚的な説明」**セクションが存在する場合(ビジョンパスが有効だった場合)、OCRでは伝えられない グラフ/図/UIに使用します。
- 主張には必要に応じてタイムスタンプを付けます:
[00:04:12]。 - スライドのキーフレームをスライドに配置 — これはオプションの飾りではなく、デフォルトです。
ocr.txt内の### [timespan] frames/kf_####.jpgブロックは、そのスライドの代表フレームを指定しています。 それをデッキスライドに反映させます:。キーフレームはスライドのエビデンスであり、 箇条書きでは説明できない図/チャート/UIを示し、デッキが元のプレゼンテーションを反映するようにします。 スライドがMermaidで書き直した純粋な図のスライドである場合、またはフレームに視覚的な信号がない場合 (話しているだけのヘッド、空白のトランジション)にのみ省略します。1つの元スライドから2つのデッキスライドが 生じる場合は、同じスライドの2つの異なるフレームを使用し、同じフレームを繰り返さないでください。 - エビデンスが裏付けているものだけを含めます。文字起こしとOCRが両方とも空の場合は、デッキを 創作するのではなく、動画に抽出可能なコンテンツがなかったと述べてください。
密度 — デッキはエビデンスを統合する必要があり、要約して消してはいけません。 最もよくある失敗は薄っぺらいデッキです:4語の箇条書きが20スライドで、動画に実際に含まれていた ほとんどの内容を捨ててしまいます。エビデンスバンドルの構築はコストがかかります。デッキは人々が読むものです。
- 元のスライドごとに1つのデッキスライド。 OCRセクションの各
### [timespan] frames/…ブロックは 動画の1つの実際のスライドです — そのリストがあなたのチェックリストであり、おおよそのスライド数です。 3つの元スライドを1つの箇条書きに統合しないでください。40分のトークは通常30~45スライドです。 - 具体性をスライドに載せてください。 エビデンスに存在するすべての数字、指標、しきい値、パーセンテージ、 製品名、CRD、設定キー、ラベルはスライド自体に含めるべきです。元のスライドに6つの箇条書きと4つの統計が あった場合、あなたのスライドには6つの箇条書きと4つの統計があるべきです — 「精度が向上しました」ではありません。
- 箇条書きは完全な行(約15~20語)であり、4語ではありません。 1スライドあたり5~8個が標準です。 簡潔であることは、元のスライドが簡潔だった場合にのみ正しいです。
- 元のスライドが表形式の場合はテーブルを使用 — ルーティングマトリックス、ベンチマークグリッド、 レベルの定義、優先順位ルールなど。サンプルではなく、すべての行と列を再現してください。
- スピーカーノートは付加的であり、スライドにはないが言われたこと(注意点、実体験、「なぜ」、 Q&Aの詳細)に使用します。スライドに属する内容を隠す場所ではありません。
- 終了前にカバレッジチェックを行ってください。
ocr.txtの### [..]ブロックを順番にたどり、 それぞれが表現されていることを確認してください。ブロックをスキップした場合、それは前のスライドの 重複/アニメーションか、デモフレームのいずれかです — どちらであるかを言えるようにしてください。
5. 図のパス(「これは図にできるか?」のチェック)
各トピックについて、次のように問いかけてください:これは構造的か(コンポーネント+接続、アクター間の
相互作用、プロセス/フロー、状態+遷移、エンティティ+関係)? はいの場合、箇条書きの代わりに、
独自のスライドにMermaid(デフォルト)またはPlantUML図として描画してください。
"$SKILL/references/diagrams-cheatsheet.md" を参照して、コンテンツ→図の決定テーブルと
コピペ用の骨格を確認してください。内容が単なるナラティブの場合は、図を強制しないでください。
6. (オプション)実際のスライドデッキをエクスポートする
bash "$SKILL/scripts/render.sh" "<out_dir>/<video-stem>/deck.md" pptx # または pdf | html | all
これにより、図ブロックが画像にプリレンダリングされ、PPTX/PDFが生成されます。marp/mermaidが
インストールされていない場合、デッキは単に.mdのままになります(それでも有効で表示可能です)。
ツリー全体を一度に処理するには、render.shをデッキごとに呼び出す代わりに、バッチドライバー(下記)に
--pdfを追加してください。
バッチ / ネストされたフォルダ
フォルダ全体、特にネストされたコースツリーの場合、scripts/drive_decks.sh <root>を推奨します:
これはbashでループし、動画ごとに新しいエージェントを生成して(モデルのコンテキストをあふれさせない)、
出力に元のサブフォルダをミラーリングするため、親→子の階層が保持されます。
scripts/rename_by_topic.sh <decks> はその後、各リーフをコースフォルダ内のトピックでスラッグ化します。
--pdf を追加すると、作成が完了したらすべてのデッキがPDFにエクスポートされます —
Mermaidは画像にプリレンダリングされ、リーフフォルダは統合されるため、各PDFは親に配置されます
(<out>/CourseA/lesson/deck.md → <out>/CourseA/lesson.pdf)、PDFごとのサブフォルダを回避します。
古い実行でフラットに生成されたデッキの階層を再構築するには、scripts/regroup_by_source.sh <decks> を使用します —
各 evidence.md の Source: 行を読み取り、各デッキをコースの親の下に配置します(重複は _duplicates/ に隔離)、
その後 rename を実行します。完全なバッチガイドについては README.md を参照してください。
参考資料
references/marp-cheatsheet.md— Marpスライドの構文(セパレーター、画像、ノート、カラム)。references/diagrams-cheatsheet.md— いつ図を描画すべきか、および各タイプの構文。
注意事項
- OCRはスクリーンキャスト/スライド動画の画面上のテキストをうまくキャプチャします。実写映像の場合、 文字起こしがほとんどの情報を提供します — それに依存し、視覚情報について過大に主張しないでください。
- 文字起こし、OCR、レンダリングは常にローカルで行われます。オーサリングステップがマシンを離れるかどうかは、
--agent-cmdで指定するエージェントに完全に依存します。 - 設計はモデルに依存しません:bashを実行でき、ファイルを読み取れる任意のテキストエージェントがこのスキルを 使用できます。
