--- frames.pl 2007/07/21 12:50:32 17 +++ frames.pl 2007/10/01 20:48:54 35 @@ -12,8 +12,11 @@ my $tmp = '/tmp/frames'; my $out = '/tmp/frames.avi'; -my $jpeg_q = 20; +my $jpeg_q = 100; my $repeat = 1; +my $vary_jpeg_q = 0; +$repeat = 16; +my $audio = '-i adpcm.wav -acodec adpcm_ms -ar 22050'; GetOptions( "jpeg-q=i" => \$jpeg_q, @@ -41,29 +44,49 @@ } my @cols = ( + 'fff', '000', 'f00', + '000', '0f0', + '000', '00f', + '000', 'ff0', + '000', '0ff', + '000', 'fff', ); my $frame = 1; +sub save_jpeg { + my ( $path, $q ) = @_; + open(my $fh, '>', $path ) || die "can't open $path: $!"; + print $fh $im->jpeg( $q ) || die "can't save picture $path: $!"; + close($fh) || die "can't close picture $path: $!"; +} + foreach my $c ( @cols ) { foreach ( 1 .. $repeat ) { $im->fill(50,50, col($c) ); - my $path = sprintf('%s/%03d.jpg', $tmp, $frame++); - open(my $fh, '>', $path) || die "can't open $path: $!"; - print $fh $im->jpeg( $jpeg_q ) || die "can't save picture $path: $!"; - close($fh) || die "can't close picture $path: $!"; + my $path = sprintf('%s/%03d.jpg', $tmp, $frame); + save_jpeg( $path, $jpeg_q ); + + if ( $vary_jpeg_q ) { + foreach my $q ( 1 .. 100 ) { + my $path = sprintf('%s/%03d-q%03d.jpg', $tmp, $frame, $q ); + save_jpeg( $path, $q ); + } + } + warn "frame $frame $jpeg_q% ", -s $path, " bytes\n"; + $frame++; } } -my $cmd = "ffmpeg -i $tmp/%03d.jpg -r 16 -y $out"; +my $cmd = "ffmpeg -i $tmp/%03d.jpg -r 16 -vcodec mjpeg $audio -y $out"; warn "## $cmd\n"; system($cmd) == 0 or die "encoding failed: $?";