類 : Video Download
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
ダウンロードしたい動画ページのURLを指定する.Youtubeの場合は動画IDだけでもOK。 プレイリストのurlを指定するとその中の動画をすべて取得しようとする
$ youtube-dl $URL
URLは複数書ける.途中のURLで失敗するとそこで終了する. -i
, --ignore-errors
オプションを付けるとエラーをスキップして次の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
) を前もって入手してメタデータを再読込しないようにするとマシになるかも?(未確認)
VODは回線が太いと等速ではなく高速にダウンロードする.共用回線では絞ったほうが良さそう.
-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本目以降では失敗する可能性が高い
-f
で解像度やフォーマットを指定できた
$ 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
その他ファイルシステムのファイル名長制限に引っかかるときにサブタイトルを省くなどできる.(ファイルシステムを変更して逃げる手もある)
--list-subs
で字幕を確認
$ youtube-dl --list-subs https://www.youtube.com/watch?v=FvOkLdTEguo
--sub-lang=ja --write-sub
で日本語字幕をダウンロード.動画の他に 動画名.ja.vtt
というファイルがダウンロードされる.
$ youtube-dl --sub-lang=ja --write-sub https://www.youtube.com/watch?v=FvOkLdTEguo
--sub-lang=ja --write-auto-sub
で自動翻訳字幕をダウンロード※Youtubeのみ
$ youtube-dl --sub-lang=ja --write-auto-sub https://www.youtube.com/watch?v=bhJ4kjz0Rlc
--embed-subs
で動画中に字幕を埋め込み.このとき --sub-lang
を複数指定すると複数の字幕を埋め込める.(日本語+英語等)
$ youtube-dl --sub-lang=ja --write-auto-sub --embed-subs https://www.youtube.com/watch?v=bhJ4kjz0Rlc
mpv/vlc等で動画を再生すると自動的に字幕が表示された
Xが無くてもストリーミング動画を見たいときなどに
$ youtube-dl -o - $URL | ffplay -
Raspbian だとomxplayer とか
若しくはstreamlink
ログインが必要な場合などに。
いつも使うのであれば 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
よく使いそうなやつ?
※サービスの利用規約に反していることが多いと思うのでよく使う場合はサブアカウントなどを使ったほうがいいかも。
ニコニコ動画のチャンネルはサポートされていないよう
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
録画したいURLをFirefoxやGoogle Chromeで開く.(ChromiumではTVerのページが正常に開けなかった)
https://tver.jp/episode/82100509
開発者ツールを開き, data-account
と data-video
の値を調べる.
今回は,
この値を以下のURLに埋め込む.
http://players.brightcove.net/<data-account>/default_default/index.html?videoId=<data-video>
埋め込んだURLをyoutube-dlに渡してダウンロードする.
youtube-dl 'http://players.brightcove.net/5102072605001/default_default/index.html?videoId=6229839999001'
$ ffprobe -i ./情熱大陸 #1140「サイバー技術開発集団\ 統括・登大遊」-6229839999001.mp4 2>&1 | tail -13 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from './情熱大陸 #1140「サイバー技術開発集団 統括・登大遊」-6229839999001.mp4': Metadata: major_brand : isom minor_version : 512 compatible_brands: isomiso2avc1mp41 encoder : Lavf58.20.100 Duration: 00:25:04.11, start: 0.000000, bitrate: 2888 kb/s Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 2688 kb/s, 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc (default) Metadata: handler_name : VideoHandler Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 191 kb/s (default) Metadata: handler_name : Bento4 Sound Handler
設定ファイル( ~/.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'
コメント