ふと思いつきではてなブックマーク注目の動画をWALKMAN A80xで通勤中に眺める環境を作ったのでメモしておく。ソース読み解いて理解できる人むけ(そういう人は自分で書いた方が早いかもしれんですが…)
1. はてブRSSからflvファイルのURLへの変換
はてブRSSからYoutubeのURLを抜いて、YoutubeへアクセスしつつflvのURLを抜いて、ダウンロード用のシェルスクリプトを生成。
まず、RSSの扱いはsimplexml以外のやり方を覚える気力がなかったのでPHP。しかしローカルWinマシンにCLI-PHPインストールするのが面倒なので、nog.jp鯖でバッチ処理することに。flvのURL抽出はYouTube Downloaderを参考に。
#!/usr/local/bin/php
<?php
require_once("HTTP/Request.php");
$sleep=10;
echo "#!/usr/bin/bash\\n";
$req =& new HTTP_Request("http://b.hatena.ne.jp/video/rss");
if (!PEAR::isError($req->sendRequest())) {
$ret= $req->getResponseBody();
if($rss = simplexml_load_string($ret)){
foreach ($rss->item as $item) {
$title= preg_replace("/YouTube - /","",mb_convert_encoding($item->title,"SHIFT_JIS","UTF-8"));
$title= preg_replace("/\//","-",$title);
$title= preg_replace("/?/","?",$title);
$youtubeurl=$item->link;
sleep($sleep);
$req =& new HTTP_Request($youtubeurl);
if (!PEAR::isError($req->sendRequest())) {
$ret= $req->getResponseBody();
if(preg_match('/\/player2\.swf\?video_id=(.*?)&t=(.*?)"/', $ret, $match)){
$youtubeurl2 = 'http://youtube.com/get_video.php?video_id='.$match[1].'&t='.$match[2];
sleep($sleep);
$req =& new HTTP_Request($youtubeurl2);
if (!PEAR::isError($req->sendRequest())) {
if(preg_match('/^3/',$req->getResponseCode())){
$dlurl=$req->getResponseHeader("Location");
echo 'if [ -e "/cygdrive/c/nog/youtube'.$title.'.flv" ]; then'."\\n";
echo 'echo "File exist !!"'."\\n";
echo 'else'."\\n";
echo 'wget "'.$dlurl.'" -nc -w 3 -t 1 -O "/cygdrive/c/nog/youtube/'.$title.'.flv"'."\\n";
echo 'fi'."\\n";
}
}
}
}
}
}
}
exit;
?>
あ、標準出力をファイルに落とし込むのはcronのコマンドに直書きということで(ぉ
2. ダウンロードして携帯動画変換君をキックする
flv→H.264はなんだかんだいって変換君が楽そうだったのでそうすることにして、ローカルcygwin上で動かすバッチ処理を作成。2重に変換をしないようにするのはどうしようか悩んだ末にperlで書き捨てスクリプトを作ったり。激しくダサイけど、動けばいいでしょ。
/usr/bin/wget --http-user=nog --http-password=hogehoge -O /cygdrive/c/nog/youtube/wget.sh http://nog.jp/test/youtube.txt
/usr/bin/bash /cygdrive/c/nog/youtube/wget.sh
/usr/bin/perl /cygdrive/c/nog/youtube/file.pl
#!/usr/bin/perl
# file.pl ←もうちょっと名前はなんとかならんかったんかい
$filelist="";
$strDir = "/cygdrive/c/nog/youtube";
$strDir2 = "/cygdrive/c/nog/youtube/264";
$dir="c:\\nog\\youtube\\";
opendir( DIR, $strDir );
$file = readdir( DIR );
while ( length( $file )!=0 ) {
if ( index( $file, "." ) != 0 ) {
if($file=~/(.+)\.flv/){
$filename=$1;
if(-e $strDir2."/".$filename.".MP4"){
$filelist=$filelist;
}else{
$filelist=$filelist." \"".$dir.$filename.".flv\"";
}
}
}
$file = readdir( DIR );
}
closedir( DIR );
if($filelist){
system('/cygdrive/c/Progra~1/freesoft/3GP_Converter/3GP_Converter.exe'.$filelist);
}
3. 携帯動画変換君の設定
こいつはOHPのWikiまんまを使用。サムネイルが付かないけど、むしろファイル名ベースのほうが使いやすいという判断。
Title=M.S.Video / 映像:H.264 768kbps 29.97fps 音声:192kbps 48kHz Stereo
Command0=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -timestamp "<%TimeStamp%>" -bitexact -qmin 1 -qmax 31 -vcodec h264 -mbd 2 -4mv -trell -aic -vlevel 13 -fixaspect -s 320x240 -r 29.97 -b 768 -acodec aac -ac 2 -ar 48000 -ab 96 -f psp -muxvb 192 -muxab 64 "<%TemporaryFile%>_1.mp4""
Command1=""<%AppPath%>\cores\QT3GPPFlatten" "<%TemporaryFile%>_1.mp4" "<%TemporaryFile%>_2.mp4" -c QT_H264_QVGA_AAC.ini -t mpg4"
Command2=""<%AppPath%>\cores\ATOMChanger" "<%TemporaryFile%>_2.mp4" "<%OutputFile%>.MP4" "Camouflage_MP4_for_PSP.ini" "<%Title%>""
Command3="cmd /c "del "<%TemporaryFile%>*.*"""
4. 古いものからポイだの設定
削除は古いものからポイだを利用することに。ちなみに現状flvファイル250MB+MP4ファイル700MBくらいの割合。もうちょっと画質落としても良いかも
まとめ
んな感じで、出来たファイルは手動コピー(ここまでしといてローテクの極み) ま、ファイル名見ただけでチェックする必要がなさそうなものってあるし。A80xの動画って本体上で削除指定できないし(音楽は出来るのになんでこんな意味不明な仕様なんだろ)。
また、本体の操作性的の問題として、動画の本数が増えてくると扱いづらい感じもする。音楽2GB映像2GBくらいで丁度良い感じかなぁ。