2010年1月21日木曜日

TheSchwartz & FFmpeg::Command

スズキです。

実は、TheSchwartzを利用したかったのは、近頃、FFmpegやImageMagickを使った、
静止画、動画処理の案件が多かったので、そして、その手の処理は、
処理コストが高いことが多く、本格的にキューイングシステム使いたいなーって理由です。

せっかくなので、下記のように、WorkerManagerを使った形で利用するところまで
もってきました。
http://blog.suz-lab.com/2010/01/macworkermanagerfor-theschwartz.html
(実は今日、なんとWorkerManager作った人とお会いできました)

ということで、実際にFFmpeg(FFmpeg::Command)の処理をしてみます。

まずは、(WorkerManagerの)Workerから。

--------【FFmpeg.pm】--------
package SuzLab::Worker::FFmpeg;
use strict;
use warnings;
use base qw( TheSchwartz::Worker );
use TheSchwartz::Job;
use FFmpeg::Command;

sub work {

  my $class = shift;
  my TheSchwartz::Job $job = shift;

  my $input_file = $job->arg->{input_file};
  my $output_file = $job->arg->{output_file};

  print $input_file . "\n";
  print $output_file . "\n";

  my $ffmpeg = FFmpeg::Command->new();

  $ffmpeg->input_options({
    file => $input_file,
  });

  $ffmpeg->output_options({
    file => $output_file,
    device => 'ipod',
  });

  my $result = $ffmpeg->exec();

  if($result){
    print "Processed\n";
    $job->completed();
  } else {
    print $ffmpeg->errstr . "\n";
    $job->failed($ffmpeg->errstr);
  }

}

sub max_retries { 0 }
sub retry_delay { 0 }

1;
--------

次に、(WorkerManagerの)Client。

--------【client.pl】--------
#!/usr/bin/env perl

use strict;
use warnings;

use FindBin;
use lib File::Spec->catdir($FindBin::Bin, '..', 'lib', 'perl');
use lib File::Spec->catdir($FindBin::Bin, '..', 'sbin', 'workermanager', 'lib');

use WorkerManager::Client::TheSchwartz;

my $client = WorkerManager::Client::TheSchwartz->new({
  "dsn" => "dbi:mysql:theschwartz",
  "user" => "theschwartz",
  "pass" => "xxxxxxxx"
});

$client->insert('SuzLab::Worker::FFmpeg' => {
  "input_file" => "/Users/suzuki/Dropbox/suz-lab/common/tmp/input.mp4",
  "output_file" => "/Users/suzuki/Dropbox/suz-lab/common/tmp/output.mp4"
});
--------

あとは、FFmpegやImageMagickのお話です...

--------
http://www.suz-lab.com

0 コメント: