youtube-dlを使ってプレイリストを一括ダウンロードした
先日、Youtubeの動画をダウンロードしてmp3に変換するシェルスクリプトを作ったという記事を書きました。
しかし、プレイリストを一括でダウンロードしたいと思い、youtube-dl
を使って一括ダウンロードを試みましたのでメモ。
youtube-dl
まずはyoutube-dl
(https://rg3.github.io/youtube-dl/)を使えるようにします。
詳細はREADME.md
をみてください。
シェルスクリプト1
シンプルに1曲のみダウンロードするためのシェルスクリプトを作りました。
ファイル名はお任せ。
youtube-dl.sh
など
chmod
も忘れずに。
Gistからダウンロード
1(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を引数にするように修正しました。
1#!/usr/bin/env bash
2set -Ceuo pipefail
3
4# set youtube id from param
5YOUTUBEID="$1"
6
7if [ x$YOUTUBEID = "x" ]; then
8 echo "Youtube id is required."
9 exit 1
10fi
11
12# set url
13YDLURL="https://www.youtube.com/watch?v=$YOUTUBEID"
14
15# set music dir
16MUSICDIR="$HOME/Music/cmus"
17
18# mkdir music dir
19if [ ! -d $MUSICDIR ]; then
20 mkdir -p $MUSICDIR
21fi
22
23# get filename
24YDLGETFILENAME=$(youtube-dl --get-filename --restrict-filenames -o '%(creator)s/%(title)s.%(ext)s' "$YDLURL")
25
26# creator from filename
27YDLCREATOR=$(echo $YDLGETFILENAME | awk -F "/" '{print $1}')
28
29# title and ext from filename
30YDLTITLEEXT=$(echo $YDLGETFILENAME | awk -F "/" '{print $2}')
31
32# mkdir author dir
33if [ ! -d "$MUSICDIR/$YDLCREATOR" ]; then
34 mkdir -p "$MUSICDIR/$YDLCREATOR"
35fi
36
37# file pah
38YDLFILE="$MUSICDIR/$YDLCREATOR/$YDLTITLEEXT"
39
40# check file exist
41if [ -f "$YDLFILE" ]; then
42 echo "File '$YDLFILE' already exists ($YOUTUBEID)."
43else
44 # download audio
45 youtube-dl --ignore-errors --format bestaudio -o "$YDLFILE" "$YDLURL"
46
47 # done
48 echo "Downloaded to '$YDLFILE' ($YOUTUBEID)."
49fi
使ってみる
1(ins) /var/tmp $ youtube-dl.sh QJO3ROT-A4E
2[youtube] QJO3ROT-A4E: Downloading webpage
3[youtube] QJO3ROT-A4E: Downloading video info webpage
4[download] Destination: /home/teruhiro/Music/cmus/One_Direction/One_Direction_-_What_Makes_You_Beautiful_Official_Video.mp4
5[download] 100% of 3.12MiB in 00:00
6Downloaded to '/home/teruhiro/Music/cmus/One_Direction/One_Direction_-_What_Makes_You_Beautiful_Official_Video.mp4'
プレイリストのidを取得する
youtube-dlの--get-id
オプションで、プレイリストのidを取得できますので、テキストファイルに書き出します。
1(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からダウンロード
1(cmd) /var/tmp $ curl -o youtube-dl_fromfile.sh "https://gist.githubusercontent.com/teruhirokomaki/2506b0b6e5b345ec0daa6955f69b87ce/raw/571e5a2c8d346e16a14c5f13fd778612dda0c606/youtube-dl_fromfile.sh"
1#!/usr/bin/env bash
2set -Ceuo pipefail
3
4FILEPATH=$1
5
6CNT=0
7cat $FILEPATH | while read LINE
8do
9 CNT=$(expr $CNT + 1)
10 youtube-dl.sh $LINE
11done
使ってみる
1(ins) /var/tmp $ cat ydlids.txt
2YqeW9_5kURI
3UA8rcLvS1BY
4CdXesX6mYUE
5(ins) /var/tmp $ youtube-dl_fromfile.sh ydlids.txt
6[youtube] YqeW9_5kURI: Downloading webpage
7[youtube] YqeW9_5kURI: Downloading video info webpage
8[download] Destination: /home/teruhiro/Music/cmus/Major_Lazer_feat._MO_DJ_Snake/Major_Lazer_DJ_Snake_-_Lean_On_feat._MO_Official_Music_Video.mp4
9[download] 100% of 2.95MiB in 00:00
10Downloaded to '/home/teruhiro/Music/cmus/Major_Lazer_feat._MO_DJ_Snake/Major_Lazer_DJ_Snake_-_Lean_On_feat._MO_Official_Music_Video.mp4'
11[youtube] UA8rcLvS1BY: Downloading webpage
12[youtube] UA8rcLvS1BY: Downloading video info webpage
13[download] Destination: /home/teruhiro/Music/cmus/LMFAO/LMFAO_-_Champagne_Showers_ft._Natalia_Kills.mp4
14[download] 100% of 5.86MiB in 00:00
15Downloaded to '/home/teruhiro/Music/cmus/LMFAO/LMFAO_-_Champagne_Showers_ft._Natalia_Kills.mp4'
16[youtube] CdXesX6mYUE: Downloading webpage
17[youtube] CdXesX6mYUE: Downloading video info webpage
18[download] Destination: /home/teruhiro/Music/cmus/Pitbull/Pitbull_-_International_Love_ft._Chris_Brown.mp4
19[download] 100% of 3.76MiB in 00:00
20Downloaded to '/home/teruhiro/Music/cmus/Pitbull/Pitbull_-_International_Love_ft._Chris_Brown.mp4'
21(ins) /var/tmp $
あとがき
ytdl
とyoutube-dl
を使いましたが、youtube-dl
のほうがオススメです。
最初から素直にyoutube-dl
使ったほうが良かったなと。
Tags: