実は、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 コメント:
コメントを投稿