Communitygithub.com

JinxinHu/open_claude_skills

セミナー、講義、カンファレンスの録画(YouTube、Vimeo、Panopto、Zoom録画、ローカル動画ファイル)からスライドを抽出し、一枚ずつタイムスタンプ付きのPNG画像に変換してPDFにまとめます。ユーザーが「このセミナーのスライドを取って」「このYouTube動画の図を取得」「録画からスライドのPDFを作成」「動画しかない、スライドがない」などと言ったときに使用します。

open_claude_skills とは?

このスキルは、セミナー、講義、会議の録画動画(YouTube、Vimeo、Panopto、Zoom録画、ローカル動画ファイル)からスライドを自動抽出します。yt-dlpとffmpegを利用して、スライド変更時のみフレームを取得し、タイムスタンプ付きのPNG画像に変換します。さらに、LaTeXのBeamerテンプレートを使って、各スライドに時間表示を重ねたPDFを生成します。対応プラットフォームはLinux、macOS、Windows(Git Bash、WSL、PowerShell)です。クロップ機能やシーンチェンジ閾値調整により、動画内のスピーカーやアニメーションによる誤検出を抑えることができます。また、認証が必要な録画に対してはブラウザのログインCookieを利用したダウンロードも可能です。このスキルは、ユーザーが明示的に「クロップ」「フレーム抽出」と言わなくても、「スライドを取得」や「図を抜き出す」といった意図を理解して動作します。

対応✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/JinxinHu/open_claude_skills/tree/HEAD/video-seminar-crawling

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

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

ドキュメント

セミナー動画からスライドを抽出する

scripts/ には、同じ機能を持つ2つのツールが格納されています:

スクリプト使用環境
scripts/extract_slides.shLinux、macOS、Git Bash、Windows上のWSL
scripts/extract_slides.ps1Windows PowerShell(bash不要)
scripts/slides.texBeamerテンプレート。スクリプトがフレームフォルダにコピーします

仕組み: yt-dlp が動画ストリームのみをダウンロードします(音声なし、最大1080p)。ffmpeg が 1フレーム/秒でサンプリングし、最初のフレームおよびシーンチェンジスコアが閾値を超えたフレームを保持します。これにより、保持された各フレームは新しいスライドまたは新しいビルドステップとなります。showinfo ログから各フレームの動画時間が取得されます。出力フォルダには以下のファイルが作成されます:

  • slide_001.png、slide_002.png、... : スライド変更ごとに1枚ずつ
  • timestamps.txt : 各フレームの動画時間(秒単位)
  • frame_list.tex および slides.tex : pdflatex slides.tex により、各スライドの下に動画時間(h:mm:ss)が表示されたPDFが生成されます

手順

  1. ツールを確認する。 ffmpeg -version と yt-dlp --version を実行します。いずれかが不足している場合は、下記の手順でインストールするか、ユーザーにインストール方法を伝えてください。ローカルファイルの場合は yt-dlp は不要です。

  2. プラットフォームに応じたスクリプトを選択する。 Windows では、ユーザーが明らかに Git Bash や WSL を使用していない限り、PowerShell スクリプトを使用します。

  3. スクリプトを実行する。 ユーザーから指定されたURLまたはファイルに対して、スキルフォルダの外に、講演名を付けたフォルダ(例: -o speaker_topic_frames)を作成して実行します。

    bash scripts/extract_slides.sh -u "https://www.youtube.com/watch?v=ID" -o talk_frames
    bash scripts/extract_slides.sh -i "recording.mp4" -o talk_frames
    
    powershell -ExecutionPolicy Bypass -File scripts\extract_slides.ps1 -Url "https://www.youtube.com/watch?v=ID" -OutDir talk_frames
    powershell -ExecutionPolicy Bypass -File scripts\extract_slides.ps1 -InputFile "C:\path\to\recording.mp4" -OutDir talk_frames
    

    -ExecutionPolicy Bypass は、その実行に限りWindowsのスクリプト実行ポリシーによるブロックを回避します。

  4. フレームを確認する。 いくつかのPNG(最初、中間、最後)を開いて以下の点をチェックします:

    • スライド横のWebカメラやスピーカー表示: スピーカーの動きが誤ったスライド変更を引き起こします。いずれかのフレームでスライド領域を見つけ、クロップ指定 -c W:H:X:Y / -Crop W:H:X:Y(ffmpeg クロップ構文: 幅、高さ、左上隅のX、Y座標)を付けて再実行します。
    • フレームが少なすぎる(ビルドや小さな変更を見逃している場合): 閾値を下げて -t 0.05 / -Threshold 0.05 で再実行します。
    • フレームが多すぎる(動画、アニメーション、カメラノイズ): 閾値を 0.2~0.3 に上げるか、クロップします。
    • 重複: 余分なPNGとそれに対応する frame_list.tex の行を削除します。
  5. PDFをビルドする(必要な場合)。 出力フォルダに移動し、pdflatex slides.tex(または latexmk -pdf slides.tex)を実行します。

  6. 結果を報告する。 フレーム数、出力フォルダ、PDF、およびユーザーに残された作業(例えば意図的に残した重複フレーム)を伝えます。

オプション

bashPowerShell意味デフォルト値
-u URL-Url URLダウンロードする動画のURL(yt-dlpがサポートする任意のサイト)
-i FILE-InputFile FILEダウンロードではなくローカル動画ファイルを使用
-o DIR-OutDir DIR出力フォルダvideo_frames
-t X-Threshold Xシーンチェンジの閾値(0~1)0.10
-c W:H:X:Y-Crop W:H:X:Yスライド領域にクロップなし
-b NAME-Browser NAMEこのブラウザのログインCookieを使用(chrome、firefox、edgeなど)なし

ツールのインストール方法

  • Windows: winget install --id yt-dlp.yt-dlp と winget install --id Gyan.FFmpeg を実行し、PowerShellを閉じて再度開くことでパスが通ります。
  • macOS: brew install yt-dlp ffmpeg
  • Linux: sudo apt install ffmpeg(またはディストリビューションに応じたコマンド)と pip install -U yt-dlp
  • LaTeX(PDF生成にのみ必要): TeX Live または MiKTeX。MiKTeX の latexmk は Perl が必要です。単体の pdflatex は不要です。

トラブルシューティング

  • ログインが必要な録画(Panopto、Zoomクラウド、大学のポータルなど): -b chrome / -Browser chrome(またはユーザーがログインしているブラウザ)を指定します。それでもyt-dlpが取得できない場合は、ユーザーに動画をダウンロードしてもらい、-i を使用するよう依頼します。
  • Git Bashで $'\r': command not found または pipefail: invalid option name が表示される: .sh ファイルがWindowsの改行コードを使用しています。sed -i 's/\r$//' scripts/extract_slides.sh を一度実行してください。
  • YouTubeでyt-dlpエラー(「Sign in to confirm」、フォーマットエラー): まず yt-dlp -U または pip install -U yt-dlp でアップデートしてください。これによりほとんどの問題は解決します。
  • 動画ホストにネットワーク接続できない(サンドボックス環境やクラウドセッション): その旨を伝え、ユーザーが自身のマシンで実行するためのコマンドを提示します。

ユーザーがアクセスを許可されている録画のみを取得し、講演のライセンスに別段の定めがない限り、フレームはユーザー自身のノートや学習用に保持してください。

関連スキル