YouTubeの動画を一括ダウンロードするBashスクリプト

http://d.hatena.ne.jp/SPR/20061105の発展。
YouTubeから複数の動画をまとめてダウンロードするシェルスクリプトを作った。
ダウンロードしたい動画が多い場合には便利だと思う。

使い方

一番下に書いてあるスクリプトを適当な名前で保存して、下記の様にコマンドを入れる。

$ ./hoge.sh 藤田東吾耐震偽装事件について語る \
http://www.youtube.com/watch?v=rZbeS5CiU3U \
http://www.youtube.com/watch?v=_eaWJgy2Z3E \
http://www.youtube.com/watch?v=1QGE4JWWDbA

すると、この例では「藤田東吾耐震偽装事件について語る-01.flv」「藤田東吾耐震偽装事件について語る-02.flv」「藤田東吾耐震偽装事件について語る-03.flv」が保存される。
これらのFLVファイルはそのままmplayerかffplay(ffmpegに付いてる)で再生するか、ffmpegで一旦他の形式に変換してから適当なプレイヤで再生すればいいと思う。


このスクリプトではyoutube-dlと言うダウンロードツールを公式サイトから自動的にダウンロードして使う。

Bashスクリプト

#!/bin/bash

#
# 「YouTube一括ダウンロードBashスクリプト」
#
# 自分のLinux環境に合わせて作った。
# 他の環境でもbashwgetpythonがあれば動くと思う。
#
# [使いかた]
# このスクリプトを適当な名前で保存してから作業ディレクトリに移動し、
# コマンドラインで
# 「./hoge.sh 保存するファイル名 URLその1 URLその2 ...」
# とする。
# なお、保存するファイル名に拡張子はいらない。勝手にflvが付く。
#

##### 好みに合わせて設定する #####

# プロクシを使う人用
#http_proxy="http://localhost:8080"

# NUM=0だとfile-00 file-01 file-02 ...
# NUM=1だとfile-01 file-02 file-03 ... と言う名前で保存される
NUM=1

##### 設定おしまい #####

# youtube-dlの場所
DL="http://www.arrakis.es/~rggi3/youtube-dl/youtube-dl"

# pythonのパス
PYTHON=`which python`

if [ $# -lt 2 ]; then
    echo "Usage: $0 OUTPUT URL1 [URL2] [URL3] ..."
    exit
fi

##### youtube-dlが無ければダウンロードしてくる #####

if [ -x youtube-dl ]; then 
    echo "$0: youtube-dl開始"
else
    echo "$0: 一旦youtube-dlをダウンロードします。"
    wget -O youtube-dl.tmp "$DL"
    cat youtube-dl.tmp | sed -e "1c #!$PYTHON" > youtube-dl
    chmod +x youtube-dl
    rm youtube-dl.tmp
fi

##### FLVファイルをダウンロード #####

i=0
for URL in "$@"
do
    # OUTPUTに保存するファイル名が入る
    if [ $i -eq 0 ]; then
        FNAME=$1
    else
        j=`expr $NUM + $i - 1`

        if [ $j -lt 10 ]; then
            OUTPUT="$FNAME""-0$j.flv"
        else
            OUTPUT="$FNAME""-$j.flv"
        fi
    fi

    # 実際にダウンロード
    # youtube-dlでダウンロードせずにwgetにダウンロードするURLを渡す
    if [ $i -gt 0 ]; then
        echo "$0: $i個目の動画を$OUTPUTに保存します。"
        URL2=`./youtube-dl -s "$URL" | grep "Video data found at" | sed -e "s/Video data found at //"`
        wget -O $OUTPUT "$URL2"
    fi

    i=`expr $i + 1`
done