youtube-dlを使ってプレイリストを一括ダウンロードした
2019年01月02日 水曜日 09時00分先日、Youtubeの動画をダウンロードしてmp3に変換するシェルスクリプトを作ったという記事を書きました。
しかし、プレイリストを一括でダウンロードしたいと思い、youtube-dl
を使って一括ダウンロードを試みましたのでメモ。
youtube-dl
まずはyoutube-dl
(https://rg3.github.io/youtube-dl/)を使えるようにします。
詳細はREADME.md
をみてください。
シェルスクリプト1
シンプルに1曲のみダウンロードするためのシェルスクリプトを作りました。
ファイル名はお任せ。
youtube-dl.sh
など
chmod
も忘れずに。
Gistからダウンロード
(cmd) /var/tmp $ curl -o youtube-dl.sh "https://gist.githubusercontent.com/teruhirokomaki/8f0333c35cb8aa1ba8692a25a8a04336/raw/6d53ea298f6c2e5dde2f5de1949f76747ec48fa3/youtube-dl.sh"
補足
最初はv=YOUTUBEID
のYOUTUBEID
を引数として使っていましたが、一括ダウンロードの途中で、エラーになってしまいました。
URLを確認するとhttps://www.youtube.com/watch?v=-FyjEnoIgTM
となっており、引数が-FyjEnoIgTM
となることが原因でした。
ということで、URLを引数にするように修正しました。
#!/usr/bin/env bash
set -Ceuo pipefail
# set youtube id from param
YOUTUBEID="$1"
if [ x$YOUTUBEID = "x" ]; then
echo "Youtube id is required."
exit 1
fi
# set url
YDLURL="https://www.youtube.com/watch?v=$YOUTUBEID"
# set music dir
MUSICDIR="$HOME/Music/cmus"
# mkdir music dir
if [ ! -d $MUSICDIR ]; then
mkdir -p $MUSICDIR
fi
# get filename
YDLGETFILENAME=$(youtube-dl --get-filename --restrict-filenames -o '%(creator)s/%(title)s.%(ext)s' "$YDLURL")
# creator from filename
YDLCREATOR=$(echo $YDLGETFILENAME | awk -F "/" '{print $1}')
# title and ext from filename
YDLTITLEEXT=$(echo $YDLGETFILENAME | awk -F "/" '{print $2}')
# mkdir author dir
if [ ! -d "$MUSICDIR/$YDLCREATOR" ]; then
mkdir -p "$MUSICDIR/$YDLCREATOR"
fi
# file pah
YDLFILE="$MUSICDIR/$YDLCREATOR/$YDLTITLEEXT"
# check file exist
if [ -f "$YDLFILE" ]; then
echo "File '$YDLFILE' already exists ($YOUTUBEID)."
else
# download audio
youtube-dl --ignore-errors --format bestaudio -o "$YDLFILE" "$YDLURL"
# done
echo "Downloaded to '$YDLFILE' ($YOUTUBEID)."
fi
使ってみる
(ins) /var/tmp $ youtube-dl.sh QJO3ROT-A4E
[youtube] QJO3ROT-A4E: Downloading webpage
[youtube] QJO3ROT-A4E: Downloading video info webpage
[download] Destination: /home/teruhiro/Music/cmus/One_Direction/One_Direction_-_What_Makes_You_Beautiful_Official_Video.mp4
[download] 100% of 3.12MiB in 00:00
Downloaded to '/home/teruhiro/Music/cmus/One_Direction/One_Direction_-_What_Makes_You_Beautiful_Official_Video.mp4'
プレイリストのidを取得する
youtube-dlの--get-id
オプションで、プレイリストのidを取得できますので、テキストファイルに書き出します。
(ins) /var/tmp $ youtube-dl --get-id https://www.youtube.com/playlist?list=PLL0WmM0pDa_8oUWlErcd1KHhp1UoWe0q2 >> ydlids.txt
シェルスクリプト2
先ほど作成したydlids.txt
のidを1行づつ処理するためのシェルスクリプトを作成しました。
こちらもファイル名はお任せ。
youtube-dl_fromfile.sh
など
Gistからダウンロード
(cmd) /var/tmp $ curl -o youtube-dl_fromfile.sh "https://gist.githubusercontent.com/teruhirokomaki/2506b0b6e5b345ec0daa6955f69b87ce/raw/571e5a2c8d346e16a14c5f13fd778612dda0c606/youtube-dl_fromfile.sh"
#!/usr/bin/env bash
set -Ceuo pipefail
FILEPATH=$1
CNT=0
cat $FILEPATH | while read LINE
do
CNT=$(expr $CNT + 1)
youtube-dl.sh $LINE
done
使ってみる
(ins) /var/tmp $ cat ydlids.txt
YqeW9_5kURI
UA8rcLvS1BY
CdXesX6mYUE
(ins) /var/tmp $ youtube-dl_fromfile.sh ydlids.txt
[youtube] YqeW9_5kURI: Downloading webpage
[youtube] YqeW9_5kURI: Downloading video info webpage
[download] Destination: /home/teruhiro/Music/cmus/Major_Lazer_feat._MO_DJ_Snake/Major_Lazer_DJ_Snake_-_Lean_On_feat._MO_Official_Music_Video.mp4
[download] 100% of 2.95MiB in 00:00
Downloaded to '/home/teruhiro/Music/cmus/Major_Lazer_feat._MO_DJ_Snake/Major_Lazer_DJ_Snake_-_Lean_On_feat._MO_Official_Music_Video.mp4'
[youtube] UA8rcLvS1BY: Downloading webpage
[youtube] UA8rcLvS1BY: Downloading video info webpage
[download] Destination: /home/teruhiro/Music/cmus/LMFAO/LMFAO_-_Champagne_Showers_ft._Natalia_Kills.mp4
[download] 100% of 5.86MiB in 00:00
Downloaded to '/home/teruhiro/Music/cmus/LMFAO/LMFAO_-_Champagne_Showers_ft._Natalia_Kills.mp4'
[youtube] CdXesX6mYUE: Downloading webpage
[youtube] CdXesX6mYUE: Downloading video info webpage
[download] Destination: /home/teruhiro/Music/cmus/Pitbull/Pitbull_-_International_Love_ft._Chris_Brown.mp4
[download] 100% of 3.76MiB in 00:00
Downloaded to '/home/teruhiro/Music/cmus/Pitbull/Pitbull_-_International_Love_ft._Chris_Brown.mp4'
(ins) /var/tmp $
あとがき
ytdl
とyoutube-dl
を使いましたが、youtube-dl
のほうがオススメです。
最初から素直にyoutube-dl
使ったほうが良かったなと。