FFmpeg
view release on metacpan or search on metacpan
t/08.capture.t view on Meta::CPAN
BEGIN {
use Test::More tests => 82;
use strict;
use_ok('FFmpeg');
use_ok('Data::Dumper');
use_ok('File::Spec::Functions');
}
my $fname = "eg/t1.m2v";
ok(-d catfile('eg','test') || mkdir(catfile('eg','test')) , 'mkdir eg/test');
ok(my $ff = FFmpeg->new(input_file => $fname) , 'ff object created successfully');
ok($ff->isa('FFmpeg') , 'object correct type A');
ok(my $sg = $ff->create_streamgroup , 'streamgroup created successfully');
ok($sg->isa('FFmpeg::StreamGroup') , 'object correct type B');
ok(my $frame = $sg->capture_frame(offset => '00:00:00'), 'captured frame');
ok(!$frame->Write(filename=>catfile('eg','test','t0.ppm')), 'wrote frame 0 to file');
ok(-f catfile('eg','test','t0.ppm') , 'frame file exists');
#CAPTURE ALL 30 frames at 1s offset, full rate
ok($iterator = $sg->capture_frames(duration => '00:00:01') , 'frame iterator');
isa_ok($iterator,'Image::Magick::Iterator' , 'frame iterator okay');
my $i = 0;
while(my $frame = $iterator->next){
$i++;
my $j = sprintf("A%03d.ppm",$i);
ok(!$frame->Write(filename=>catfile('eg','test',$j)), "wrote frame $i to file");
ok(-f catfile('eg','test',$j) , "frame file $i exists");
}
#CAPTURE ALL 30 frames at 1s offset, one frame every 0.5s
ok($iterator = $sg->capture_frames(duration => '00:00:01', video_rate => 0.5) , 'frame iterator');
isa_ok($iterator,'Image::Magick::Iterator' , 'frame iterator okay');
$i = 0;
while(my $frame = $iterator->next){
$i++;
my $j = sprintf("B%03d.ppm",$i);
ok(!$frame->Write(filename=>catfile('eg','test',$j)), "wrote frame $i to file");
ok(-f catfile('eg','test',$j) , "frame file $i exists");
#warn $i,"\t",$frame;
}
#CAPTURE ALL 30 frames at 1s offset, one frame every 0.5s, resized to 160x120
ok($iterator = $sg->capture_frames(duration => '00:00:01',
video_rate => 0.5,
video_geometry => '160x120'),
'frame iterator');
isa_ok($iterator,'Image::Magick::Iterator' , 'frame iterator okay');
$i = 0;
while(my $frame = $iterator->next){
$i++;
my $j = sprintf("C%03d.ppm",$i);
ok(!$frame->Write(filename=>catfile('eg','test',$j)), "wrote frame $i to file");
ok(-f catfile('eg','test',$j) , "frame file $i exists");
#warn $i,"\t",$frame;
}
#have to sprintf to round it -- there are extra ppm header bytes which
#make the ratio slightly less than 4.
ok( sprintf("%.0f", ((-s catfile('eg','test','B001.ppm')) / (-s catfile('eg','test','C001.ppm'))) ) == '4','320x240 -> 160x120 resize seems to be working');
( run in 2.240 seconds using v1.01-cache-2.11-cpan-5837b0d9d2c )