nicocacheでキャッシュされた動画からffmpegでmp3に変換するCGI+連携用グリモンを書いた

手ぬきです。

RubyでかかれたCGI

注意:CGIでうごかすので、HD直下などにパーミッション設定してやるとうまくいきます。

#!/usr/bin/ruby
require 'cgi'

#Setting
cache_directory = "/nicocache/cache"#絶対パスでnicocacheのキャッシュ位置を指定
conv_directory = "/niconv"#変換先
ffmpeg_path = "/Applications/ffmpeg"#ffmpegパス
##############################
cgi = CGI.new
print "Content-Type: text/html\r\n\r\n"
#####例外#####
if !cgi.has_key?("id")
  puts "<h1>Error</h1>"
  puts "動画IDを指定してくだしあ。"
  exit 0
end
#####変数定義#####
id = cgi['id']
dirlist = Dir::entries(cache_directory)
dirlist2 = Dir::entries(conv_directory)
#####例外2#####
if !(/^sm[0-9]*$/ =~ id)
  puts "<h1>Error</h1>"
  puts "動画IDがおかしいです。SmileVideoにしか対応してないです"
  p id
  exit 0
end  
dirlist2.each{|n|
  if /^#{id}/ =~ n
    puts "<h1>Error</h1>"
    puts "すでに変換されている様子。"
    exit 0
  end
}
flag = false
filename = ""
dirlist.each{|n|
  if /^#{id}/ =~ n
    flag = true
    filename = n
  end
}
if !flag
  puts "<h1>Error</h1>"
  puts "nicocacheで動画のダウンロードが終わってないか、キャッシュが存在しません"
  exit 0
end
#####変換処理準備#####
filename2 = filename.sub(/\..*$/,"")
if /mp4$/ =~ filename
  command = ffmpeg_path+" -i "+cache_directory+"/"+filename+" -ab 128 "+conv_directory+"/"+filename2+".mp3"
elsif /flv$/ =~ filename
  command = ffmpeg_path+" -i "+cache_directory+"/"+filename+" -acodec copy "+conv_directory+"/"+filename2+".mp3"
else
  puts "<h1>Error</h1>"
  puts "flv/mp4にしか対応してないです。"
  exit 0
end
puts "<h1>変換中...</h1>"
puts "変換中"
system command+" 2>/dev/null"
puts '<script type="text/javascript">window.close();</script>'

グリモン

// ==UserScript==
// @name           Niconv
// @namespace      net.soralabo.gm_script
// @include        http://www.nicovideo.jp/watch/sm*
// ==/UserScript==
function xp(query) {//Thanks gigi-net
    var results = document.evaluate(query, document, null, 7, null);
    var nodes = new Array();
    for(var i=0; i<results.snapshotLength; i++){
        nodes.push(results.snapshotItem(i));
    }
    return nodes;
}
ii = xp("/html/body/div[2]/div[4]/table/tbody/tr/td");
iad = location.href.replace("http://www.nicovideo.jp/watch/","");
ii[0].innerHTML += ' | <a href="javascript:void(window.open('+"'"+'http://localhost/nc/nc.rb?id='+iad+"'"+', '+"'"+'nicooonv'+"'"+','+"'"+'width=500,height=350,menubar=no,toolbar=no,scrollbars=yes'+"'"+'))">MP3 Convert</a>';

動作ムービー

エンコード面倒くさいのでmovで...
http://files.getdropbox.com/u/261861/niconv.mov