FFmpeg::Command - A wrapper class for ffmpeg command line utility #0

perl で ffmpeg を扱うモジュールには、FFmpeg というものがあるのですが、XS モジュールで make するのに ffmpeg 本体のソースが必要だし、使い方よくわかんないし、ポータビリティ考えるとコマンドラッパーの方がいいよね、という miyagawa さんの意見があったりで、じゃあラッパー作ろうと思ったら、ボンヌさんも作っているということで待っていたのですが、音沙汰がないのと、早急に必要なのもあって、とりあえず作ってみました。

FFmpeg::Command

まだ 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();

ボンヌさんが作られているものと統合して、いいものになるといいな。