in reply to Fast and light-weight animation solution
I have had good success with using ffmpeg to write the video. I output a raw RGB stream and tell ffmpeg the width and height of the stream and ffmpeg then encodes each count of $width*$height*RGB bytes into one frame of the video. See App::VideoMixer, respectively (the source of) App::VideoMixer::Source::FFmpeg, which implements both the video reader and writer. The core of it is the following code:
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_widt +h}x${in_height} -i "-" -f mpeg2video -s ${width}x${height} "$file"}, $ffmpeg, $pixel_format ); for my $frame (@frames) { print $writer $frame; };
|
|---|