youtube-dlで動画をダウンロード on Debian
(2022.12.8追記)
yt-dlpを使った方がダウンロード速度が速いですね。Debianのパッケージの中にあるので、以下のようにaptコマンドでインストールできます。
sudo apt install yt-dlp
使い方は、この記事の中にあるyoutube-dlコマンドをyt-dlpコマンドに置き換えるだけです。
youtube-dlからフォークしたソフトとのことで、(全てのオプションを試したわけではありませんが)youtube-dlのオプションをそのまま使えました。
yt-dlpのオプション等については以下のリンク先に書かれています。
https://github.com/yt-dlp/yt-dlp#usage-and-options
(2022.12.8追記ここまで)
youtube-dlというソフトを使ってみました。
youtube-dlに関するウェブサイト
https://yt-dl.org/
https://github.com/ytdl-org/youtube-dl
youtube-dlのインストール
curlコマンドを使うので、curlコマンドがインストールされていない場合は、先に
sudo apt install curl
を実行しておきます。
curlコマンドでyoutube-dlを取ってきて、/usr/binに配置します。
sudo curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl sudo chmod a+rx /usr/local/bin/youtube-dl
個人的には、バイナリファイルなので少し心配です。
ウィルス対策ソフトでチェックしたいような・・・。
おや?pythonについてエラーが・・・
インストールが終わり、試しにyoutube-dlコマンドを実行してみたら、以下のエラーが出ました。
/usr/bin/env: `python': そのようなファイルやディレクトリはありません
ネット検索をしたところ、/usr/bin/pythonが無いことでこの事象が起きたという記事を見つけました。そこで/usr/binの中を調べてみると、以下の2つはあるものの、「python」というファイルはありませんでした。
python3 python3.9
ちなみに、python3はpython3.9へのシンボリックリンクでした。
そこで、lnコマンドでpythonというシンボリックリンクを作りました。
sudo ln -s /usr/bin/python3 /usr/bin/python
もう一度youtube-dlコマンドを実行した所、エラーは表示されませんでした。
どうやら解決したようです。
mp4形式でダウンロードするには?
オプションを付けずにyoutube-dlを使って動画をダウンロードしたら、mkv形式でダウンロードされました。個人的にはmp4形式の方が便利なので、以下のオプションを使うことにしました。
-f mp4
これで、mp4形式でダウンロードされます。
ファイル名を「タイトル.拡張子」にするには?
他にも気になることがありました。ダウンロードしたファイルの名前に謎の文字列が含まれています。それが何なのかは調べませんでしたが、動画のタイトル.拡張子という形にしたかったので、以下のオプションを指定しました。
-o '%(title)s.%(ext)s'
これで、たとえば「マクロ経済学入門.mp4」のようなファイル名となります。
動画の一覧からURLを取得するには?
youtube-dl -j --flat-playlist URL > ichiran.txt
URLという部分に動画の一覧が並んでいるページのURLを指定します。
これで ichiran.txt に動画のURLやタイトル等が出力されます。あとは、このファイルの中からURLに相当する列を切り出すだけです。
使用例
上述したことを踏まえたコマンドライン例は以下のとおりです。
youtube-dl -o '%(title)s.%(ext)s' -f mp4 URL
URLという部分に動画のURLを指定します。
ファイル名には任意の文字列を付け足すこともできます。ファイル名の先頭に
No_1_
を付け足したい場合は次のようにします。
youtube-dl -o 'No-1_%(title)s.%(ext)s' -f mp4 URL
ファイル名の先頭にアップロード日を付け足したい場合は次のようにします。
youtube-dl -o '%(upload_date)s_%(title)s.%(ext)s' -f mp4 URL
複数のファイルをダウンロードする
複数のファイルをダウンロードする場合は、youtube-dlコマンドを書き並べたスクリプトを使った方が楽かなと思います。
youtube-dl -o 'No_1_%(title)s.%(ext)s' -f mp4 URL youtube-dl -o 'No_2_%(title)s.%(ext)s' -f mp4 URL youtube-dl -o 'No_3_%(title)s.%(ext)s' -f mp4 URL youtube-dl -o 'No_4_%(title)s.%(ext)s' -f mp4 URL youtube-dl -o 'No_5_%(title)s.%(ext)s' -f mp4 URL wait printf '\a' printf 'ダウンロードが完了しました\n'
5つの動画をダウンロードした後でビープ音を鳴らし、画面に「ダウンロードが完了しました」というメッセージを表示します。
困っていること
上述したスクリプトを生成するためのスクリプトを書こうとしたのですが、自分の知識が足らず、ダウンロードしたい動画のURLを取ってくる方法が分かりませんでした。
URL部分以外は以下のスクリプトで実現できますが、これだとURL部分を手でコピペする手間がかかるんですよね・・・(^^;。
for((i=1;i<=5;i++));do echo "youtube-dl -o 'No_"$i"_%(title)s.%(ext)s' -f mp4 " done echo wait echo "printf '\a'" echo "printf 'ダウンロードが完了しました\n'"