Communitygithub.com

RobinSp5/講義動画ナレーター

講義資料(通常はスライドのPDF)を、選択可能な言語で、AI音声によるナレーション付きの単一MP4解説動画に変換します。自己学習や試験対策に最適です。

講義動画ナレーター とは?

このスキルは、大学の講義スライドやスクリプトなどの教材を、完全にナレーションされた解説MP4動画に変換します。OpenRouter MCPを介してAI音声を生成し、読みやすく視覚的に優れたグラフィック、スライド画像、数式、コード、SQLなどを含む高品質な動画を作成します。ユーザーは動画の種類(短い要約または包括的な要約)、ナレーションの有無、言語(スライドと同じ、ドイツ語、英語、またはカスタム)、長さ、外観(色調、スタイル)、概要、セルフテスト質問の数を選択できます。このスキルは、ユーザーが「動画にして」「説明して」「勉強用に作って」などと依頼した場合に常に使用されるべきであり、Claude内で直接MP4ファイルとしてダウンロード可能な最終成果物を提供します。すべての技術的処理は環境側で実行されるため、ユーザーはコードを実行したりAPIキーを貼り付けたりする必要はありません。

対応✓Claude Code~Codex CLI~Cursor✓Gemini CLI
npx skills add https://github.com/RobinSp5/lecture-video-explainer-skill/tree/HEAD/lecture-video-explainer

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

講義動画ナレーター は何をしますか?

目標:受講生が講義に出席しなくても内容を理解し、試験前に素早く復習できるようにすること。そのため、この動画は学習ツールであり、ショーケースではありません。講義に忠実で、簡潔に説明され、記憶に残りやすく、常に読みやすいものでなければなりません。

3つの原則がすべての判断を導きます。

  1. 何も創作しない。 すべての記述、数値、定義、グラフィックは講義資料に基づいています。簡略化は歓迎しますが、事実を追加することは禁止です。試験後にこの動画を見た人が、内容が講義にこのまま含まれていたと信頼できるものでなければなりません。
  2. すべて読みやすく、途切れなし。 テキストが半分しか見えない、はみ出している、フォントが小さすぎる、といったことは許されません。一文字でも欠ければ、動画全体への信頼が損なわれます。
  3. 流暢な音声、落ち着いた映像。 ナレーターは長い間を空けません。見るべきものが多い場合は、動画は次のシーンに移る前に少しその場面で止まります。これは優れたプレゼンテーションと同じです。

成果物は完成した動画であり、Claude内で直接1つのMP4としてダウンロード可能です。 ユーザーはコード、スクリプト、コマンドを実行したり、APIキーを貼り付けたりする必要はありません。すべての技術的な処理は、この環境が提供するツールを使用して、あなたの側で行われます。プレーヤーや追加ファイルは、ユーザーが明示的に要求しない限り(字幕ファイル、書き起こし、概要表)提供されません。

ユーザーとは、ユーザーが使用する言語で会話してください。動画の言語は別途選択します(フェーズ1、ステップ1)。

2つのモードがあり、最初の質問で選択します:ナレーション付き(OpenRouter経由のAI音声、デフォルト)と視覚のみ(音声なし – 画面上のテキストとグラフィックですべてを説明、下記「視覚のみモード」参照)。このファイルでナレーション、TTS、音声について言及している場合は、特に断りのない限りナレーションモードにのみ適用されます。

ワークフロー

フェーズを順に進めてください。フェーズ1は必須の停止点です。TTSにお金が費やされるのは、ユーザーがモード、言語、モデル、長さを確認した後です。

フェーズ0 – 資料を読む

  1. この環境が提供するものを、黙って確認します:OpenRouter MCPコネクタ(音声用)、組み込みの動画/アニメーション出力(MP4エクスポートまたはダウンロード可能、例:Claude Design内)、および/またはコード実行(ffmpeg + Chromiumscripts/render.py用)。フェーズ7で出力パスを選択します。ユーザーに何かをインストールさせたり、実行させたりしないでください。
  2. scripts/extract_pdf.pyでPDFを抽出します:
    python3 scripts/extract_pdf.py <pdf> <workdir> [--images]
    
    これにより、pages.json(テキスト、語数、ページごとの画像数)、各ページのPNGプレビュー、および --images オプションで埋め込み画像が生成されます。pymupdfがない場合:pip install pymupdf --break-system-packages。
  3. (テキストだけでなく)ページプレビューを見てください。図、表、プロセス図は画像としてのみ存在することがよくあります。 スキャンされたページ(出力 "SCANNED/no text")の場合:--ocr オプション(Tesseract、資料の言語パック、例:--ocr-lang deu+eng)を付けて再実行します。Tesseractまたは言語パックがない場合は、プレビュー画像を見て、自分でテキストを読んでください。スクリプトで専門用語や数値を使用する前に、OCRテキストを画像と照合して常に校正してください。
  4. 資料から以下を特定します:コース名、このユニットのトピック、講師/教授、資料の言語、サマリースライドの有無、およびコンテンツがないスライド(タイトル、アジェンダ、参考文献、「質問は?」など)。資料にないものは推測せず、フェーズ1で質問してください。
  5. スライド内の未回答の質問: pages.json には、ページごとに questions がリストされています。これらは、視聴者に何かを尋ねる行です(「どう思いますか:…?」、「…の利点は何ですか?」、「議論:…」、「あなたへの質問」、「なぜ…でしょうか?」)。これらはすべて動画内で回答されます(フェーズ2の「未回答の質問」を参照)。スライドも自分で読んでください。グラフィックや吹き出し内の質問は常に検出されるとは限りません。
  6. 講義か演習か? pages.json には exercise_guess があります(「Übung」、「Aufgabe」、「Übungsblatt」、「Exercise」、「Task」、「Assignment」、a)、b)、c) のような番号付きタスク)。読んで確認してください:演習シートは学習者に何かを行うように求めます。演習(または演習スライドを含む講義)の場合、動画は演習を解きます – 下記「演習モード」を参照。解答シートや解答スライドが一緒に提供されているかどうかも確認してください。

フェーズ0は黙って実行します:最初の質問(フェーズ1、ステップ1)の前に、ユーザーに他には何も質問せず、資料の要約も行いません。抽出は、「スライドと同じ」オプションが検出された言語を指定できるようにするためにのみ存在します。

フェーズ1 – ユーザーに質問する(必須、生成前)

ステップ1 – 動画の種類、ナレーション、言語(常に最初のメッセージ)

最初のメッセージには、これらの3つの質問のみが含まれ、それ以外は何も含まれません(該当するツールがあれば、3つのタップ可能な質問として)、ユーザーの言語で、動画の種類が常に最初になります。ドイツ語を話すユーザーの例:

1. どんな動画にしますか?

  • 短い要約 – 最も重要なことだけ:核となる概念、中心的な関係、試験に関連するもの。迅速な復習に最適です。
  • 包括的な要約 – 資料のすべてのトピックを、説明と例を交えてカバーします。講義の代わりになります。

2. 動画にナレーションを付けますか?

  • はい、ナレーター付き(AI音声) – 講義のように説明します。数セントかかります。
  • いいえ、視覚のみ – 説明はテキストとグラフィックとして画像内に表示され、音声はなく、無料です。

3. 動画の言語は何にしますか?

  • 資料と同じ(ドイツ語) ← 検出された言語を括弧内に
  • ドイツ語
  • 英語
  • 他の言語(自由記述)

動画の種類が最初に来るのは、動画に何を含めるか、どの長さが適切かを決定するからです:

  • 短い要約: コアのみ – 重要な用語と定義、中心的な関係、試験に関連するものすべて、およびサマリースライド。例、派生、副次的なトピックは省略されます。講義の各章に1、2文で触れることはありますが、深く掘り下げるのはコアのみです。
  • 包括的な要約: 資料のすべてのトピックがカバーされます – 各コンテンツページは少なくとも1つのシーンに含まれ(フェーズ6で scripts/coverage.py を使用して確認)、講義の順序で、講義が提供する説明と例とともに表示されます。何もスキップされず、凝縮されるのみです。
  • 演習の場合:短い = 各タスクのアプローチを1、2文 + 結果で説明。包括的 = 完全な解決手順をステップバイステップで説明。

ナレーションはその次に来るのは、それが後続のすべてを変えるからです:「視覚のみ」の場合、モデルの質問、コストはなく、動画の作り方も異なります。

検出された言語がドイツ語や英語であっても、「資料と同じ」を保持します – これがデフォルトです。言語が混在している資料の場合は、主要な言語を指定します(「資料と同じ(主に英語)」)。

選択された言語は、すべてに適用されます:ナレーション、画面上のテキスト、イントロ、要約、「見てみましょう」などのラベル、TTS配信指示。また、どのTTSモデルが適格か、および単語予算とコストの計算方法も決定します – だからこそ最初に来ます。

動画の言語がスライドの言語と異なる場合は、references/didactics-and-script.md の翻訳ルールを適用します(講義の専門用語は表示されたままにします。試験で使用されるため)。ナレーションモードで「他の言語」の場合:まず、どのTTSモデルがそれを適切にサポートしているかを簡単に確認します。サポートしていない場合は、その旨を率直に伝え、代替案(視覚のみを含む)を提案します。

ステップ2 – 長さ、モデル、主要データ、概要、クイズ(1メッセージ)

ステップ1の回答があった後にのみ。視覚のみモードの場合、b)(モデル)をスキップし、コストを記載しません。その場合、ステップ4(音声)はありません。

資料が演習の場合は、このメッセージの先頭に1行でその旨を伝えます(「これは4つの課題がある演習シートです。すべて動画で段階的に解決します。」) – 追加の質問はありません。その場合の長さの提案は、ページ数ではなくタスク数に基づきます(タスクの規模にもよりますが、1タスクあたり約45~90秒)。

a) 動画の長さ。 ステップ1の動画の種類に合った長さを、コンテンツページ数(n)から導き出して提案します – estimate.py lengths --content-pages n --type short|comprehensive:

動画の種類オプション(目安)例:30ページの場合
短い要約非常に短い n × 4 秒 · 短い n × 6 秒(デフォルト)~2 / ~3 分
包括的な要約コンパクト n × 10 秒 · 標準 n × 14 秒(デフォルト) · 詳細 n × 18 秒~5 / ~7 / ~9 分

30秒単位で丸めます。「包括的」の場合、ユーザーが n × 8 秒未満の長さを選択した場合は、1文で警告します:すべてのトピックはカバーされますが、非常に簡潔になります。ユーザーが決定します。カスタムの長さは常に許可されます。

b) TTSモデルとこの動画の正確な価格(ナレーションモードのみ)。手順とコストの計算式は references/tts-models.md にあります – 質問する前に読んでください。簡易版:

  • OpenRouter MCP(list-models、output_modalities: "speech"、価格順にソート)を介して現在のTTSモデルをライブで取得します。価格とモデルは変更されます – 記憶から回答しないでください。
  • 選択された動画の言語をサポートするモデルにフィルタリングします。
  • 3~4のモデルを提供します。最も安価で優れたものを最初に(できればGoogle Gemini Flash TTSのバリエーション)、それぞれに選択された長さの推定価格を付けます – scripts/estimate.py で計算します。
  • 長さがまだ決まっていない場合:3つの長さオプションすべての価格を提示します。
  • 選択は確定です。 ユーザーがOpenRouterモデルを選択した場合、その正確なモデル(同じモデルID、OpenRouter MCP経由)をこの動画のすべてのオーディオファイルに使用する必要があります – フェーズ4の「モデル選択の確定」を参照。

c) 不足している主要データ。 フェーズ0で見つからなかった場合のみ:教授の名前、コース名。推測する代わりに、「名前なし」のオプションを提供します。

d) オプション: PDFからスライド画像/グラフィックを直接表示します(デフォルト:はい、何かを説明している場合)。

e) 動画の冒頭に概要を表示しますか? はい / いいえ。1文で説明:イントロの直後に、各章を時間範囲(「0:18–1:30 内部結合」)とスライド番号とともに表示する短い目次が表示されます。学習者は構造を確認し、必要な部分にジャンプできます。約10秒かかります。MP4には常にチャプターマークも含まれているため、プレーヤーはどちらの方法でもチャプター間をジャンプできます。

f) 最後にセルフテスト問題を表示しますか? はい / いいえ。1文で説明:短い思考時間とそれに続く回答で自己確認するための質問。再視聴よりも記憶の定着に役立ちます。

ステップ3 – 見た目(+ 質問数)

1つのメッセージに、見た目に関する2つの質問 – そして、ステップ2 f)でセルフテスト問題が選択された場合のみ、その数に関する3つ目の質問(該当するツールがあればタップ可能な質問として。デフォルトが最初に名前が挙げられます):

明るい or 暗い?

  • 明るい (デフォルト) · 暗い

どのスタイル?

  • モダン (デフォルト) – カラフルなアクセント、ソフトなグラデーション、影付きカード、チャプタータイトルカード
  • シンプル – 落ち着いた、白または黒を多く使い、アクセントカラーは1色のみ
  • スライドと同じ – 講義スライドの色(例:大学のブルー)を使用し、講義に合わせます
  • テーマに合わせる:… – コンテンツから導き出された具体的な提案。例:「データベースルック:青色/ターコイズ、控えめなテーブルグリッド」、「サステナビリティ:緑系、葉のモチーフ」、「ファイナンス:濃紺/ゴールド、チャートライン」

セルフテスト問題はいくつ? (選択された場合のみ)

  • 3 · 5 · 8 · カスタムの数 – それぞれに追加の時間とコストがかかります(下記参照)

「テーマ」オプションは、この講義に対する具体的な提案として書き、一般的なラベルとして書かないでください。scripts/palette.py が特徴的な色を見つけられない場合(白黒のみのスライドなど)は、「スライドと同じ」をスキップします。各回答の構築方法:references/visual-rules.md、「見た目」参照。

質問数: オプション 3 / 5 / 8 / カスタム。各オプションについて、追加の時間と追加のコストを提示します(estimate.py quiz --questions N --prompt … --completion …。概要を含む合計の場合:estimate.py cost … --quiz N --toc)。例:「5 問 · +1:45 分 · +$0.02」。質問は説明部分の選択された長さに追加されます。新しい合計時間を1度提示します。資料に要求された質問数よりも意味のあるキーポイントが少ない場合は、少ない数を提案し、その理由を簡単に説明します。

ステップ4 – 音声(ナレーションモードのみ)

モデルが選択された後、1つのメッセージで3つの短い質問をします(該当するツールがあれば3つのタップ可能な質問として。デフォルトが事前選択され、最初に名前が挙げられます):

声のトーンは?

  • 女性 (デフォルト) · 男性

どんな性格?

  • やる気が出る&フレンドリー (デフォルト) · 落ち着いて客観的 · はっきりと明確 · カジュアルでリラックス

話す速度は?

  • ゆっくり · 普通 · やや速め (デフォルト) · 速い

ユーザーがスキップしたり「どちらでも」と言った場合のデフォルト:優れた女性の、テンポの良い、やる気を起こさせる解説の声。 回答を、選択されたモデルの具体的な音声と、references/tts-models.md(「音声の選択」)の配信指示/速度にマッピングします。選択した音声を1行で述べます(「音声:Laomedeia – 女性、やる気が出る、やや速め」)。ペースは単語予算を変更します:estimate.py --pace に渡します。イントロテスト(フェーズ4)の後、ユーザーは「別の声」や「もっとゆっくり」と言うことができます。その場合は、イントロのみをやり直します。

フェーズ2 – スクリプト

references/didactics-and-script.md を読んでください。次に、スクリプトを script.json(スキーマはそちらにあります)として、シーンごとに記述します。必要な構造:

  1. イントロ(約8~12秒): 「この動画は、…教授による…コースの…についてです」+ 今後の内容の概要を3~5のポイントで(先行オーガナイザー)。 概要(選択された場合のみ、約10秒): イントロの直後に1つのシーン。<ol class="toc" data-toc> を含みます。シーンファイルは、最終的なタイミングから各チャプターの時間範囲とスライド番号を自動的に入力します – 時間を手動で入力しないでください。これらはオーディオを再生成するたびに変更されます。ナレーションはチャプターを1、2文で列挙し(「最初に…、次に…、最後に要約とセルフテストです」)、時間を読み上げません。シーンを data-dense とマークし、data-hold を約3秒に設定して、概要を読めるようにします。概要が選択されている場合、イントロ自体のアジェンダは短く(1文)して、同じことを2回言わないようにします。
  2. メイン部分: 講義の順序に従ったチャプター。説明。
    • 各チャプターは、チャプタータイトルカードで始まります(<article data-chapter>)。
    • 各シーンは1つのアイデアに焦点を当てます。テキスト、画像、図を適切な配置で使用します。
    • ナレーションのテキストは script.json の narration フィールドに記述します。これは、後でTTSに渡される正確なテキストです。
    • 画面上のテキスト(on_screen)は、ナレーションを補足し、キーワードを視覚的に強調します。
    • 図や画像が必要な場合は、image フィールドにスライドPNGからのパスを指定します。
    • 数式:<math data-type="inline|block"> タグを使用します。
    • コード/SQL:<pre><code class="language-sql"> を使用します。
    • 未回答の質問(フェーズ0、ステップ4で特定):各質問は、動画内の適切な場所で回答されます。回答は、可能な限り講義資料に基づきます。資料に回答がない場合は、推論に基づいた妥当な回答を提供します。
  3. 要約(約15~30秒): 最も重要なポイントの簡潔な要約。サマリースライドがある場合は、それを基にします。資料に総括的なサマリースライドがない場合は、自分で簡潔な要約を作成します。
  4. セルフテスト問題(選択された場合のみ): 各問題は、質問、思考の間、回答の3つのサブシーンで構成されます。data-self-test クラスを使用します。
  5. アウトロ(約5秒): 「ご視聴ありがとうございました。試験頑張ってください!」

最適化:

  • 簡潔さを心がけてください。各シーンのナレーションは通常15~30秒を超えないようにします。
  • 複雑な概念は複数のシーンに分割します。
  • スライドからの直接の引用は引用符で囲み、出典を明記します。

フェーズ3 – レビューと承認

スクリプトをユーザーに要約の形で提示します:

  • チャプターのリストと各チャプターのおおよその時間。
  • カバーされるトピックのハイライト。
  • 生成時に問題を引き起こす可能性がある複雑な要素(複雑な図、数式、表)への注意。
  • 推定コストと時間。

ユーザーが承認するまで待ちます。承認されたら、フェーズ4に進みます。

フェーズ4 – イントロのテスト

選択されたモデルでイントロのオーディオを生成します。これをユーザーに提示します。ユーザーは以下をリクエストできます:

  • 別の声
  • より速い/遅い速度
  • イントロテキストの変更
  • 問題なければ「続けて」

ユーザーが承認するまで、イントロのオーディオを再生成します。承認されたら、モデルの選択は確定し、変更できません。

フェーズ5 – 残りのオーディオを生成する

各シーンのナレーションオーディオを生成します。シーンごとに1つのオーディオファイルです。ファイル名:scene_{index}.mp3。

フェーズ6 – カバレッジを確認し、動画をレンダリングする

scripts/coverage.py を使用して、各コンテンツページが少なくとも1つのシーンに含まれていることを確認します。

scripts/render.py を使用して動画をレンダリングします:

python3 scripts/render.py <workdir>

フェーズ7 – 成果物を提供する

完成したMP4ファイルをClaude内で直接ダウンロード可能にします。ユーザーが要求した場合にのみ、追加ファイル(字幕、書き起こし、概要表)を提供します。

視覚のみモード

音声なし。すべての説明は画面上にテキストとグラフィックとして表示されます。

  • より多くの画面上のテキスト。各シーンの on_screen テキストは、ナレーションモードよりも詳細である必要があります。
  • 進行状況インジケーターを使用して、視聴者が現在地を把握できるようにします。
  • アニメーションとトランジションを使用して、視覚的な興味を引きます。
  • 各シーンの表示時間は、読むのに十分な長さである必要があります(1単語あたり約200ミリ秒の読書時間)。

演習モード

資料が演習シートの場合:

  • 動画は各演習を解決します。
  • 各タスクについて:問題の説明 → アプローチ → ステップバイステップの解決策 → 結果。
  • すべての数学的ステップが示されます。
  • コード課題の場合:コードが記述され、実行され(可能な場合)、結果が表示されます。
  • 各タスクの時間:タスクの複雑さに応じて、約45~90秒。

重要な注意事項

  • ユーザーのために推測しないでください。不明な点は質問してください。
  • 常に製品版のMP4ファイルを提供します。中間ファイルやスクリプトは提供しません(ユーザーが要求しない限り)。
  • コストは推定値であり、OpenRouterの実際の価格設定によって異なる場合があります。
  • スクリプトと動画は常に選択された言語であることを確認してください。
  • すべてのソース資料をクレジット表示します。

関連スキル