youtube-dlでYoutubeの再生リストの音声のみを作業用BGMとして再生する方法

作業用にYoutubeの再生リストを流しっぱなしにすることがある。メインで使っているブラウザがChromiumなので、たいていはFirefoxを遠くのワークスペースで起動してYoutubeを開いておくんだけど、ときどきFlash Playerがクラッシュしてしまう。そのときはリロードするなりで対応できるんだけど、mplayerでできたらメモリも食わなさそうだしいいだろうな、と思って調べてみた。youtube-dl.pyというのを見つけた。

インストール

以下のサイトから入手できる。
http://rg3.github.com/youtube-dl/

youtube-dlはpythonスクリプトなので、インストールといっても基本的には任意のディレクトリに置くだけで良い。

実際に使ってみる

youtube-dlはYoutubeの動画ファイルをダウンロードするためのスクリプト
次のコマンドで動画ファイルがダウンロードできる。

$ python youtube-dl.py Youtube動画のURL
[kosuke@localhost youtube]$python youtube-dl.py http://www.youtube.com/watch?v=iIdqzFuWFG8
[youtube] Setting language
[youtube] iIdqzFuWFG8: Downloading video webpage
[youtube] iIdqzFuWFG8: Downloading video info webpage
[youtube] iIdqzFuWFG8: Extracting video information
[download] Destination: iIdqzFuWFG8.flv
[download] 100.0% of 16.72M at  176.97k/s ETA 00:00
[kosuke@localhost youtube]$

再生リストの動画をダウンロードする

プレイリストのURLを指定するとリストに含まれる動画すべてをダウンロードできる。プレイリストは次のようなURLになっている。

http://www.youtube.com/playlist?list=PL71FD335E18D4473E

プレイリスト再生中のURLを指定してもダメなので注意。プレイリスト再生時に画面右下の「オプション」-「この再生リストの詳細」で出てくるURLを使う。

指定方法はふつうの動画をダウンロードするときに使うURLをリスト用URLに置き換えるだけで良い。

ファイル名を動画のタイトルにする

デフォルトだとダウンロード時のファイル名は動画URLの10桁のIDになるが、たくさんダウンロードすればそれだけわかりにくくなる。実行時にオプション「-t」を付加すると、動画のタイトルをファイル名にして保存することができる。

$ python youtube-dl.py -t Youtube動画のURL

音声ファイルで抽出する

youtube-dl.py実行時にオプションを指定しなければ、flvかmp4の形式でダウンロードされるが、音声ファイルで取得したいこともある。オプションに「--extract-audio」を指定すると、音声ファイルを取得できる。

[kosuke@localhost youtube]$python youtube-dl.py --extract-audio http://www.youtube.com/watch?v=iIdqzFuWFG8
[youtube] Setting language
[youtube] iIdqzFuWFG8: Downloading video webpage
[youtube] iIdqzFuWFG8: Downloading video info webpage
[youtube] iIdqzFuWFG8: Extracting video information
[download] Destination: iIdqzFuWFG8.flv
[download] 100.0% of 16.72M at  186.63k/s ETA 00:00
[ffmpeg] Destination: iIdqzFuWFG8.aac
[kosuke@localhost youtube]$

ファイル形式は「aac」になる。未指定時は「best by default」らしいので、最適な形式が選択されるようだが、「aac」以外出てこなかった。ファイル形式を指定したい場合は「--audio-format ファイル形式」をオプション指定すれば良い。aac, vorbis, mp3, m4a, wav を指定できる模様。

ちなみに「--extract-audio」指定で音声のみ抜く場合は、ffmpegがインストールしてある必要がある。Ubuntuであれば、以下のコマンドでインストールすることができる。

$ sudo apt-get install ffmpeg

mplayerで再生リストを垂れ流しにする

これが本来の目的。以下のコマンドでmplayerを使って再生リストの曲を垂れ流しにできる。

$ mplayer -vo none `python youtube-dl.py -g 再生リストのURL`

上記コマンドの解説。youtube-dl.pyで指定しているオプション「-g」で、URLだけを返している。それをmplayerへ渡して再生する。mplayerのオプション「-vo none」の「vo」は映像出力先を指定するらしく、存在しないデバイスを指定することで音声のみを再生することができる、とどこかに書いてあった。

軽い。Pythonの勉強にはいいかも

配布元サイトのドキュメントに詳しく書いてありそうだが、指定可能なオプション程度の使い方であれば、オプションで「--help」を指定して表示されるヘルプでかなりわかると思う。
同じようなことを実現するWebサービスフリーソフトは、プラットフォーム問わずたくさんあると思う。あえてyoutube-dlを使う理由があまり思いつかないが、コマンドベースで動くため非常に軽い、メモリを食わない点は素晴らしい。1ファイルのPythonスクリプトであるという点も、いざとなればソースを読むことができるのでメリットになる。あと断言はできないけど、たぶんyoutube-dlはPythonの標準ライブラリだけを使っているはず。その点でもPythonの学習に使えるかもしれないね。
また、Ubuntu上で動作する動画再生ソフトのいくつかはmplayerGUIインタフェースを載せただけのものなので、mplayerffmpegの使い方を少しでも知っていると役立つことがけっこうある。