Skip to content

Instantly share code, notes, and snippets.

@Echos
Created August 5, 2009 08:19
Show Gist options
  • Save Echos/162590 to your computer and use it in GitHub Desktop.
Save Echos/162590 to your computer and use it in GitHub Desktop.
#!/opt/local/bin/ruby -Ku
# -*- coding: utf-8 -*-
require 'rubygems'
require 'nicovideo'
require 'pit'
require "kconv"
#########################################
## iphone用変換コマンド(Mac用かも・・・)
#########################################
exec_iphone6 = "/opt/local/bin/ffmpeg -i __FILE_NAME__ -f ipod -level 13 -croptop 8 -cropbottom 8 -cropleft 8 -cropright 14 -s 480x270 -b 600k -r 24 -ar 48000 -ac 2 -ab 128 -threads 2 __FILE_NAME__.tmp "
exec_iphone4 = "/opt/local/bin/ffmpeg -i __FILE_NAME__ -f ipod -level 13 -croptop 68 -cropbottom 68 -cropleft 8 -cropright 14 -s 480x270 -b 600k -r 24 -ar 48000 -ac 2 -ab 128 -threads 2 __FILE_NAME__.tmp "
exec_info = "/opt/local/bin/ffmpeg -i __FILE_NAME__ 2>&1 | grep Stream | grep Video"
#via http://d.hatena.ne.jp/hayori/20080307/1204852916
module Nicovideo
class VideoPage
def type
@params ||= get_params
pattern = %r!^http://.*\.nicovideo\.jp/smile\?(.*?)=.*$!
CGI.unescape(@params['url']) =~ pattern
case $1
when 'm'
return 'mp4'
when 's'
exit
else
return 'flv'
end
end
end
end
begin
niconico = Pit::get('niconico' , :require => {
'nico_mail' => 'your nicovideo mail',
'nico_pass' => 'your nico_pass pass',
})
niconico_ml = niconico['nico_mail']
niconico_pw = niconico['nico_pass']
rescue
end
if ARGV.length == 0 then
puts "URLを指定してください。"
exit
end
nv = Nicovideo.new(niconico_ml, niconico_pw)
nv.login
video_id = ARGV[0].split('/')[-1]
filename = ''
nv.watch(video_id) {|v|
#たまにファイル名が化けちゃう;;
filename = "【#{v.id}】#{v.title.sub(/‐.*$/, '')}.#{v.type}"
tmpname = v.id
File.open(tmpname, "wb") {|f| f.write v.flv }
#コマンドの準備
exec_iphone4 = exec_iphone4.gsub("__FILE_NAME__",tmpname)
exec_iphone6 = exec_iphone6.gsub("__FILE_NAME__",tmpname)
exec_info = exec_info.gsub("__FILE_NAME__",tmpname)
#動画サイズを取得するために、保存したファイル情報をとる
r = `#{exec_info}`
xysize = (r.scan(/\d+x\d+/))[0].split('x');
#動画サイズが取れなかったら潔くあきらめる(ぉ
if xysize.length != 2 then
exit
end
#サイズを判定して、変換処理を決める
if (xysize[1].to_i / 3 * 4) == xysize[0].to_i then
puts "4:3サイズです。"
system(exec_iphone4)
else
puts "16:9サイズです。"
system(exec_iphone6)
end
#いらないファイルを消す
File.delete(tmpname)
File.rename(tmpname + '.tmp' , filename)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment