ユーザ用ツール

サイト用ツール


linux:youtube-dl

類 : Video Download

youtube-dl

youtube以外にも様々なsiteがサポートされている.URL で判断するようなので特にオプションも要らない.(Youtubeだと動画IDだけでOK)

導入

Debian packageにもあるけれどsidのpackageでも仕様変更で使えなくなっていることがよくある。 以前はpipで入れたりしていてちょっと面倒だったけど今は1ファイルで配布されているものがあるのでこちらを利用するのがお手軽。

$ curl -L https://yt-dl.org/downloads/latest/youtube-dl -o ~/bin/youtube-dl
$ chmod +rx ~/bin/youtube-dl

pythonがあれば色々な環境で動く。例えば以下はAndroid の termux 環境

アップデート

普通に使う分にはGithubでReleaseをWatchしておいてリリースされたときや、うまく動かなくなったら更新する感じでいいと思う。
アップデートオプションがあった -U

$ youtube-dl -U
youtube-dl is up-to-date (2019.11.28)
$ youtube-dl -U
Updating to version 2019.12.25 ...
Updated youtube-dl. Restart youtube-dl to use the new version.
$ youtube-dl --version
2019.12.25

example

動画ダウンロード

ダウンロードしたい動画ページのURLを指定する.Youtubeの場合は動画IDだけでもOK。 プレイリストのurlを指定するとその中の動画をすべて取得しようとする

$ youtube-dl $URL

URLは複数書ける

$ youtube-dl $URL1 $URL2 ...

-c オプションで中断したファイルの続きからダウンロード(wget -c的な動作)

$ youtube-dl -c $URL1

-R オプションで再試行回数が指定できる.既定値は10で、無限( infinite )も指定できる

$ youtube-dl -R 99 $URL1

不安定な回線でダウンロードする

-c -R infinite で不安定な回線でも最後までダウンロードと思ったけど回線が詰まるとやはりエラーで終了してしまう.-R 99999 とかでも同じなよう.

ERROR: unable to download video data: No status line received - the server has closed the connection

とりあえずループで試してみる
while loop でyoutube-dlが正常終了したら終了.異常終了したら60秒待って再試行.

$ while :;do youtube-dl -c $URL && break; sleep 60; done

一応動くようだけど遅い回線だと数%毎にやり直し.そしてメタデータダウンロードし直しになるのでかなり効率悪そう. 安定した回線のリモートサーバでダウンロードしてrsyncで手元に持ってくるほうが安定する.( $ rsync --remove-source-files -avvce ssh $REMOTE:~/Videos/*.mp4 ~/Videos/ )

URL( -g )やtitle( -e ) を前もって入手してメタデータを再読込しないようにするとマシになるかも?(未確認)

ダウンロード速度制限

-r, --limit-rate RATE            Maximum download rate in bytes per second
                                 (e.g. 50K or 4.2M)

VODなら1倍速を切る速度でも大抵ダウンロードできるが、ニコニコ動画などでは途中でURLが無効になるようで失敗する。その場合は -c オプションをつけてリトライすると続きからダウンロードできてそれを繰り返すと最後までダウンロード出来た。 これは -r 利用時に限らず低速回線の場合も同じ。

動画形式確認&指定ダウンロード

既定値では最高画質を求めるようで25分ほどの動画が残り6時間とか出てきて辛いので低めの画質を確認して使ったりする

$ youtube-dl -F $URL

ダウンロードしたい format code-f オプションに指定する

$ youtube-dl -f xxx $URL

format code は同じシリーズでも変わるようなので解像度などを頼りにしたほうが良さそう

854×480のものをダウンロード

$ youtube-dl -f $(youtube-dl -F $URL | grep mp4 | grep 854x480 | tail -1 | awk {'print $1'}) $URL

ただこの手順だとプレイリスト2本目以降では失敗する可能性が高い

解像度やフォーマットを指定できた

$ youtube-dl -f 'bestvideo[height<=480]+bestaudio/best[height<=480]' $URL

保存先指定

通常はカレントディレクトリに保存される. cronで動かすときなどに保存ディレクトリを変更したい場合は -o $TEMPLATE

単純なディレクトリ指定ではなく,TEMPLATE指定になっている.

~/Videos 以下にダウンロード

$ youtube-dl -o '~/Videos/%(title)s.%(ext)s' $URL

プレイリストディレクトリ以下にダウンロード

$ youtube-dl -o '~/Videos/%(playlist)s/%(title)s.%(ext)s' $URL

-o - で標準出力へ出力

詳細は https://github.com/ytdl-org/youtube-dl/blob/master/README.md#output-template

保存せず動画視聴

Xが無くてもストリーミング動画を見たいときなどに

$ youtube-dl -o - $URL | ffplay -

Raspbian だとomxplayer とか

若しくはstreamlink

ユーザ認証

ログインが必要な場合などに。

  • -u : ユーザ名
  • -p : password
  • -2 : 2要素認証
  • –video-password : ヴィデオパスワード(Vimeo等)
  • -n : netrc利用

いつも使うのであれば netrc が利用できる。

その昔ftpの認証情報とかを書いてたやつ ~/.netrc

平分で書くので取扱注意。

netrc例

machine youtube login myaccount@gmail.com password my_youtube_password
machine twitch login my_twitch_account_name password my_twitch_password

その他のサービスのmachineはサービスのファイルを youtube_dl/extractor 以下に見に行って _NETRC_MACHINE を検索すると大体判る

$ find youtube_dl/extractor -type f -print0 | xargs -0 grep _NETRC_MACHINE

よく使いそうなやつ?

  • niconico
  • vk
  • tumblr
  • linkedin
  • vimeo
  • fc2
  • twitch
  • facebook
  • youtube

※サービスの利用規約に反していることが多いと思うのでよく使う場合はサブアカウントなどを使ったほうがいいかも。

ニコニコ動画でチャンネルが利用できない

ニコニコ動画のチャンネルはサポートされていないよう

ERROR: Unsupported URL: https://ch.nicovideo.jp/youjo-senki

とりあえずチャンネルページから動画ページは取得できる

$ w3m -dump_source https://ch.nicovideo.jp/youjo-senki | zcat | grep -o -e 'https://www.nicovideo.jp/watch/[0-9]*' | sort | uniq
https://www.nicovideo.jp/watch/1482824998
https://www.nicovideo.jp/watch/1484708189
https://www.nicovideo.jp/watch/1485313464
https://www.nicovideo.jp/watch/1485917546
https://www.nicovideo.jp/watch/1486521261
https://www.nicovideo.jp/watch/1487127921
https://www.nicovideo.jp/watch/1487649323
https://www.nicovideo.jp/watch/1488336806
https://www.nicovideo.jp/watch/1488940520
https://www.nicovideo.jp/watch/1489546100
https://www.nicovideo.jp/watch/1490169684
https://www.nicovideo.jp/watch/1490773545
https://www.nicovideo.jp/watch/1491279087
$ curl -s https://ch.nicovideo.jp/youjo-senki | grep -o -e 'https://www.nicovideo.jp/watch/[0-9]*' | sort | uniq | xargs -n1 youtube-dl

設定ファイル

設定ファイル( ~/.config/youtube-dl/config, /etc/youtube-dl.conf )に書いておくこともできる

$ mkdir ~/.config/youtube-dl
$ echo "-f 'bestvideo[height<=480]+bestaudio/best[height<=480]'" >> ~/.config/youtube-dl/config

設定ファイルを無視したい場合は --ignore-config
既定値以外の設定ファイルを指定したい場合は --config-location
例えば画質別に設置を作っておくなど便利

$ youtube-dl --config-location ~/.config/youtube-dl/config-240p $URL
# youtube-dl の設定ファイル
# ~/.config/youtube-dl/config, /etc/youtube-dl.conf
# 行頭 # はコメント

# 冗長
-v

# resume
-c

# 480pまでに制限
-f 'bestvideo[height<=480]+bestaudio/best[height<=480]'

# 保存先指定
-o '~/Videos/%(title)s.%(ext)s'

コメント

コメントを入力. Wiki文法が有効です:
140 +3 = 
 
linux/youtube-dl.txt · 最終更新: 2020/01/06 21:43 by matoken