8 |
|
|
9 |
use GD; |
use GD; |
10 |
use File::Path; |
use File::Path; |
11 |
|
use Getopt::Long; |
12 |
|
|
13 |
my $tmp = '/tmp/frames'; |
my $tmp = '/tmp/frames'; |
14 |
my $out = '/tmp/frames.avi'; |
my $out = '/tmp/frames.avi'; |
15 |
my $jpeg_q = 100; |
my $jpeg_q = 20; |
16 |
my $repeat = 16; |
my $repeat = 1; |
17 |
$repeat = 1; # off |
|
18 |
|
GetOptions( |
19 |
|
"jpeg-q=i" => \$jpeg_q, |
20 |
|
"repeat=i" => \$repeat, |
21 |
|
); |
22 |
|
|
23 |
rmtree $tmp if -e $tmp; |
rmtree $tmp if -e $tmp; |
24 |
mkpath $tmp || die "can't create $tmp: $!"; |
mkpath $tmp || die "can't create $tmp: $!"; |
55 |
foreach my $c ( @cols ) { |
foreach my $c ( @cols ) { |
56 |
foreach ( 1 .. $repeat ) { |
foreach ( 1 .. $repeat ) { |
57 |
$im->fill(50,50, col($c) ); |
$im->fill(50,50, col($c) ); |
|
warn "frame $frame\n"; |
|
58 |
my $path = sprintf('%s/%03d.jpg', $tmp, $frame++); |
my $path = sprintf('%s/%03d.jpg', $tmp, $frame++); |
59 |
open(my $fh, '>', $path) || die "can't open $path: $!"; |
open(my $fh, '>', $path) || die "can't open $path: $!"; |
60 |
print $fh $im->jpeg( $jpeg_q ) || die "can't save picture $path: $!"; |
print $fh $im->jpeg( $jpeg_q ) || die "can't save picture $path: $!"; |
61 |
close($fh) || die "can't close picture $path: $!"; |
close($fh) || die "can't close picture $path: $!"; |
62 |
|
warn "frame $frame $jpeg_q% ", -s $path, " bytes\n"; |
63 |
} |
} |
64 |
} |
} |
65 |
|
|
67 |
warn "## $cmd\n"; |
warn "## $cmd\n"; |
68 |
system($cmd) == 0 or die "encoding failed: $?"; |
system($cmd) == 0 or die "encoding failed: $?"; |
69 |
|
|
70 |
rmdir $tmp || die "can't remove $tmp: $!"; |
#rmdir $tmp || die "can't remove $tmp: $!"; |
71 |
|
|
72 |
warn "created $out ", -s $out, " bytes\n"; |
warn "created $out ", -s $out, " bytes\n"; |