--- amv.pl 2007/07/21 15:17:58 22 +++ amv.pl 2007/07/21 17:03:56 23 @@ -23,12 +23,14 @@ my $dump_avi = "dump.avi"; my $no_jpeg_header = 0; my $jpeg_q = 100; +my $jpegtran = '-flip vertical'; GetOptions( "dump!" => \$dump, "debug!" => \$debug, "dump-dir=s" => \$dump_dir, "no-jpeg-headers!" => \$no_jpeg_header, + "jpegtran=s" => \$jpegtran ); my $path = shift @ARGV || die "usage: $0 movie.amv\n"; @@ -161,10 +163,6 @@ return; } - my $path = sprintf("$dump_dir/%04d.jpg", $frame_nr++ ); - - open(my $fh, '>', $path) || die "can't create $path: $!"; - my $w = $d->{amvh}->{width} || die "no width?"; my $h = $d->{amvh}->{height} || confess "no height?"; @@ -295,8 +293,17 @@ my $frame = join('', @subframes ) . $data; @subframes = (); + my $path = sprintf("$dump_dir/%04d.jpg", $frame_nr++ ); + + my $fh; + if ( $jpegtran ) { + open($fh, '|-', "jpegtran $jpegtran > $path") || die "can't create $path: $!"; + } else { + open($fh, '>', $path) || die "can't create $path: $!"; + } + if ( ! $no_jpeg_header ) { - print $fh $header, $frame, "\xFF\xD9" || die "can't write jpeg $path: $!"; + print $fh $header . $frame . "\xFF\xD9" || die "can't write jpeg $path: $!"; } else { print $fh $frame || die "can't write raw jpeg $path: $!"; } @@ -356,6 +363,6 @@ } } -my $cmd = "ffmpeg -i $dump_dir/%04d.jpg -r 16 -f $dump_avi"; +my $cmd = "ffmpeg -i $dump_dir/%04d.jpg -r 16 -y $dump_avi"; system($cmd) == 0 || die "can't convert frames to avi using $cmd: $!";