my $in_width = 640; # this depends on your input data my $in_height = 480; # this depends on your input data my $width = 320; # this depends on what you want my $height = 200; # this depends on what you want my $file = 'test.mpg'; my $ffmpeg = 'bin/ffmpeg.exe'; my $pixel_format = 'rgb'; my $pid = open my $output, sprintf qq{| %s -y -f rawvideo -pix_fmt %s -s ${in_width}x${in_height} -i "-" -f mpeg2video -s ${width}x${height} "$file"}, $ffmpeg, $pixel_format ); for my $frame (@frames) { print $writer $frame; };