まず、Ubuntuに入っているffmpegのバージョンは古い、というより本家ffmpegが1日に1コミット以上という凄まじい早さで開発が進んでいるので、とりあえずSVNリポジトリからチェックアウトして、コーデックもろもろもインストールし、ffmpegのビルド&インストールも済んでいるものとします。
参考URLはこちら: http://ubuntu.futene.net/
変換は make で行おうと思ったのですが、ファイル名にスペースがあると面倒なことになりそうなので、Rakeを使うことにしました。といっても、ルールの定義をするだけな上に基本的なことも理解していないので、特に clean タスクの定義はぞんざいです。まぁ自分用なので、気に入らない方はスルーでおk。
さて、ffmpegへ渡すコマンドラインですが、ffmpegの取る引数はもう現代の魔法ですね。ボクも意味はほとんどわかりませんが、ネットの海から持ってきた情報をかき集めただけのものです。こんな感じ。
$ ffmpeg -i infile.avi -qmin 1 -qmax 51 -pix_fmt yuv420p -vcodec libx264 -coder 0 -vpre medium -bufsize 1000 -g 60 -vlevel 12 -qns -qpel -mbd 2 -s 320x240 -r 29.97 -b 512k -maxrate 5000 -acodec libfaac -ac 2 -ar 44100 -ab 96k -f 3g2 outfile.3g2
コーデックには一応フリーのものを使っています。で、これを2パスエンコードしようということで、Rakefileの登場なわけですね。
SRC = FileList["*mp4"]
DST = SRC.ext("3g2")
INSTALL_DIR = "/media/********************/Video/"
FFMPEG = "ffmpeg"
UNRECOGNIZED_OPTIONS = "-hq -bitexact -vprofile baseline -4mv -trell -aic -me full -fixaspect -muxvb 192 -muxab 64"
OPTIONS = "-qmin 1 -qmax 51 -pix_fmt yuv420p -vcodec libx264 -coder 0 -vpre medium -bufsize 1000 -g 60 -vlevel 12 -qns -qpel -mbd 2 -s 320x240 -r 29.97 -b 512k -maxrate 5000 -acodec libfaac -ac 2 -ar 44100 -ab 96k -f 3g2 -threads 8 -y"
task :default => DST
task :clean do
DST.each do |file|
if File.exists? file
sh "rm '#{file}'"
end
end
sh "rm -f *log"
sh "rm -f *mbtree"
end
task :install => :default do
raise RuntimeError, "マウントされてませんよ" if not File.exists? INSTALL_DIR
DST.each{ |file| sh "cp '#{file}' #{INSTALL_DIR}" }
end
rule ".3g2" => ".mp4" do |t|
sh "#{FFMPEG} -i '#{t.source}' -pass 1 #{OPTIONS} '#{t.name}'"
sh "#{FFMPEG} -i '#{t.source}' -pass 2 #{OPTIONS} '#{t.name}'"
end
ほんとシンプルですが、 rake install とすると特定のディレクトリへコピーするようにしました。携帯への転送がWindowsじゃないと行えないので、NTFSパーティションに書き込むための措置です。それが見えなかったら RuntimeError 投げます。
というわけで自分用でした。
※転送しても見れなかったらごめんなさい。
押してねっ→BlogPeople「趣味の世界」ブログランキング
0 件のコメント:
コメントを投稿