コンテンツにスキップ

Ubuntuにyt-dlpをインストール

事前準備(推奨)

ffmpegがないと、音声と動画の結合や、ファイル形式の指定などが期待通り動作しません。

Terminal window
sudo apt update
sudo apt install ffmpeg

インストール

アップデート

  • pipxの場合: pipx upgrade yt-dlp
  • 公式バイナリの場合: yt-dlp -U
  • aptの場合: sudo apt update && sudo apt upgrade yt-dlp

動画をダウンロード

例として、「YOASOBI「アイドル」 Official Music Video」(https://www.youtube.com/watch?v=ZRtdQ81jPUQ)をダウンロードします。

Terminal window
yt-dlp -t mp4 -o '%(id)s_%(title)s.%(ext)s' 'https://www.youtube.com/watch?v=ZRtdQ81jPUQ'

-o '%(id)s_%(title)s.%(ext)s'の指定により、

ZRtdQ81jPUQ_YOASOBI「アイドル」 Official Music Video.mp4のようなファイル名で出力されます。

詳細

最高品質の動画ファイル

Terminal window
yt-dlp -f "bv+ba/b" -o '%(id)s_%(title)s.%(ext)s' 'https://www.youtube.com/watch?v=ZRtdQ81jPUQ'

フォーマット一覧を確認

Terminal window
yt-dlp -F 'https://www.youtube.com/watch?v=ZRtdQ81jPUQ'
実行結果
実行結果(pipx)
[youtube] Extracting URL: https://www.youtube.com/watch?v=ZRtdQ81jPUQ
[youtube] ZRtdQ81jPUQ: Downloading webpage
[youtube] ZRtdQ81jPUQ: Downloading android vr player API JSON
[youtube] ZRtdQ81jPUQ: Downloading web safari player API JSON
[youtube] ZRtdQ81jPUQ: Downloading player fd1b5dc8-tv
[youtube] [jsc:deno] Solving JS challenges using deno
[youtube] ZRtdQ81jPUQ: Downloading m3u8 information
[info] Available formats for ZRtdQ81jPUQ:
ID EXT RESOLUTION FPS CH FILESIZE TBR PROTO VCODEC VBR ACODEC ABR ASR MORE INFO
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
sb3 mhtml 48x27 0 mhtml images storyboard
sb2 mhtml 80x45 1 mhtml images storyboard
sb1 mhtml 160x90 1 mhtml images storyboard
sb0 mhtml 320x180 1 mhtml images storyboard
139 m4a audio only 2 1.31MiB 49k https audio only mp4a.40.5 49k 22k [ja] low, m4a_dash
249 webm audio only 2 1.31MiB 49k https audio only opus 49k 48k [ja] low, webm_dash
140 m4a audio only 2 3.49MiB 129k https audio only mp4a.40.2 129k 44k [ja] medium, m4a_dash
251 webm audio only 2 3.35MiB 124k https audio only opus 124k 48k [ja] medium, webm_dash
91 mp4 256x144 24 ~ 4.60MiB 171k m3u8 avc1.4D400C mp4a.40.5 [ja]
28行の折りたたみ
160 mp4 256x144 24 1.80MiB 67k https avc1.4d400c 67k video only 144p, mp4_dash
278 webm 256x144 24 1.88MiB 70k https vp9 70k video only 144p, webm_dash
394 mp4 256x144 24 1.63MiB 61k https av01.0.00M.08 61k video only 144p, mp4_dash
92 mp4 426x240 24 ~ 8.38MiB 311k m3u8 avc1.4D4015 mp4a.40.5 [ja]
133 mp4 426x240 24 3.76MiB 140k https avc1.4d4015 140k video only 240p, mp4_dash
242 webm 426x240 24 3.57MiB 133k https vp9 133k video only 240p, webm_dash
395 mp4 426x240 24 2.83MiB 105k https av01.0.00M.08 105k video only 240p, mp4_dash
93 mp4 640x360 24 ~ 21.63MiB 803k m3u8 avc1.4D401E mp4a.40.2 [ja]
134 mp4 640x360 24 7.31MiB 272k https avc1.4d401e 272k video only 360p, mp4_dash
18 mp4 640x360 24 2 10.78MiB 401k https avc1.42001E mp4a.40.2 44k [ja] 360p
243 webm 640x360 24 7.44MiB 276k https vp9 276k video only 360p, webm_dash
396 mp4 640x360 24 5.24MiB 195k https av01.0.01M.08 195k video only 360p, mp4_dash
94 mp4 854x480 24 ~ 36.46MiB 1353k m3u8 avc1.4D401E mp4a.40.2 [ja]
135 mp4 854x480 24 11.72MiB 435k https avc1.4d401e 435k video only 480p, mp4_dash
244 webm 854x480 24 11.75MiB 437k https vp9 437k video only 480p, webm_dash
397 mp4 854x480 24 8.55MiB 318k https av01.0.04M.08 318k video only 480p, mp4_dash
95 mp4 1280x720 24 ~ 63.17MiB 2345k m3u8 avc1.4D401F mp4a.40.2 [ja]
136 mp4 1280x720 24 19.43MiB 722k https avc1.4d401f 722k video only 720p, mp4_dash
247 webm 1280x720 24 23.85MiB 886k https vp9 886k video only 720p, webm_dash
398 mp4 1280x720 24 15.10MiB 561k https av01.0.05M.08 561k video only 720p, mp4_dash
96 mp4 1920x1080 24 ~126.46MiB 4694k m3u8 avc1.640028 mp4a.40.2 [ja]
137 mp4 1920x1080 24 70.55MiB 2621k https avc1.640028 2621k video only 1080p, mp4_dash
248 webm 1920x1080 24 43.28MiB 1608k https vp9 1608k video only 1080p, webm_dash
399 mp4 1920x1080 24 31.90MiB 1185k https av01.0.08M.08 1185k video only 1080p, mp4_dash
271 webm 2560x1440 24 205.00MiB 7618k https vp9 7618k video only 1440p, webm_dash
400 mp4 2560x1440 24 155.96MiB 5795k https av01.0.12M.08 5795k video only 1440p, mp4_dash
313 webm 3840x2160 24 443.00MiB 16462k https vp9 16462k video only 2160p, webm_dash
401 mp4 3840x2160 24 351.15MiB 13049k https av01.0.12M.08 13049k video only 2160p, mp4_dash

ID 91をダウンロード

Terminal window
yt-dlp -f 91 'https://www.youtube.com/watch?v=ZRtdQ81jPUQ'

詳細は、https://github.com/yt-dlp/yt-dlp#format-selection

最高品質の音声ファイル

Terminal window
yt-dlp -f 'ba' -o '%(id)s_%(title)s.%(ext)s' 'https://www.youtube.com/watch?v=ZRtdQ81jPUQ'
# mp3 形式が欲しい場合
# yt-dlp -x --audio-format mp3 --audio-quality 0 -o '%(id)s_%(title)s.%(ext)s' 'https://www.youtube.com/watch?v=ZRtdQ81jPUQ'
# または
# yt-dlp -t mp3 -o '%(id)s_%(title)s.%(ext)s' 'https://www.youtube.com/watch?v=ZRtdQ81jPUQ'
Bot対策(Cookie)

以下のようなエラーが発生することがあります。

Terminal window
ERROR: [youtube] ZRtdQ81jPUQ: Sign in to confirm you’re not a bot. Use --cookies-from-browser or --cookies for the authentication. See https://github.com/yt-dlp/yt-dlp/wiki/FAQ#how-do-i-pass-cookies-to-yt-dlp for how to manually pass cookies. Also see https://github.com/yt-dlp/yt-dlp/wiki/Extractors#exporting-youtube-cookies for tips on effectively exporting YouTube cookies

以下のような対策があります。どちらも、自身の非公開動画をダウンロードすることもできるようになります。

  • 手軽: --cookies-from-browser(そのマシンのブラウザから直接読む)
  • 使い回したい: Cookie ファイル(Netscape 形式)を用意して--cookiesで読む
--cookies-from-browser (例: Brave)
yt-dlp -t mp4 --cookies-from-browser brave 'https://www.youtube.com/watch?v=ZRtdQ81jPUQ'

ここでは複数のマシンで使い回せるように、Cookie ファイルを使用する方法を試しました(https://github.com/yt-dlp/yt-dlp/wiki/Extractors#exporting-youtube-cookies)。

ブラウザとしてBrave(Chromium ベース)を使用していたので、拡張機能Get cookies.txt LOCALLYを使って出力しました。(Firefox 系: cookies.txt

以下のような Cookie ファイルが得られます(Netscape フォーマット)。

www.youtube.com_cookies.txt
# Netscape HTTP Cookie File
# https://curl.haxx.se/rfc/cookie_spec.html
# This is a generated file! Do not edit.
.youtube.com TRUE / TRUE 1766226956 GPS 1
.youtube.com TRUE / TRUE 1781777174 PREF f6=40000000&tz=Asia.Tokyo
21行の折りたたみ
.youtube.com TRUE / TRUE 1781777171 __Secure-1PSIDTS sidts-XXXXXXXXXXXXXXXXX
.youtube.com TRUE / TRUE 1781777171 __Secure-3PSIDTS sidts-XXXXXXXXXXXXXXXXX
.youtube.com TRUE / FALSE 1781777171 HSID XXXXXXXXXXXXXXXXX
.youtube.com TRUE / TRUE 1781777171 SSID XXXXXXXXXXXXXXXXX
.youtube.com TRUE / FALSE 1781777171 APISID XXXXXXXXXXXXXXXXX
.youtube.com TRUE / TRUE 1781777171 SAPISID XXXXXXXXXXXXXXXXX
.youtube.com TRUE / TRUE 1781777171 __Secure-1PAPISID XXXXXXXXXXXXXXXXX
.youtube.com TRUE / TRUE 1781777171 __Secure-3PAPISID XXXXXXXXXXXXXXXXX
.youtube.com TRUE / FALSE 1781777171 SID XXXXXXXXXXXXXXXXX
.youtube.com TRUE / TRUE 1781777171 __Secure-1PSID XXXXXXXXXXXXXXXXX
.youtube.com TRUE / TRUE 1781777171 __Secure-3PSID XXXXXXXXXXXXXXXXX
.youtube.com TRUE / TRUE 1781777171 LOGIN_INFO XXXXXXXXXXXXXXXXX
.youtube.com TRUE / TRUE 1766225774 CONSISTENCY XXXXXXXXXXXXXXXXX
.youtube.com TRUE / FALSE 1781777186 SIDCC XXXXXXXXXXXXXXXXX
.youtube.com TRUE / TRUE 1781777186 __Secure-1PSIDCC XXXXXXXXXXXXXXXXX
.youtube.com TRUE / TRUE 1781777186 __Secure-3PSIDCC XXXXXXXXXXXXXXXXX
.youtube.com TRUE / TRUE 1781777155 __Secure-YNID XXXXXXXXXXXXXXXXX
.youtube.com TRUE / TRUE 0 YSC XXXXXXXXXXXXXXXXX
.youtube.com TRUE / TRUE 1781777177 VISITOR_INFO1_LIVE XXXXXXXXXXXXXXXXX
.youtube.com TRUE / TRUE 1781777177 VISITOR_PRIVACY_METADATA XXXXXXXXXXXXXXXXX
.youtube.com TRUE / TRUE 1781777156 __Secure-ROLLOUT_TOKEN XXXXXXXXXXXXXXXXX

コマンドで--cookies www.youtube.com_cookies.txtのように指定します。

Terminal window
yt-dlp -t mp4 --cookies www.youtube.com_cookies.txt -o '%(id)s_%(title)s.%(ext)s' 'https://www.youtube.com/watch?v=ZRtdQ81jPUQ'

オプションが長いので、

  • ~/.config/yt-dlp/config
  • ~/yt-dlp.conf
  • ~/yt-dlp.conf.txt
  • ~/.yt-dlp/config
  • ~/.yt-dlp/config.txt

などの設定ファイルに記述しておくと便利です。

Terminal window
mkdir -p ~/.config/yt-dlp ~/.local/share/yt-dlp
mv www.youtube.com_cookies.txt ~/.local/share/yt-dlp/
chmod 600 ~/.local/share/yt-dlp/www.youtube.com_cookies.txt
cat > ~/.config/yt-dlp/config <<'EOF'
--cookies ${HOME}/.local/share/yt-dlp/www.youtube.com_cookies.txt
-o %(id)s_%(title)s.%(ext)s
EOF
Terminal window
yt-dlp -t mp4 ZRtdQ81jPUQ
おまけ
  • 再取得防止

    --download-archiveオプションを追加します。

    Terminal window
    yt-dlp --download-archive archive.txt -t mp4 "URL"

    archive.txtにはサービス名と ID が書き込まれます。

    youtube ZRtdQ81jPUQ
    tiktok 76XXXXXXXXXXXXXXXXX

    一度ダウンロードした動画をダウンロードしようとすると、スキップしてくれます。

  • 切り抜き

    --download-sectionsオプションを追加します。

    動画の 55 秒から 1 分 7 秒までをダウンロードする場合は、"*00:00:55-00:01:07"のように指定します。

    Terminal window
    yt-dlp -f "bv+ba/b" \
    --download-sections "*00:00:55-00:01:07" \
    -o "%(title)s_%(section_start)s-%(section_end)s.%(ext)s" \
    ZRtdQ81jPUQ

    動画の先頭に余分な映像(真っ黒)がついてくることがあります。--force-keyframes-at-cutsにより改善することがありますが、エンコード処理に時間がかかります。

    Terminal window
    yt-dlp -f "bv+ba/b" \
    --download-sections "*00:00:55-00:01:07" \
    --force-keyframes-at-cuts \
    -o "%(title)s_%(section_start)s-%(section_end)s.%(ext)s" \
    ZRtdQ81jPUQ

    時間指定であれば全体をダウンロードしないので効率的で早いと思ったら、エンコード処理が足を引っ張りむしろ遅く感じる、みたいなこともあります。

    超長い尺の動画から一瞬だけ切り抜くなら上記の時間指定がよいと思います。

  • ファイル名に使える文字を制限

    --restrict-filenamesオプションを追加します。

    Restrict filenames to only ASCII characters, and avoid ”&” and spaces in filenames

    環境によっては、ファイル名に日本語のような文字は避けた方がよいことがあります。

    Terminal window
    yt-dlp --restrict-filenames -t mp4 "URL"

    他のオプションなしで、--restrict-filenamesオプションを

    • 含めない場合はそのまま、YOASOBI「アイドル」 Official Music Video [ZRtdQ81jPUQ].mp4
    • 含める場合は日本語が消えて、YOASOBI_Official_Music_Video-[ZRtdQ81jPUQ].mp4
  • TikTok

    yt-dlpという名前ですが、TikTok にも対応しています。

    --user-agent "abc"のように、ユーザーエージェントとしてabcを指定すると、ブロックされることが減りました。一般的なユーザーエージェントだとあまり効果なかったです。エンジニアのデバッグ用?

    ダウンロード方法は YouTube と同様です。

    Terminal window
    yt-dlp --user-agent "abc" https://www.tiktok.com/@yoasobi_ayase_ikura/video/7234009304888577287