動画ダウンロード (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 を追加します。
形式文字列はフォールバックのリストで、左から右に試行されます:
bv*[height<=1080][vcodec^=avc1]+ba[ext=m4a]: 最高品質の 1080p までの H.264 動画と、最高品質の M4A 音声。最も互換性の高いオプションです。bv*[height<=1080]+ba: その高さに H.264 がないサイト向けの任意のコーデック。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 found | ffmpeg が欠落しているか、アーキテクチャが間違っています。事前確認 を参照し、再ダウンロードではなく残存ファイルを結合します。 |
bad CPU type in executable | Intel バイナリが Apple Silicon 用の代わりに使用されています。--ffmpeg-location /opt/homebrew/bin を指定します。 |
| マージ失敗または音声なし | ffmpeg が古すぎるか、ffprobe が欠落しています。ffmpeg を再インストールします。 |
| ダウンロードが非常に遅い | --concurrent-fragments 4 を追加します。 |
| 年齢制限付きまたはプライベート動画 | ログインしているブラウザで --cookies-from-browser を使用します。 |