概要
YouTube動画をダウンロード保存したくなった場合に、自前でそれを行える環境を用意できるよう、手順をまとめました。ダウンロードには yt-dlp を使っています。特に珍しくはないと思います。
Python 3 環境を構築します
Linuxベースが無難と思います。当方 Ubuntu 20.04.5 LTS を使いました。Windows等では試していません。
既存の Python 環境を汚さないで Python 3 環境を構築するため、pyenv をインストールします。
$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
pyenv をシェルで使えるようにするため、次の設定3行を ~/.bashrc に追記します。
export PYENV_ROOT="${HOME}/.pyenv"
export PATH="${PYENV_ROOT}/bin:${PATH}"
eval "$(pyenv init --path)"
再ログインするとシェルで pyenv が使えるようになります。
$ pyenv versions
* system
pyenv を用いて Python 3 環境をダウンロード構築します。
$ pyenv install 3.12.1
$ pyenv global 3.12.1
$ pyenv versions
system
* 3.12.1 (set by /home/myname/.pyenv/version)
これで Python 3 環境をホームディレクトリ以下へ構築できました。
Python の yt-dlp モジュールを pip でインストールします
次の1行を実行するだけです。
$ pip install yt-dlp
ダウンロード保存プログラムを作成します
次のコードを download_youtube_movie.py として保存します。このプログラムは、引数で与えられた YouTube 動画URL に対して yt-dlp を使ってダウンロードし .mp4 として保存します。例として、YouTube 動画URLが「 https://www.youtube.com/watch?v=AbCdEfGh123 」である場合、保存先ファイル名は AbCdEfGh123.mp4 になります。
import sys
from yt_dlp import YoutubeDL
def movie_get(urls):
options = {
'outtmpl': '%(id)s' + '.mp4',
'format': 'best'
}
with YoutubeDL(options) as ydl:
ydl.download([urls])
if len(sys.argv) < 2:
print("Usage: python download_youtube_movie.py <youtube_url>")
sys.exit(1)
youtube_url = sys.argv[1]
movie_get(youtube_url)
ダウンロード一括実行スクリプトを作成します
次のスクリプトを run_download.sh として保存します。このスクリプトは、引数で与えられたURL一覧ファイルから1行ずつURLを読み込んで、それぞれについて前述の download_youtube_movie.py を実行します。YouTube 負荷を軽減するため sleep 5 を入れています。
#! /bin/bash
URLFILE=$1
if [ ! -r ${URLFILE} ] ; then
echo "Usage: $0 <URL file>"
exit 1
fi
for ELINE in `cat ${URLFILE}` ; do
echo -n "${ELINE} ... "
~/.pyenv/shims/python ./download_youtube_movie.py ${ELINE}
if [ $? = 0 ] ; then
echo "[OK]"
else
echo "[ERROR]"
fi
sleep 5
done
実行権限を与えておくと起動しやすいです。
$ chmod +x run_download.sh
ダウンロードURL一覧ファイルを作成します
ダウンロードしたい YouTube 動画のURLを1行に1つずつ書いたファイルを用意します。次は単なる例です。
https://www.youtube.com/watch?v=AbCdEfGh123
https://www.youtube.com/watch?v=IjKlMnOp456
https://www.youtube.com/watch?v=QrStUvWx789
ダウンロード一括実行スクリプトを実行します
$ ./run_download.sh ./myurls.txt
以上です。
Have a happy YouTube life!