恥は/dev/nullへ by 初心者

プログラミング素人がのろのろと学んだことをつづっています♪

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'"