ユーザ用ツール

サイト用ツール


サイドバー

最新の10件
一覧
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は複数書ける.途中の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

ユーザ認証

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

  • -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

TVerの番組を録画

録画したいURLをFirefoxやGoogle Chromeで開く.(ChromiumではTVerのページが正常に開けなかった)

https://tver.jp/episode/82100509

開発者ツールを開き, data-accountdata-video の値を調べる.

今回は,

  • data-account=5102072605001
  • data-video-id=6229839999001

この値を以下の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'

GUI

コメント

コメントを入力. Wiki文法が有効です:
   ___    __    __ __  ____  _____
  / _ |  / /   / // / /_  / / ___/
 / __ | / /__ / _  /   / /_/ /__  
/_/ |_|/____//_//_/   /___/\___/
 
linux/youtube-dl.txt · 最終更新: 2021/08/26 04:32 by matoken