youtube-dlの使い方
Youtubeなどの動画をダウンロードするにはyoutube-dlというコマンドライン・プログラムを使うのが簡単。
Youtube以外の動画サイトでも使えるらしい。
インストールから基本的な使い方まで、調べたことをまとめておきます。
以下ではYoutubeで利用することを前提に話をしているところがあります。
目次
- 目次
- youtube-dl
- 環境
- youtube-dlのインストール
- 基本的な使い方
- プレイリストをDL
- 年齢制限のある動画をDL
- 非公開プレイリストのDL
- DLするディレクトリ・ファイル名の指定
- 形式を選択してDL
- サムネをDL
- シミュレーション
- 一括DL
- 設定ファイルを作成
- ログイン認証
- 参考
youtube-dl
youtube-dlはPythonで書かれたオープンソースのプログラム。
環境
テスト確認などをした私の環境です。
youtube-dlのインストール
Homebrewでインストール;
brew install youtube-dl
バージョン確認;
% youtube-dl --version 2021.06.06
基本的な使い方
動画のURLを指定するだけで、動画をDLできる;
youtube-dl "動画のURL"
DL可能なファイルの中で最高画質・最高音質のものを自動でDLするようになっている。
URLの代わりに動画のIDを指定しても構わない。
動画のIDはURLの?v=
からURLの終わりか&
が登場する部分までのことを指す。
例えばURLがhttps://www.youtube.com/watch?v=H3KvMgoA1C4
であれば、動画のIDはH3KvMgoA1C4
。
なお、プレイリスト中の動画(URLに&list=
が含まれる)の場合、単にURLを指定するだけではプレイリストの動画を全てDLしてしまう。
ひとつの動画だけをDLしたいなら、動画IDのみを抽出して指定するか、--no-playlist
オプションを付ける;
youtube-dl --no-playlist "動画のURL"
DLしたファイルは、デフォルトでは動画タイトル-動画ID.拡張子
という名前でカレントディレクトリに保存される。
プレイリストをDL
プレイリストのURLを指定すれば、その中にある動画をまとめてDLすることもできる。
プレイリストのID(URLのlist=
以降)を指定しても構わない。
年齢制限のある動画をDL
年齢制限のある動画をDLするには、年齢制限をクリアしたアカウントでログイン認証する必要がある(後述)。
あるいはyoutube-dlのforkであるyt-dlpを代わりに使えばよい。
yt-dlpはHomebrewでインストールできる;
brew install yt-dlp
使い方(オプションなど)はオリジナルのyoutube-dlと同じ。
しかしこちらでは、年齢制限のある動画でも認証なしでDL可能;
yt-dlp "動画のURL"
非公開プレイリストのDL
他人が非公開にした動画やプレイリストのDLは不可能。
自分が作った非公開プレイリストは、そのアカウントでログイン認証すれば利用可能。
認証方法は後述。
DLするディレクトリ・ファイル名の指定
-o
オプションでファイル名を指定してDLできる。
% youtube-dl -o output "URL" ... % ls output.mp4
保存ディレクトリも指定することが可能;
youtube-dl -o "~/Downloads/output" "URL"
デフォルトのテンプレートは%(title)s-%(id)s.%(ext)s
。
ファイル名だけを取得するには--get-filename
オプションを付ける。
タイトルに含まれる半角スペースや
&
などの記号を使わないようにするには--restrict-filenames
オプションを付ける。
%
をエスケープするには%%
と書く。
%(title)s
のようなシークエンス?はPythonの形式にしたがっている模様。
どういうタイプが用意されているかは公式のドキュメントを参照。
どのようなファイル名で保存されるかを確認したいときは、--get-filename
オプションを付ければ標準出力に表示される(ファイルはDLされない)。
形式を選択してDL
デフォルトで最高品質のものをDLできるが、画質・形式(拡張子)などを指定してDLすることもできる。
-F
オプションを付けると、DL可能なファイル一覧を表示する(DLはしない);
youtube-dl -F "URL"
さまざまな画質や拡張子が表示される。
一番左に表示されるformat code
カラムの数字を-f
オプションで指定することで、その動画(音声)ファイルをDLできる;
youtube-dl -f "format code" "URL"
デフォルトで-f bestvideo+bestaudio/best
オプションが設定されているので、何も付けなくても最高品質のものがDLされる。
拡張子や画質やそれらの優先順位などいろいろな指定方法があるが、詳しくは公式ドキュメントを参照。
実用的なのは、以下のように最高品質なmp4ファイルを指定するものであろう;
youtube-dl -f "bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best" "URL"
どのような形式のファイルがDLされるのかを確認するには、--get-format
オプションを付ける(ファイルはDLされない)。
音声のみDL
音声だけDLしたければ、(利用可能な)音声ファイルの拡張子を指定すればよい;
youtube-dl -f m4a "URL"
形式を問わず、最高品質の音声ファイルがほしいのであれば、次のように指定すればいい;
youtube-dl -f bestaudio "URL"
あるいは、-x
オプションで動画から音声を抽出する;
youtube-dl -x "URL"
抽出した音声の形式をエンコードしたいなら--audio-format
オプションで拡張子を指定する;
youtube-dl -x --audio-format mp3 "URL"
-f bestaudio
は利用可能な音声ファイルをDLするもので、-x
は利用可能な動画・音声ファイルの中で最高品質のものを、音声ファイルであればそのままDLし、動画ファイルであればDLして音声のみ抽出する、という点で若干異なる(結局同じになる場合もある)。
--audio-format
オプションは-x
とセットでのみ利用可能。
ということで、音声ファイルのみほしい場合は、-x
オプションを使った方がよさげ。
サムネをDL
--write-thumbnail
オプションを付けると、動画のサムネもDLする。
サムネだけDLしたい場合は--skip-download
オプションを付けて動画はDLしないようにすればいい;
youtube-dl --write-thumbnail --skip-download "URL"
サムネのURLを知りたいときは、--get-thumbnail
オプションを付けて実行すれば標準出力に出力される;
youtube-dl --get-thumbnail --skip-download "URL"
シミュレーション
実際に動画ファイルをDLすることなく、動画のメタ情報だけをいろいろと取得できる。
例えば、動画のタイトルだけを取得するには-e
オプションを使う;
youtube-dl -e "URL" # OR youtube-dl --get-title "URL"
プレイリストを指定すれば、プレイリスト内の動画のタイトルをそれぞれ取得する。
他にもいろいろある:
-g, --get-url
:動画のURLを取得。動画ページのURLではなくて、ファイルが置いてあるURL。-e, --get-title
:動画のタイトルを取得。--get-id
:動画のIDを取得。URL中のIDと同じ。--get-thumbnail
:サムネイルのURLを取得。--get-description
:動画の概要を取得。動画の下に書いてあるやつ。--get-duration
:動画の長さを取得。2:13
みたいな形式で表示。--get-filename
:DLしたときの動画のファイル名を表示。--get-format
:DLされる動画の形式を取得。
一括DL
URLのリストを用意しておくことで、自動で順番にDLすることもできる。
例えばlist.txt
にDLする動画のURLを改行区切りで並べておき、-a
オプションでそのファイルを渡せば良い;
youtube-dl -a list.txt
-a
オプションは--batch-file
オプションの略。
設定ファイルを作成
~/.config/youtube-dl/config
ファイルにオプションを列挙しておけば、デフォルトのオプション引数として利用できる。
例えば、DLするディレクトリをデフォルトのカレントディレクトリから~/Downloads/
に変更するには、~/.config/youtube-dl/config
ファイルに以下のように設定を書く;
-o "~/Downloads/%(title)s-%(id)s.%(ext)s"
他にもいろいろ書いておきたいなら、改行して列挙しても構わない。
ログイン認証
基本的には以下の方法で認証できるはずだが、どうやら現在の?youtubeでは認証失敗するらしい。
一応標準的な認証方法をまとめておくが、Cookieを利用する方法のところまで読み飛ばして構わない。
引数で直接指定
引数で-u <username> -p <password>
とログイン情報を指定すれば、認証した後動画をDLできる。
例えば以下のような感じ;
youtube-dl -u my_account@gmail.com -p my_password "URL"
認証情報ファイルを作成
~/.netrc
ファイルを用意すれば、毎回ログイン情報を直接書かなくてもよくなる。
~/.netrc
ファイルはyoutube-dlに限らず、一般に用いられているものらしい。
まだ存在していなければ、~/.netrc
ファイルを作成する;
touch ~/.netrc
パスワードを書いておくので、他人に見られないように権限を変更;
chmod a-rwx,u+rw ~/.netrc
権限を確認。以下のようになっていればOK;
% ls -al ~ | grep .netrc -rw------- 1 hoge staff 200 10 1 05:27 .netrc
~/.netrc
ファイルに以下のようにしてログイン情報を書いておく;
machine youtube login my_account@gmail.com password my_youtube_password machine twitch login my_twitch_account_name password my_twitch_password
この情報を利用してログインするには--netrc
オプションを付けて実行する;
youtube-dl --netrc "URL"
Cookieを利用して認証
始めにも書いたが、上記の標準的な認証方法ではダメなときがある。
そういうときはCookieを利用して認証すればよい。
まず、Cookieをテキストファイルとして取り出すために、ブラウザの拡張機能をインストールする。
インストールが済んだら、Youtubeのページを開き、ログインを済ませる。
ログインしてYoutubeのページを開いた状態で、拡張機能を実行(アイコンをクリック)して、CookiesをテキストファイルとしてDL。
カレントディレクトリに、DLしたCookieのファイルがcookies.txt
という名前であるとする。
--cookies
オプションでCookieを指定することで認証することができる;
youtube-dl --cookies cookies.txt "URL"
毎回引数でファイルを指定するのは面倒なので、設定ファイルに書いておけばいいかもしれない。
ファイルも邪魔なので移動;
mv cookies.txt ~/.config/youtube-dl/
一応他人から見えないように権限を変更;
chmod a-rwx,u+rw ~/.config/youtube-dl/cookies.txt
設定ファイル~/.config/youtube-dl/config
にCookieを利用するように設定;
--cookies ~/.config/youtube-dl/config