sshのポートフォワードを使ってエリア外からradikoを録音するプログラム

sshのポートフォワード機能を使ってエリア外からradikoを録音するRubyプログラムを作成しました。(何番煎じかわかりませんが)
一応Rubysshライブラリの使い方のサンプルにもなってます。

begin
  require "net/ssh"
rescue LoadError
  require "rubygems"
  require "net/ssh"
end

def command(cmd)
  puts cmd
  system cmd
end

def change_ext(path, ext, new_ext)
  File.dirname(path) + "/" + File.basename(path, ext) + new_ext
end

def flv2mp3(flv)
  mp3 = change_ext(flv, ".flv", ".mp3")
  if File.exists? flv
    command "ffmpeg -i #{flv} #{mp3}"
    command "rm -f #{flv}"
  end
end

def get_radiko_mp3(channel, time)
  user = "user"
  host = "host"
  local_port = 8000
  now = Time.now.strftime("%Y-%m-%d_%H-%M")
  flv = "radiko_#{channel}_#{now}.flv"
  alist = [["rtmp",     "rtmpe://127.0.0.1"],
           ["port",     local_port.to_s],
           ["playpath", "simul-stream"],
           ["swfUrl",   "http://radiko-dl.ssdl1.smartstream.ne.jp/radiko-dl/1.1/player/player_0.1.2.swf"],
           ["pageUrl",  "http://radiko.jp/player/player.html\##{channel}"],
           ["app",      "#{channel}/_defInst_"],
           ["flashVer", "LNX 10,0,45,2"],
           ["stop",      time.to_s],
           ["flv",      flv],
          ]  
  rtmp_cmd = "rtmpdump " + alist.map{|k,v| "--#{k} \"#{v}\""}.join(" ") + " --live"

  Net::SSH.start(host, user) do |ssh|
    ssh.forward.local(local_port, "radiko.smartstream.ne.jp", 1935)

    th = nil
    ssh.loop(0.1) do 
      th = Process.detach(Process.fork{exec rtmp_cmd}) unless th
      th.alive?
    end

  end
  flv2mp3 flv
end

def usage
  puts "usage: #{__FILE__} channel time"
  exit 0
end

if $0 == __FILE__
  if ARGV.length < 2
    usage
  else
    get_radiko_mp3(ARGV[0], ARGV[1])
    puts "bye"
  end
end

sshログインするホストとユーザ名を書き換えて使用します。
sshホストはradikoのエリア内に存在する必要があります。
また、ローカルのパソコンにrtmpdump、ffmpeg及びRubyのNet::SSHライブラリがインストールされている必要があります。