Teruhiro Komaki's Blog (Temporary)

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=YOUTUBEIDYOUTUBEIDを引数として使っていましたが、一括ダウンロードの途中で、エラーになってしまいました。

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 $

あとがき

ytdlyoutube-dlを使いましたが、youtube-dlのほうがオススメです。

最初から素直にyoutube-dl使ったほうが良かったなと。

Tags:
comments powered by Disqus