時々、容量無制限!って書いてある無料HPサービスありますよね。WebDAVかS3互換のプログラムとflvを置いて動画サービスの裏ストレージとして使えないかなと思ってやってみたんですが、いまいちだった。理由は2つ。
1つは、容量無制限つっても規約で大抵ファイル置き場にしちゃだめとかあるし、膨大なHDD使用料と転送量でさすがにバレる。(当たり前)
2つは、動画の変換にCPUがかなり必要になる。無料HPサービス側じゃFFmpegは動かせなさそうだし、3年前のうんこノート上のcoLinux上で実時間の3倍ぐらいかかる。これかかり過ぎかな?
flvへの変換はニコニコ動画用ファイル作成Wikiを参考にしてFFmpeg 2passでコンパイル。一括変換したいので下記のようなスクリプトを書いて一晩置いたら終わってた。
#!/usr/bin/env ruby
$KCODE = "u"
require "tmpdir"
require "fileutils"
require "pathname"
def abspath(file)
Pathname.new(file).realpath.to_s
end
def movie2flv(src)
dst = src.gsub(/\..{1,4}$/, ".flv")
puts dst+"\n"
passlog = Dir.tmpdir+"/passlog"
system "ffmpeg -i \"#{src}\" -vcodec flv -r 15 -b 500k -cropleft 6 -cropright 6 -s 512x384 -deinterlace -pass 1 -passlogfile \"#{passlog}\" -an -y \"#{dst}\""
system "ffmpeg -i \"#{src}\" -vcodec flv -r 15 -b 500k -cropleft 6 -cropright 6 -s 512x384 -deinterlace -pass 2 -passlogfile \"#{passlog}\" -ar 44100 -ab 128k -y \"#{dst}\""
File.delete(passlog)
end
src = abspath(ARGV[0])
if File.directory?(src)
Dir.foreach(src) do |f|
f = abspath(src+"/"+f)
unless File.directory?(f)
puts "#{f}\n"
movie2flv(f)
end
end
else
puts "#{src}\n"
movie2flv(src)
end
音声のcodecは普通libmp3lameだそうだけどDebianデフォルトのFFmpegじゃ駄目。面倒なので無しで。ちゃんとやるならソースからコンパイルした方が良さそう。
Player側はJavascriptとNonverBlaster。
と、1日かけたところで出来たのは俺専用動画サービス。このままじゃ一銭にもなりそうにないので眠らせとこう。