綾小路龍之介の素人思考

[Streamripper] Streamripperで全自動リッピング

Streamripperでリッピングできると、音楽生活が潤うだろうと思ったけれど、全自動でできないとダメじゃないかという話です。

Winampプラグインでは全自動リッピングを行う上でいくつかの問題点があります。第1に『接続までの作業が多い』ことです。接続できなかった場合、Startボタンを押すと、メッセージボックスが表示され、OKボタンを押して、プログラムはコマンド待ちの状態になります。この操作を接続されるまで繰り返すわけです。第2に『思ったようにリコネクトしてくれない』ことです。オフィシャルページには自動的にリコネクトするとあります。確かにリコネクトしてくれるのですが、とてもアグレッシブにしているとは思えません。それにプラグインではリコネクトしているのかどうか判りません。

Normally Streamripper will be very aggressive and try to re-connect to a dropped stream,http://streamripper.sourceforge.net/tutorialconsole.php

問題を解決するために、コンソールバージョンと、Windowsのバッチファイルを使います。プラグインバージョンを使うことはきっぱり諦めましょう。どちらを使ってもできるファイルは同じです。両方の問題に共通して、しなくてはならないことはStreamripperに接続コマンドを送リ続けることです。ルーチンワーキングなので、これを解決するためにはコマンドを永久に繰り返しさせます。ということで以下のバッチファイルを作ってみました。

CLS
@ECHO OFF
:LOOP
ECHO Wolf's Rain - http://server-nexus.com/forum
C:\temp_prog\sripper-1.60.10.exe http://62.112.213.213:8010/ -t -d  C:\temp_movie\ -q -u WinampMPEG/5.0 >> sr_stcrepo.txt
GOTO LOOP 
EXIT

環境に合わせてファイルを書き換えなければ動作しません。なので、書き換える必要のあるところだけ解説します。バッチファイルの書き方について詳しく説明しません。<4行目>機能的な意味はありません。"ECHO "以降は好きに書き換えてください。削除してもかまいません。私はリッピングするサーバーの名前を書き込んでいます。<5行目>Streamripperを絶対パスで呼び出しています。第1引数、サーバーアドレスとポート。これはWinampのプレイリストでファイル情報を見れば判ります。第2引数、incompleteディレクトリ内のファイルを上書きしない。第3引数、保存ディレクトリを変える。第4引数、保存ディレクトリの指定。第5引数、ファイル名に連番追加。第6引数、ユーザーエージェントを偽装。第7引数、ユーザーエージェントの指定。私はWinamp5.04が吐く物を指定しています。">>"以降、エラーメッセージをsr_stcrepo.txtに出力。

絶対パスで書かなくとも、パスの通ったディレクトリに入れるか、パスを通せばいいじゃないか。とか思った人はそうして下さい。

実行するには書き換えたバッチファイルをダブルクリックするかプロンプトから呼び出します。バッチファイルは永久ループしている、つまり自動的に終了してくれないので終了させるには、強制終了させます。左上の×印をクリックして、表示されるメッセージボックスのOKボタンを押します。強制終了していますが、それまでにリッピングしたファイルは失われません。

オフィシャルページにオプションスイッチの解説がありますが、どうやら古い情報のようです。コマンドプロンプトでプログラムを引数指定なしに呼び出すと、利用可能なオプションスイッチの一覧が表示されます。解説に載っていないオプションスイッチもありますので、こちらを信じたほうがよさそうです。Ver1.60.10の一覧を載せておきます。

Usage: streamripper URL [OPTIONS]
Options:
-h             - Print this listing
-a <file>      - Rip to single file, default name is timestamped
-d <dir>       - The destination directory
-s             - Don't create a directory for each stream
-r <base port> - Create relay server on base port, default port 8000
-z             - Don't scan for free ports if base port is not avail
-p <url>       - Use HTTP proxy server at <url>
-o             - Overwrite tracks in complete
-t             - Don't overwrite tracks in incomplete
-c             - Don't auto-reconnect
-v             - Print version info and quit
-l <seconds>   - number of seconds to run, otherwise runs forever
-q             - Add sequence number to output file
-i             - Don't add ID3V1 Tags to output file
-u <useragent> - Use a different UserAgent than "Streamripper"
-f <dstring>   - Don't create new track if metainfo contains <dstring>
-m <timeout>   - Number of seconds before force-closing stalled conn
-k <count>     - Skip over first <count> tracks before starting to rip
--x            - Invoke splitpoint detection rules (see online guide)

複数サーバーからリッピングをしたい場合(同時ではありません)は上記の4,5行目を繰り返します。このときそれぞれのサーバーアドレスを目的の物に書き換える必要はありますが。すると以下のようになります。

CLS
@ECHO OFF
REM ECHO ------------------------------------------Run Program
:LOOP
echo aznV.net TV! --Channel 1
C:\temp_prog\streamripper-win32-1.61.3\streamripper.exe http://213.246.39.25:8090/ -t -d D:\tpAV\SHOUTcast_Stream\ -q -u WinampMPEG/5.0 -m 30>> sr_stcrepo.txt
echo aznV.net TV! --Channel 2
C:\temp_prog\streamripper-win32-1.61.3\streamripper.exe http://213.246.39.72:8090/ -t -d D:\tpAV\SHOUTcast_Stream\ -q -u WinampMPEG/5.0 -m 30>> sr_stcrepo.txt
echo EATV: EATV EditingArchive.com [VP6]
C:\temp_prog\streamripper-win32-1.61.3\streamripper.exe http://66.90.81.48:9000/ -t -d D:\tpAV\SHOUTcast_Stream\ -q -u WinampMPEG/5.0 -m 30>> sr_stcrepo.txt
C:\temp_prog\streamripper-win32-1.61.3\streamripper.exe http://66.90.81.48:8000/ -t -d D:\tpAV\SHOUTcast_Stream\ -q -u WinampMPEG/5.0 -m 30>> sr_stcrepo.txt
C:\temp_prog\streamripper-win32-1.61.3\streamripper.exe http://207.44.208.109:9020/ -t -d D:\tpAV\SHOUTcast_Stream\ -q -u WinampMPEG/5.0 -m 30>> sr_stcrepo.txt
C:\temp_prog\streamripper-win32-1.61.3\streamripper.exe http://209.6.82.6:8000/ -t -d D:\tpAV\SHOUTcast_Stream\ -q -u WinampMPEG/5.0 -m 30>> sr_stcrepo.txt
GOTO LOOP
EXIT

これでも動きますが、書き換える時横に長くてみにくいです。それに何をやっているのか自分でもわからなくなります。そこで、以下のようにスクリプトを書き換えてみます。

CLS
REM @ECHO OFF
REM ECHO ----------------------------------------Set Parameters
SET SR=C:\temp_prog\streamripper-win32-1.61.3\streamripper.exe
SET DR=D:\tpAV\SHOUTcast_Stream\
SET UA=WinampMPEG/5.0
SET ST=-t -d %DR% -q -u %UA% -m 30>> sr_stcrepo.txt
PAUSE
REM ECHO ------------------------------------------Run Program
:LOOP
echo aznV.net TV! --Channel 1
%SR% http://213.246.39.25:8090/ %ST%
echo aznV.net TV! --Channel 2
%SR% http://213.246.39.72:8090/ %ST%
echo EATV: EATV EditingArchive.com [VP6]
%SR% http://66.90.81.48:9000/ %ST%
%SR% http://66.90.81.48:8000/ %ST%
%SR% http://207.44.208.109:9020/ %ST%
%SR% http://209.6.82.6:8000/ %ST%
GOTO LOOP
EXIT

上記との差は、スクリプト内で重複する場所を変数にセットして、変数を参照している点です。<2行目>頭に"REM "をつけてコメントアウトしました。解説はあとで。<4行目>変数"SR"にStreamripperのパスを代入。<5行目>変数"DR"にファイル保存ディレクトリのパスを代入。<6行目>変数"UA"にユーザーエージェントの名前を代入。<7行目>変数"ST"に今までの変数("SR","DR","UA")を展開してStreamripperを呼び出すときの引数として代入。<8行目>この解説はあとで<12行目>Streamripper"SR"を第1引数、サーバーアドレス、その他の引数、"ST"で呼び出し。

2行目をコメントアウトしたのは勘案が必要なメッセージがでるかも知れないからです。以降メッセージが出たとして話をします。8行目をコメントアウトし(頭に"REM "をつける)なければStreamripperを呼び出す前にここでプログラムが止まります。止まるまでに、"環境変数に必要なメモリが足りません"等のメッセージが出た場合には、メモリを増やしてください。このバッチプログラムをダブルクリックした時にできたショートカットを右クリック->プロパティ->メモリ->コンベンショナルメモリ->環境変数の初期サイズ->これが"自動"となっていると思いますので、これをメッセージが出なくなるまで増やします。増やす量はそれまでに使った変数("SR","DR","UA","ST")の文字数によります。どうやってもエラーメッセージが現れる場合は無視するか、Streamripperをルート直下(C:\streamripper.exe)に持って来たりプログラム自身もそこに持っていく必要があります。、保存ディレクトリをルート(D:\)にしたり、ユーザーエージェントを文字数の少ないもの(Wap)に変えてみたりしてください。

例として設定した3つはどれも適当に設定しています。意味は特にありません

これでずいぶんとスクリプトが見やすくなりました。エラーが出なくなったことが判ったら2行目の"REM "を削除して、8行目の頭に"REM "を追記すればスクリプトが止まらずに進みます。

ソーシャルブックマーク

  1. はてなブックマーク
  2. Google Bookmarks
  3. del.icio.us

ChangeLog

  1. Posted: 2009-01-05T10:59:49+09:00
  2. Modified: 2009-01-05T08:37:26+09:00
  3. Generated: 2017-09-28T23:09:19+09:00