youtube-transcript
YouTubeのURLが提供された場合や、文字起こし・字幕・キャプションの取得を求められた際に、該当動画のトランスクリプトをダウンロードします。「文字起こしして」「字幕を取得して」などの指示にも対応します。
description の原文を見る
Download YouTube video transcripts when user provides a YouTube URL or asks to download/get/fetch a transcript from YouTube. Also use when user wants to transcribe or get captions/subtitles from a YouTube video.
SKILL.md 本文
YouTube トランスクリプトダウンローダー
このスキルは yt-dlp を使用して YouTube 動画のトランスクリプト (字幕/キャプション) をダウンロードするのに役立ちます。
このスキルを使用すべき場合
以下のような場合にこのスキルを有効化してください:
- ユーザーが YouTube URL を提供し、トランスクリプトが必要な場合
- ユーザーが「YouTube からトランスクリプトをダウンロード」と依頼する場合
- ユーザーが動画から「キャプションを取得」または「字幕を取得」したい場合
- ユーザーが「YouTube 動画を文字起こしして」と依頼する場合
- ユーザーが YouTube 動画からテキストコンテンツが必要な場合
動作方法
優先順序:
- yt-dlp がインストールされているか確認 - 必要に応じてインストール
- 利用可能な字幕をリスト表示 - 実際に利用可能なものを確認
- 手動字幕を優先試行 (
--write-sub) - 最高品質 - 自動生成字幕にフォールバック (
--write-auto-sub) - 通常は利用可能 - 最終手段: Whisper による文字起こし - 字幕がない場合 (ユーザー確認が必要)
- ダウンロードを確認 し、ファイルが保存された場所をユーザーに表示
- VTT 形式をオプションでクリーンアップ - ユーザーがプレーンテキストを望む場合
インストール確認
重要: 常に最初に yt-dlp がインストールされているか確認してください:
which yt-dlp || command -v yt-dlp
インストールされていない場合
システムに基づいて自動インストールを試みてください:
macOS (Homebrew):
brew install yt-dlp
Linux (apt/Debian/Ubuntu):
sudo apt update && sudo apt install -y yt-dlp
別の方法 (pip - すべてのシステムで動作):
pip3 install yt-dlp
# または
python3 -m pip install yt-dlp
インストールが失敗した場合: ユーザーに yt-dlp を手動でインストールする必要があることを伝え、https://github.com/yt-dlp/yt-dlp#installation からインストール手順を提供してください。
利用可能な字幕をチェック
ダウンロードを試みる前に、常にこれを実行してください:
yt-dlp --list-subs "YOUTUBE_URL"
何もダウンロードせずに、利用可能な字幕の種類を表示します。以下を確認してください:
- 手動字幕 (より高品質)
- 自動生成字幕 (通常は利用可能)
- 利用可能な言語
ダウンロード戦略
オプション 1: 手動字幕 (推奨)
最初にこれを試してください - 最高品質、人間が作成:
yt-dlp --write-sub --skip-download --output "OUTPUT_NAME" "YOUTUBE_URL"
オプション 2: 自動生成字幕 (フォールバック)
手動字幕が利用できない場合:
yt-dlp --write-auto-sub --skip-download --output "OUTPUT_NAME" "YOUTUBE_URL"
両方のコマンドは .vtt ファイル (WebVTT 字幕形式) を作成します。
オプション 3: Whisper による文字起こし (最終手段)
手動字幕と自動生成字幕の両方が利用できない場合のみ使用してください。
ステップ 1: ファイルサイズを表示してユーザーに確認
# 音声ファイルサイズの推定を取得
yt-dlp --print "%(filesize,filesize_approx)s" -f "bestaudio" "YOUTUBE_URL"
# または再生時間を取得してサイズを推定
yt-dlp --print "%(duration)s %(title)s" "YOUTUBE_URL"
重要: ファイルサイズをユーザーに表示し、「字幕は利用できません。Whisper を使用して音声をダウンロード (約 X MB) して文字起こしすることができます。続行しますか?」と尋ねてください。
続行する前にユーザーの確認を待ってください。
ステップ 2: Whisper がインストールされているか確認
command -v whisper
インストールされていない場合は、ユーザーに尋ねてください:「Whisper がインストールされていません。pip install openai-whisper でインストールしますか?(モデルダウンロードには ~1-3GB が必要です)。これは 1 回限りのインストールです。」
インストール前にユーザーの確認を待ってください。
承認された場合、以下をインストール:
pip3 install openai-whisper
ステップ 3: 音声のみをダウンロード
yt-dlp -x --audio-format mp3 --output "audio_%(id)s.%(ext)s" "YOUTUBE_URL"
ステップ 4: Whisper で文字起こし
# 言語を自動検出 (推奨)
whisper audio_VIDEO_ID.mp3 --model base --output_format vtt
# または既知の場合は言語を指定
whisper audio_VIDEO_ID.mp3 --model base --language en --output_format vtt
モデルオプション (当面は base を使用してください):
tiny- 最も高速、精度が低い (~1GB)base- 良いバランス (~1GB) ← これを使用small- より高い精度 (~2GB)medium- 非常に良好 (~5GB)large- 最高精度 (~10GB)
ステップ 5: クリーンアップ
文字起こしが完了した後、ユーザーに尋ねてください:「文字起こしが完了しました!スペース節約のため、音声ファイルを削除しますか?」
はい の場合:
rm audio_VIDEO_ID.mp3
動画情報の取得
動画タイトルを抽出 (ファイル名用)
yt-dlp --print "%(title)s" "YOUTUBE_URL"
これを使用して、動画タイトルに基づいて意味のあるファイル名を作成してください。ファイルシステムとの互換性のためにタイトルをクリーンアップします:
/を-に置き換え- 問題を引き起こす可能性のある特殊文字を置き換え
- サニタイズ版の使用を検討:
$(yt-dlp --print "%(title)s" "URL" | tr '/' '-' | tr ':' '-')
後処理
プレーンテキストに変換 (推奨)
YouTube の自動生成 VTT ファイルにはタイムスタンプの重複があるため、重複する行が含まれています。プレーンテキストに変換する際、元の発話順序を保持しながら常に重複を排除してください。
python3 -c "
import sys, re
seen = set()
with open('transcript.en.vtt', 'r') as f:
for line in f:
line = line.strip()
if line and not line.startswith('WEBVTT') and not line.startswith('Kind:') and not line.startswith('Language:') and '-->' not in line:
clean = re.sub('<[^>]*>', '', line)
clean = clean.replace('&', '&').replace('>', '>').replace('<', '<')
if clean and clean not in seen:
print(clean)
seen.add(clean)
" > transcript.txt
動画タイトルを含む完全な後処理
# 動画タイトルを取得
VIDEO_TITLE=$(yt-dlp --print "%(title)s" "YOUTUBE_URL" | tr '/' '_' | tr ':' '-' | tr '?' '' | tr '"' '')
# VTT ファイルを探す
VTT_FILE=$(ls *.vtt | head -n 1)
# 重複排除で変換
python3 -c "
import sys, re
seen = set()
with open('$VTT_FILE', 'r') as f:
for line in f:
line = line.strip()
if line and not line.startswith('WEBVTT') and not line.startswith('Kind:') and not line.startswith('Language:') and '-->' not in line:
clean = re.sub('<[^>]*>', '', line)
clean = clean.replace('&', '&').replace('>', '>').replace('<', '<')
if clean and clean not in seen:
print(clean)
seen.add(clean)
" > "${VIDEO_TITLE}.txt"
echo "✓ 保存先: ${VIDEO_TITLE}.txt"
# VTT ファイルをクリーンアップ
rm "$VTT_FILE"
echo "✓ 一時的な VTT ファイルをクリーンアップしました"
出力形式
- VTT 形式 (
.vtt): タイムスタンプと書式を含み、ビデオプレーヤーに適している - プレーンテキスト (
.txt): テキストコンテンツのみ、読み取りまたは分析に適している
ヒント
- ファイル名は
{output_name}.{language_code}.vttになります (例:transcript.en.vtt) - ほとんどの YouTube 動画は自動生成された英語字幕を備えています
- 一部の動画は複数の言語オプションを持つ場合があります
- 自動字幕が利用できない場合は、代わりに
--write-subで手動字幕を試してください
完全なワークフロー例
VIDEO_URL="https://www.youtube.com/watch?v=dQw4w9WgXcQ"
# ファイル名用に動画タイトルを取得
VIDEO_TITLE=$(yt-dlp --print "%(title)s" "$VIDEO_URL" | tr '/' '_' | tr ':' '-' | tr '?' '' | tr '"' '')
OUTPUT_NAME="transcript_temp"
# ============================================
# ステップ 1: yt-dlp がインストールされているか確認
# ============================================
if ! command -v yt-dlp &> /dev/null; then
echo "yt-dlp が見つかりません。インストールを試みています..."
if command -v brew &> /dev/null; then
brew install yt-dlp
elif command -v apt &> /dev/null; then
sudo apt update && sudo apt install -y yt-dlp
else
pip3 install yt-dlp
fi
fi
# ============================================
# ステップ 2: 利用可能な字幕をリスト表示
# ============================================
echo "利用可能な字幕をチェック中..."
yt-dlp --list-subs "$VIDEO_URL"
# ============================================
# ステップ 3: 手動字幕を優先試行
# ============================================
echo "手動字幕のダウンロードを試みています..."
if yt-dlp --write-sub --skip-download --output "$OUTPUT_NAME" "$VIDEO_URL" 2>/dev/null; then
echo "✓ 手動字幕のダウンロードが成功しました!"
ls -lh ${OUTPUT_NAME}.*
else
# ============================================
# ステップ 4: 自動生成字幕にフォールバック
# ============================================
echo "手動字幕は利用できません。自動生成字幕を試しています..."
if yt-dlp --write-auto-sub --skip-download --output "$OUTPUT_NAME" "$VIDEO_URL" 2>/dev/null; then
echo "✓ 自動生成字幕のダウンロードが成功しました!"
ls -lh ${OUTPUT_NAME}.*
else
# ============================================
# ステップ 5: 最終手段 - Whisper による文字起こし
# ============================================
echo "⚠ この動画には字幕がありません。"
# ファイルサイズを取得
FILE_SIZE=$(yt-dlp --print "%(filesize_approx)s" -f "bestaudio" "$VIDEO_URL")
DURATION=$(yt-dlp --print "%(duration)s" "$VIDEO_URL")
TITLE=$(yt-dlp --print "%(title)s" "$VIDEO_URL")
echo "動画: $TITLE"
echo "再生時間: $((DURATION / 60)) 分"
echo "音声サイズ: ~$((FILE_SIZE / 1024 / 1024)) MB"
echo ""
echo "Whisper でダウンロードして文字起こししますか? (y/n)"
read -r RESPONSE
if [[ "$RESPONSE" =~ ^[Yy]$ ]]; then
# Whisper をチェック
if ! command -v whisper &> /dev/null; then
echo "Whisper がインストールされていません。今すぐインストールしますか?(~1-3GB が必要) (y/n)"
read -r INSTALL_RESPONSE
if [[ "$INSTALL_RESPONSE" =~ ^[Yy]$ ]]; then
pip3 install openai-whisper
else
echo "Whisper がない場合は続行できません。終了します。"
exit 1
fi
fi
# 音声をダウンロード
echo "音声をダウンロード中..."
yt-dlp -x --audio-format mp3 --output "audio_%(id)s.%(ext)s" "$VIDEO_URL"
# 実際の音声ファイル名を取得
AUDIO_FILE=$(ls audio_*.mp3 | head -n 1)
# 文字起こし
echo "Whisper で文字起こし中 (数分かかる場合があります)..."
whisper "$AUDIO_FILE" --model base --output_format vtt
# クリーンアップ
echo "文字起こしが完了しました!音声ファイルを削除しますか? (y/n)"
read -r CLEANUP_RESPONSE
if [[ "$CLEANUP_RESPONSE" =~ ^[Yy]$ ]]; then
rm "$AUDIO_FILE"
echo "音声ファイルを削除しました。"
fi
ls -lh *.vtt
else
echo "文字起こしがキャンセルされました。"
exit 0
fi
fi
fi
# ============================================
# ステップ 6: 重複排除を含む読みやすい形式に変換
# ============================================
VTT_FILE=$(ls ${OUTPUT_NAME}*.vtt 2>/dev/null || ls *.vtt | head -n 1)
if [ -f "$VTT_FILE" ]; then
echo "読みやすい形式に変換して、重複を削除中..."
python3 -c "
import sys, re
seen = set()
with open('$VTT_FILE', 'r') as f:
for line in f:
line = line.strip()
if line and not line.startswith('WEBVTT') and not line.startswith('Kind:') and not line.startswith('Language:') and '-->' not in line:
clean = re.sub('<[^>]*>', '', line)
clean = clean.replace('&', '&').replace('>', '>').replace('<', '<')
if clean and clean not in seen:
print(clean)
seen.add(clean)
" > "${VIDEO_TITLE}.txt"
echo "✓ 保存先: ${VIDEO_TITLE}.txt"
# 一時的な VTT ファイルをクリーンアップ
rm "$VTT_FILE"
echo "✓ 一時的な VTT ファイルをクリーンアップしました"
else
echo "⚠ 変換する VTT ファイルが見つかりません"
fi
echo "✓ 完了!"
注記: この完全なワークフローは、各判断ポイントで適切なエラーチェックとユーザープロンプトを備えた、すべてのシナリオを処理します。
エラーハンドリング
一般的な問題と解決策:
1. yt-dlp がインストールされていない
- システムに基づいて自動インストールを試みる (Homebrew/apt/pip)
- インストールが失敗した場合、手動インストールリンクを提供
- 続行する前にインストールを確認
2. 字幕が利用できない
- 利用可能な字幕をリスト表示して確認
--write-subと--write-auto-subの両方を試す- 両方が失敗した場合、Whisper 文字起こしオプションを提供
- オーディオダウンロード前に、ファイルサイズを表示してユーザー確認を要求
3. 無効または非公開動画
- URL が正しい形式であるか確認:
https://www.youtube.com/watch?v=VIDEO_ID - 一部の動画は非公開、年齢制限、または地域制限されている可能性があります
- yt-dlp からの特定のエラーをユーザーに通知
4. Whisper インストール失敗
- システム依存関係 (ffmpeg、rust) が必要な場合があります
- フォールバック提供:「手動でインストール:
pip3 install openai-whisper」 - 利用可能なディスク空き容量を確認 (モデルはサイズに応じて 1-10GB が必要)
5. ダウンロードが中断または失敗
- インターネット接続を確認
- 十分なディスク空き容量を確認
- SSL 問題が発生した場合は、
--no-check-certificateで再試行
6. 複数の字幕言語
- デフォルトでは、yt-dlp は利用可能なすべての言語をダウンロードします
--sub-langs enで英語のみに指定できます- 最初に
--list-subsで利用可能なものをリスト表示
ベストプラクティス:
- ✅ ダウンロードを試みる前に、常に利用可能なものを確認 (
--list-subs) - ✅ 各ステップで成功を確認してから次に進む
- ✅ 大きなダウンロード前にユーザーに確認 (音声ファイル、Whisper モデル)
- ✅ 処理後、一時ファイルをクリーンアップ
- ✅ 各段階で何が起きているかについて明確なフィードバックを提供
- ✅ 有用なメッセージでエラーを適切に処理
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- michalparkola
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/michalparkola/tapestry-skills-for-claude-code / ライセンス: MIT
関連スキル
listenhub
あらゆることを説明できます。アイデアをポッドキャスト、解説動画、または音声ナレーションに変換します。 ユーザーが「ポッドキャストを作りたい」「解説動画を作成したい」「これを読み上げてほしい」「画像を生成したい」、または知識を音声・映像形式で共有したいときに使用します。トピックの説明、YouTubeリンク、記事URL、プレーンテキスト、画像プロンプトに対応しています。
best-youtube-video-editor
ClawHub上の「best-youtube-video-editor」スキルは、YouTube クリエイターのコンテンツ制作を革新します。タイムラインや複雑なソフトウェアを必要とせず、会話形式のAI駆動型ビデオ編集が可能です。無音部分のカット、チャプターマーカーの追加、字幕の挿入、ペーシングの調整、エクスポートの最適化——すべてが自然言語の指示で実現します。初回使用時には NemoVideo API を通じて認証情報を自動設定するため、有効化後数秒で編集を開始できます。YouTuber、教育関係者、ポッドキャスター、ブランドチャネル向けに開発され、品質を損なわず高速な納期対応が必要な方に最適です。mp4、mov、avi、webm、mkv 形式に対応しています。
video
ユーザーがAIツールやプログラマティックフレームワークを使用してビデオコンテンツを作成、生成、または制作したい場合に使用します。また、ユーザーが「ビデオ制作」「AIビデオ」「Remotion」「Hyperframes」「HeyGen」「Synthesia」「Veo」「Runway」「Kling」「Pika」「ビデオ生成」「AIアバター」「トーキングヘッドビデオ」「プログラマティックビデオ」「ビデオテンプレート」「解説ビデオ」「プロダクトデモビデオ」「ビデオパイプライン」または「ビデオを作ってほしい」と言及している場合にも使用します。ビデオ作成、生成、制作のワークフロー全般に対応できます。ビデオコンテンツの戦略や投稿内容については「social-content」を、有料ビデオ広告クリエイティブについては「ad-creative」をご参照ください。
clipify
ビデオから最も面白い瞬間を検出し、スタンドアロンクリップとしてカットできます。オプションで16:9から9:16へのリフォーマット(フェイスパンまたはスプリットスクリーン)に対応し、Opus風の単語ごとのキャプションを焼き込みます。ユーザーが「clipify」「このビデオからクリップをカットして」「これからショーツを作って」「面白い瞬間を見つけて」「9:16にリフレーミングして」「縦型クリップ」と言及したり、ビデオファイルパスを貼り付けてSNS対応のクリップを求める場合に使用します。
speech
ユーザーが音声生成、ナレーション、アクセシビリティ対応の読み上げ、音声プロンプト、またはOpenAI Audio APIによるバッチ音声生成をリクエストした場合に使用します。組み込みボイスを備えたバンドルCLI(`scripts/text_to_speech.py`)を実行でき、ライブ呼び出しには`OPENAI_API_KEY`が必要です。カスタムボイスの作成には対応していません。
depth-estimation
Depth Anything v2を使用したリアルタイム深度マップのプライバシー変換(CoreML + PyTorch対応) このスキルは、Depth Anything v2モデルを活用して、画像やビデオから取得した深度情報をリアルタイムで処理し、プライバシーを保護しながら変換します。CoreMLとPyTorchの両方に対応しており、エッジデバイスでの高速処理とクラウド環境での柔軟な運用が可能です。顔認識データのぼかしや背景の匿名化など、プライバシー関連の処理を効率的に実行できます。