#!/usr/bin/perl
#
# Created on: Wed 28 Jul 2010 03:41:45 PM
# Last saved: Thu 10 Feb 2011 05:10:44 PM
use PDL;
use PDL::IO::Pic;
use PDL::NiceSlice;
# This is a simple program to create a demo MPEG-1
# movie via the wmpeg() routine in PDL::IO::Pic
# and to test the functionality of using ffmpeg
# in place of the outdated mpeg_encoder.
# a simple parabolic trajectory ("bouncing ball")
# for 30 128x80 image frames
our $coords = pdl( q[
[ 0 1 0]
[ 4 9 1]
[ 8 17 2]
[ 12 25 3]
[ 16 32 4]
[ 20 38 5]
[ 24 43 6]
[ 28 48 7]
[ 32 53 8]
[ 36 57 9]
[ 40 60 10]
[ 44 62 11]
[ 48 64 12]
[ 52 66 13]
[ 56 66 14]
[ 60 66 15]
[ 64 66 16]
[ 68 65 17]
[ 72 63 18]
[ 76 60 19]
[ 80 57 20]
[ 84 54 21]
[ 88 50 22]
[ 92 45 23]
[ 96 39 24]
[100 33 25]
[104 27 26]
[108 19 27]
[112 11 28]
[116 3 29]
] );
our $frames = zeros byte, 128, 80, 30;
our $val = pdl(byte,250); # start with white
# make the square ball bounce
$frames->range($coords,[10,10,1]) .= $val;
# now make the movie
$frames = $frames->(*3)->copy;
# the encoding type is from the suffix
# .mp4 seems to work better than .mpg on
# Windows Media Player
$frames->wmpeg('bounce.mp4'); # use bounce.gif for animated GIF
# output (uncompressed => big)