Communitygithub.com

danielhall/agent-skills

YouTube などのサイトから動画や音声を yt-dlp でダウンロードします。形式、解像度の選択、動画と音声の結合、音声のみ、字幕、クリップ、プレイリストに対応。ユーザーが URL から動画や音声のダウンロードを依頼した際に使用します。

agent-skills とは?

このスキルは、yt-dlp を使用して YouTube やその他約 1,800 のサイトから動画や音声をダウンロードするためのものです。デフォルトでは MP4 (H.264 + AAC) 形式、1080p 解像度で保存し、メタデータ、サムネイル、チャプターを埋め込みます。Apple Silicon Mac での ffmpeg 互換性問題の診断と修正、長時間ダウンロードのバックグラウンド実行、中断されたダウンロードの再開、ffmpeg を使った残存ストリームの結合など、実用的なトラブルシューティングを提供します。音声のみの抽出、最高品質 MKV、字幕、クリップ、プレイリスト、ドライランなど多様なバリエーションに対応。エージェントはユーザーが URL を指定したらまず事前確認(タイトル、長さ、空き容量)を行い、適切なコマンドを実行するよう設計されています。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/danielhall/agent-skills/tree/HEAD/skills/media-video-download

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

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

ドキュメント

動画ダウンロード (yt-dlp)

YouTube および約 1,800 の他のサイトから動画や音声をダウンロードします。

ユーザー自身の使用目的でのみダウンロードしてください。他人の著作物の再配布を助けないでください。

デフォルト設定

  • 保存場所: 動画は ~/Movies、音声は ~/Music(ユーザーが別のフォルダを指定した場合を除く)。Linux では ~/Videos を使用。
  • 形式: 特に指定がない限り、H.264 動画 + AAC 音声の MP4。QuickTime、Final Cut、Premiere、iOS は変換なしで再生可能。AV1 や VP9 のファイルははるかに小さいですが、QuickTime Player では開けないことが多いです。
  • 解像度: 指定がない場合は 1080p。
  • 追加設定: メタデータ、サムネイル、チャプターを埋め込みます。

事前確認

yt-dlp --version             # 古いバージョンが YouTube 障害の最も一般的な原因
ffmpeg -version | head -1    # 存在するだけでなく、実際に実行できなければならない
ffprobe -version | head -1   # yt-dlp からも必要。見落とされがち

which ffmpeg で確認しないでください。これは PATH 上の最初の一致を報告するだけで、間違ったバイナリである可能性があります。Apple Silicon Mac では、Homebrew の /opt/homebrew/bin にあるビルドよりも先に /usr/local/bin に残った Intel ビルドが見つかることがあります。その場合、yt-dlp はすべてをダウンロードした後、マージステップで bad CPU type in executable または ffmpeg not found で失敗し、終了コード 0 で終了します。そのため、終了コードではなく出力の ERROR を確認してください。

Apple Silicon では、正しいパスを明示的に指定します:

yt-dlp --ffmpeg-location /opt/homebrew/bin ...

マージに失敗した場合、分離された動画ファイルと音声ファイル(.fNNN)がディスクに残ります。ffmpeg を使用して、残存ストリームの結合 の説明に従って結合してください。再ダウンロードの必要はありません。

開始前に、ダウンロードしようとしているものを確認します:

yt-dlp --print "%(title)s | %(duration_string)s | %(uploader)s" "URL"
yt-dlp -F "URL"              # 利用可能なすべての形式
df -h ~/Movies | tail -1     # 空き容量

約 1 GB を超えるものについては、タイトル、長さ、おおよそのサイズをユーザーに伝えてから開始してください。

メインコマンド

cd ~/Movies && yt-dlp \
  -f "bv*[height<=1080][vcodec^=avc1]+ba[ext=m4a]/bv*[height<=1080]+ba/b[height<=1080]" \
  --merge-output-format mp4 \
  --embed-metadata --embed-thumbnail --embed-chapters \
  -o "%(title)s [%(id)s].%(ext)s" \
  --newline \
  "URL"

Apple Silicon Mac では --ffmpeg-location /opt/homebrew/bin を追加します。

形式文字列はフォールバックのリストで、左から右に試行されます:

  1. bv*[height<=1080][vcodec^=avc1]+ba[ext=m4a]: 最高品質の 1080p までの H.264 動画と、最高品質の M4A 音声。最も互換性の高いオプションです。
  2. bv*[height<=1080]+ba: その高さに H.264 がないサイト向けの任意のコーデック。
  3. b[height<=1080]: 動画と音声が既に結合された単一ファイル。これらを別々に提供しないサイト向け。

1080 を 720、1440、または 2160 に変更して他の解像度にしたり、高さフィルターを削除して利用可能な最高品質にできます。

--newline は各進捗更新を個別の行に出力し、ログを読みやすくします。

ファイル名の [%(id)s] は、同じタイトルの再アップロードが互いに上書きするのを防ぎ、ファイルの出典を記録します。タイトル内のスラッシュや絵文字が問題を引き起こす場合は --restrict-filenames を追加します。

長時間ダウンロード

数百 MB を超えるものはバックグラウンドで実行し、待機するのではなく、タイトルと予想サイズをユーザーに伝えます。

バックグラウンドダウンロードを tail や head にパイプしないでください。出力がバッファリングされ、ダウンロードが完了するまでログは空のままになります。進捗を確認するには、増大する .part ファイルを -F のサイズと比較します:

ls -la ~/Movies/*.part

中断されたダウンロードを再開するには、同じコマンドを再実行します。yt-dlp は .part ファイルから続行します。

バリエーション

音声のみ (MP3):

cd ~/Music && yt-dlp -x --audio-format mp3 --audio-quality 0 \
  --embed-metadata --embed-thumbnail -o "%(title)s.%(ext)s" "URL"

--audio-format m4a を使用すると、YouTube のオリジナルの AAC 音声を保持できます。再エンコードよりも高速で、品質が低下しません。

任意のコーデックで最高品質:

yt-dlp -f "bv*+ba/b" --merge-output-format mkv "URL"

MKV は任意のコーデックの組み合わせを保持できます。QuickTime では開けない可能性があることをユーザーに警告します。

字幕:

yt-dlp --write-subs --write-auto-subs --sub-langs "en.*" --embed-subs "URL"

--write-auto-subs は YouTube の自動キャプションを含みます。トランスクリプトのみが必要な場合は --skip-download を追加します。

動画の一部:

yt-dlp --download-sections "*00:10:00-00:15:30" "URL"

プレイリストまたはチャンネル:

yt-dlp -o "%(playlist)s/%(playlist_index)03d - %(title)s.%(ext)s" "URL"

プレイリストの一部には --playlist-items 1-10 を追加します。--download-archive archive.txt を追加すると、再度実行したときに既にダウンロード済みのものをスキップします。後で更新する予定のものに便利です。

ドライラン: --simulate はダウンロードせずに形式とファイル名を計算します。

残存ストリームの結合

マージステップが失敗した場合、再ダウンロードせずに分離されたファイルを結合します:

ffmpeg -i "NAME.f137.mp4" -i "NAME.f140.m4a" -c copy -movflags +faststart "NAME.mp4"

-c copy はストリームを再エンコードせずに結合するため、高速で品質が低下しません。+faststart はインデックスをファイルの先頭に移動し、完全に読み込まれる前に再生を開始できるようにします。結果が再生できることを確認したら、.fNNN ファイルを削除します。

トラブルシューティング

問題解決策
Requested format is not available-F を実行して実際のリストから選択します。サイトがその解像度またはコーデックを提供していない可能性があります。
HTTP 403、"unable to extract"、または署名エラーyt-dlp が古いです。更新してください(brew upgrade yt-dlp または pip install -U yt-dlp)。YouTube 障害ではまずこれを確認します。
"Sign in to confirm you're not a bot"--cookies-from-browser chrome(または safari、firefox)を追加します。先にブラウザを終了してください。Chrome は Cookie データベースをロックするためです。
完全ダウンロード後に ffmpeg not foundffmpeg が欠落しているか、アーキテクチャが間違っています。事前確認 を参照し、再ダウンロードではなく残存ファイルを結合します。
bad CPU type in executableIntel バイナリが Apple Silicon 用の代わりに使用されています。--ffmpeg-location /opt/homebrew/bin を指定します。
マージ失敗または音声なしffmpeg が古すぎるか、ffprobe が欠落しています。ffmpeg を再インストールします。
ダウンロードが非常に遅い--concurrent-fragments 4 を追加します。
年齢制限付きまたはプライベート動画ログインしているブラウザで --cookies-from-browser を使用します。

関連スキル