Teru Komaki's Blog (Temporary)

Youtubeの動画をダウンロードしてmp3に変換するシェルスクリプトを作った

今まで、mpsyt(https://github.com/mps-youtube/mps-youtube)で、Youtubeのプレイリストを再生してました。

しかし、Debianではうまく動かないため、mpsytをやめて別のCLIクライアントを探すことにしました。

更新

2019-01-02

cmus

色々と探しましたが、良さそうなCLIクライントがなかったので、mp3をローカルで管理することにしました。

ということで、cmus(https://cmus.github.io/)を使うことにしました。

評判通り、快適ですね。

Youtubeの動画をダウンロード

YoutubeからダウンロードするCLIツールをググると、youtube-dl(https://rg3.github.io/youtube-dl/)が出てきますが、Go製のCLIツールを探すことにしました。

ytdl(https://github.com/rylio/ytdl)というCLIツールを見つけました。

パッケージとしも使えるし、使う前から、良いはずと。

rylio/ytdl

こんな感じでダウンロードできる。

1(cmd) ~ $ ytdl https://www.youtube.com/watch?v=3OnnDqH6Wj8
2INFO[0000] Fetching video info...
3INFO[0000] Downloading to Flo Rida - Good Feeling [Official Video].mp4
4 22.38 MiB / 22.38 MiB [======================================================================================================================================================================] 100.00% 9.98 MiB/s 2s

-oオプションで指定できる。

1(cmd) ~ $ ytdl -o /var/tmp/{{.Title}}.{{.Ext}} https://www.youtube.com/watch?v=3OnnDqH6Wj8
2INFO[0000] Fetching video info...
3INFO[0000] Downloading to /var/tmp/Flo Rida - Good Feeling [Official Video].mp4
4 22.38 MiB / 22.38 MiB [======================================================================================================================================================================] 100.00% 9.08 MiB/s 2s

-jオプションでjsonを取得できる。jq(jqはインストールしてね)でtitleを取得できる。

1(cmd) ~ $ ytdl -j https://www.youtube.com/watch?v=3OnnDqH6Wj8 | jq ".title"
2"Flo Rida - Good Feeling [Official Video]"

シェルスクリプト作った

必須コマンド

各自インストールしてください。

コード

ファイル名は何でもよいです。(私はytdl2mp3.shというファイルにしました。)

パスの通っているフォルダに保存してchmodしてください。

 1#!/usr/bin/env bash
 2set -Ceuo pipefail
 3
 4# export
 5export LC_ALL=C
 6export LANG=C
 7
 8# set youtube id from param
 9YOUTUBEID=$(echo $1 | awk -F "v=" '{print $2}' | awk -F "&" '{print $1}')
10
11if [ x$YOUTUBEID = "x" ]; then
12  echo "youtube id(v=ABCD) not found."
13  exit 1
14fi
15
16# set url
17URL="https://www.youtube.com/watch?v=$YOUTUBEID"
18
19# set music dir
20MUSICDIR="$HOME/Music/cmus"
21
22# mkdir music dir
23if [ ! -d $MUSICDIR ]; then
24  mkdir -p $MUSICDIR
25fi
26
27# get ytdl json
28YTDLJSON=$(ytdl -j $URL)
29
30# get author from json
31YTDLAUTHOR=$(echo $YTDLJSON | jq ".author" | sed "s/\"//g")
32
33# get title from json
34YTDLTITLE=$(echo $YTDLJSON | jq ".title" | sed "s/\"//g")
35
36# set file path
37FILEMP4="$MUSICDIR/$YTDLAUTHOR/$YTDLTITLE.mp4"
38FILEMP3="$MUSICDIR/$YTDLAUTHOR/$YTDLTITLE.mp3"
39
40# mkdir author dir
41if [ ! -d "$MUSICDIR/$YTDLAUTHOR" ]; then
42  mkdir -p "$MUSICDIR/$YTDLAUTHOR"
43fi
44
45# check file exist
46if [ -f "$FILEMP3" ]; then
47  echo "File '$FILEMP3' already exists."
48  exit 1
49fi
50
51# download mp4 file
52ytdl --silent -o "$FILEMP4" $URL
53
54# convert mp4 2 mp3
55ffmpeg -loglevel panic -i "$FILEMP4" -vn -acodec libmp3lame -ac 2 -ab 160k -ar 48000 "$FILEMP3"
56
57#rm $FILEMP4
58if [ -f "$FILEMP4" ]; then
59  rm -f "$FILEMP4"
60fi
61
62# done
63echo "Downloaded to '$FILEMP3'"

使ってみた

こんな感じになります。

URLをコピって、以下のように実行すればうまいこといくはずです。

1(ins) ~ $ ytdl2mp3.sh "https://www.youtube.com/watch?v=2vjPBrBU-TM&list=ALL0WmM0pDa_8oUWlErcd1KHhp1UoWe0q2&index=115"
2Downloaded to '/home/teruhiro/Music/cmus/SiaVEVO/Sia - Chandelier (Official Music Video).mp3'
 1(ins) ~/Music/cmus $ tree
 2.
 3├── AdeleVEVO
 4│   ├── Adele - Chasing Pavements.mp3
 5│   ├── Adele - Hello.mp3
 6│   ├── Adele - Rolling in the Deep.mp3
 7│   ├── Adele - Send My Love (To Your New Lover).mp3
 8│   ├── Adele - Someone Like You.mp3
 9│   └── Adele - When We Were Young (Live at The Church Studios).mp3
10├── BeyoncéVEVO
11│   └── Beyoncé - Halo.mp3
12├── Ed Sheeran
13│   └── Ed Sheeran - Perfect (Official Music Video).mp3
14├── Galantis
15│   ├── Galantis - Don't Care (Official Audio).mp3
16│   ├── Galantis & Hook N Sling - Love On Me (Official Video).mp3
17│   ├── Galantis - Spaceship feat. Uffie (Official Music Video).mp3
18│   └── Galantis & Throttle - Tell Me You Love Me (Official Music Video).mp3
19├── KygoOfficialVEVO
20│   ├── Kygo - Firestone ft. Conrad Sewell (Official Video).mp3
21│   └── Kygo & Justin Jesso - Stargazing (Official Video).mp3
22└── LadyGagaVEVO
23    └── Lady Gaga, Bradley Cooper - Shallow (A Star Is Born).mp3
24
256 directories, 15 files

あとがき

これでcmusで再生できるようになりました。