muumoo.jp


ニュース記事検索


過去ログ 2007年08月08日 - ニュース過去ログ

ニュース過去ログ

2007/08/08 管理人日記 ニコニコ動画のflvをAdvanced/W-ZERO3[es]向けに変換するJavaScript (管理人日記)

私は普段、動画をAdvanced/W-ZERO3[es](アドエス)に入れて、空いた時間に見たりするのが最近のお気に入りです。動画って文章よりも見るのに時間がかかるので、いつでも携帯端末で見れるってのは便利(実際には文章も携帯端末で読めると便利なことが多い。つまり携帯端末は常に便利だということ)。

自分で録画したテレビ番組はwmvなのでそのまま再生できますが、YouTubeやニコニコ動画からダウンロードしてきた動画はflvです。YouTubeのflvはTCPMPにflvプラグインを入れると再生できますが、ニコニコ動画のflvはバージョンが新しいらしく、現在TCPMPのプラグインでは対応できてないようです。

なので、適当な形式に変換(再エンコード)することになります。以前までは、PSPにニコニコ動画を入れよう!(ふぉーみゅらわん&PSP裏情報)で紹介されてる方法で、ちょっと改造した携帯動画変換君を使って変換していましたが、マウスでいちいち操作するのが面倒になったので、自分で変換スクリプト書きました。

内部的にはffmpegを使っているので携帯動画変換君と同じですが、アドエス向けに設定を固定しているため、スクリプトを実行するだけですぐに変換されます。

convert_nicovideo.js

以下のコードをコピペして保存してください。ファイル名は何でもいいですが、ここでは convert_nicovideo.js とします。

var fso = new ActiveXObject('Scripting.FileSystemObject');
var path = fso.GetParentFolderName(WScript.ScriptFullName);
var source_path = fso.BuildPath(path, 'sources');
var archive_path = fso.BuildPath(path, 'archives');
var output_path = fso.BuildPath(path, 'outputs');
var ffmpeg_path = fso.BuildPath(path, 'ffmpeg');

var files = fso.GetFolder(source_path).Files;
for(var file = new Enumerator(files); !file.atEnd(); file.moveNext()){
    var item = file.item();
    if(/^(.+)\.flv$/.test(item.Name)){
        var in_file = item.Path;
        var out_file = fso.BuildPath(output_path, RegExp.$1);
        flv_to_mp4(in_file, out_file + '.mp4');
        flv_to_mp3(in_file, out_file + '.mp3');
        archive(in_file);
    }
}

function flv_to_mp4(in_file, out_file){
    call_ffmpeg(
        '-y -i "' + in_file +'" ' +
        '-flags bitexact -vcodec xvid -s 320x240 -r 14.985 -b 216k ' +
        '-acodec aac -ac 2 -ar 24000 -ab 96k ' +
        '-f psp "' + out_file + '"'
    );
}
function flv_to_mp3(in_file, out_file){
    call_ffmpeg(
        '-y -i "' + in_file +'" ' +
        '-acodec copy ' +
        '"' + out_file + '"'
    );
}
function call_ffmpeg(param){
    var wshShell = new ActiveXObject('WScript.Shell');
    wshShell.Run('"' + ffmpeg_path + '" ' + param, 10, true);
}
function archive(in_file){
    var archive_file = fso.BuildPath(archive_path, fso.GetFileName(in_file));
    fso.MoveFile(in_file, archive_file);
}
ffmpegの入手

Win32 Binariesをダウンロードして解凍して、

の2つのファイルを、さっきの convert_nicovideo.js と同じフォルダに配置します。

ffmpegには複数の系統があるらしいですが、私は上記のリンク先から落とせるffmpegのRevision 9017でしか動作確認していません。他のでも動くかもしれないけど。

空っぽのフォルダを作成

同じフォルダに、

という3つのフォルダを作成します。中身は空っぽで構いません。

フォルダ:archives,outpus,sources、ファイル:convert_nicovideo.js,ffmpeg.exe,pthreadGC2.dll

ここまでの準備が終わると、上記のような構成になっているはずです。これで準備完了。

使い方
  1. Greasemonkeyスクリプトや他のツールを使って、flvをダウンロードする。
  2. ダウンロードしたflvはさっき作った sources フォルダに格納する。ファイル名をちゃんと付ける。
  3. convert_nicovideo.js を実行する。
  4. しばらく待つ。

これだけです。複数のflvを sources に置いておけば、一気に変換されます。変換スクリプトの仕様は以下の通り。

スクリプトを実行するだけで、sources フォルダ内のファイルが全部変換され、終わったら archives に移動するわけです。想定してる使い方としては、いくつかflvをためて一気に変換する、という作業を繰り返す感じです。

スクリプトの実行をタスクスケジューラに登録しておいて、夜間に流してもいいかも知れない。flvを置いておけば、朝にはmp4に変換されてる、というイメージ。スクリプトに機能を追加して、変換後のmp4がアドエスにそのまま転送されるようにすればさらに便利。

アドエス以外の機器でも

このスクリプトで使用しているffmpegの設定は、元は携帯動画変換君のPSP向け設定です。なので、このスクリプトで作ったmp4ファイルは、PSPでもそのまま再生できると思います。あと試してないけどiPodでもいけるのかな。

スクリプトは内部でffmpegにパラメータを渡して実行してるだけなので、コードを書き換えれば他の設定も可能。どんなパラメータを渡せば良いかは、携帯動画変換君に同梱されてるiniファイルが非常に参考になります。あとはffmpegのドキュメントを読めば大抵のことはできる。

この記事のURI:
http://muumoo.jp/news/2007/08/08/0niconvert.html
関連記事 最新の関連記事
関連記事 直後の関連記事
関連記事 直前の関連記事


Copyright© 2002-2007 muumoo.jp All Rights Reserved.