かすみん日記

暇なときに何か喋ります

youtube-dlの使い方

Youtubeなどの動画をダウンロードするにはyoutube-dlというコマンドライン・プログラムを使うのが簡単。

Youtube以外の動画サイトでも使えるらしい。

インストールから基本的な使い方まで、調べたことをまとめておきます。

以下ではYoutubeで利用することを前提に話をしているところがあります。

目次

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を代わりに使えばよい。

https://github.com/blackjack4494/yt-dlc/issues/7

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/configCookieを利用するように設定;

--cookies ~/.config/youtube-dl/config

参考

github.com

github.com

github.com

mac-ra.com

knooto.info