perl で ffmpeg を扱うモジュールには、FFmpeg というものがあるのですが、XS モジュールで make するのに ffmpeg 本体のソースが必要だし、使い方よくわかんないし、ポータビリティ考えるとコマンドラッパーの方がいいよね、という miyagawa さんの意見があったりで、じゃあラッパー作ろうと思ったら、ボンヌさんも作っているということで待っていたのですが、音沙汰がないのと、早急に必要なのもあって、とりあえず作ってみました。
まだ pod が不完全ですが、とりあえず YouTube から拾った flv 動画を mpeg4 に変換して iTunes で観たり、サムネイルを JPEG で切り出したり、といったことができることを確認しました。
使い方は SYNOPSYS にも書いてますが、動画の変換であればこんな感じで。
my $ffmpeg = FFmpeg::Command->new('/usr/local/bin/ffmpeg'); $ffmpeg->input_options({ file => 'nba.flv', }); $ffmpeg->output_options({ file => 'nba.mp4', format => 'mp4', video_codec => 'mpeg4', bitrate => '640', size => '320x240', audio_codec => 'aac', audio_sampling_rate => '44100', audio_bit_rate => '128', }); $ffmpeg->exec();
サムネイルの切り出しはこんな感じ。(任意のオプションで実行する機能。)
my $ffmpeg = FFmpeg::Command->new('/usr/local/bin/ffmpeg'); $ffmpeg->input_file('nba.flv'); $ffmpeg->output_file('nba.mp4'); $ffmpeg->options( '-y', '-f' => 'image2', '-pix_fmt' => 'jpg', '-vframes' => 1, '-ss' => 30, '-s' => '320x240', '-an', ); $ffmpeg->exec();
これから実装したいと思っている機能は、以下の様な指定をすれば、iPod や PSP に適切なパラメータを勝手に設定して変換してくれる、というもの。もちろん、自分の好きな値でパラメータを上書きすることも可能な感じで。
my $ffmpeg = FFmpeg::Command->new('/usr/local/bin/ffmpeg'); $ffmpeg->input_options({ file => 'nba.flv', }); $ffmpeg->output_options({ file => 'nba.mp4', device => 'ipod' or 'psp', }); $ffmpeg->exec();
ボンヌさんが作られているものと統合して、いいものになるといいな。