![]() Home Overview FAQ Documentation Download Mailing List Geomview For Windows? Support Users Development Bug Reporting Contributing Contact Us Sponsors
|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Closed REQ 5960]: creating MPEGs with geomview?
The SGI version of geomview, at least, saves SGI-format images rather than TIFF.
I'm not sure what you may have to produce MPEG movies; we've been using a
freeware UNIX program "mpeg_encode", which wants PPM files as input, though it's
willing to invoke a user-specified conversion program to convert them on the fly
from some less bulky format.
Enclosed below is a script you can use to make an MPEG movie from a collection
of images. See the "Usage" message it emits when run with no arguments.
It just accepts a list of files on the command line, and produces an mpeg movie;
the only important option might be "-w", to shrink the images before mpeg-ing.
To run it, you'll need:
- perl
- The public-domain program "mpeg_encode"; we got our copy a year ago from
ftp.cc.utexas.edu under source/graphics/mpeg_encode-1.2/...
but you can probably find a closer source.
- the "pbmplus" a.k.a. "netpbm" toolkit, widely available
- and, you'll need to create a script "img2pnm" which converts whatever
kind of image you can have into "PPM" format images,
and writes the resulting PPM file to standard output.
This might be as simple as
#! /bin/sh
/usr/sbin/toppm $1 /usr/tmp/file.ppm
cat /usr/tmp/file.ppm
rm /usr/tmp/file.ppm
A possible alternative, which I haven't tried, would be to acquire the free
"ImageMagick" package, whose "convert" program can do lots of image conversions,
including reading SGI format and writing PPM. ImageMagick is quite a nice
package. If you go that route, you don't need the pbmplus toolkit.
In the script below, I think you'd change
$scale = "|pbmplus -xsize $1";
to
$scale = "-geometry $1";
and also change
INPUT_CONVERT img2pnm * $scale
to
INPUT_CONVERT convert $scale avs:* ppm:-
Good luck.
- Stuart Levy, Geometry Center, University of Minnesota
#! /bin/sh
# This is a shell archive. Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file". To overwrite existing
# files, type "sh file -c". You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g.. If this archive is complete, you
# will see the following message at the end:
# "End of shell archive."
# Contents: /u/share/bin/img2mpeg
# Wrapped by slevy at morse on Fri May 17 10:28:42 1996
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f '/u/share/bin/img2mpeg' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'/u/share/bin/img2mpeg'\"
else
echo shar: Extracting \"'/u/share/bin/img2mpeg'\" \(2469 characters\)
sed "s/^X//" >'/u/share/bin/img2mpeg' <<'END_OF_FILE'
X#! /usr/local/bin/perl
X
X# Wrapper around mpeg_encode.
X
X$usage = "Usage: img2mpeg [-o output.mpeg] [-w xsize] [-q qI,qP,qB] [-p pattern]
X [- (or) file ...]
Xcalls mpeg_encode to convert a collection of image files
Xto an MPEG movie. Options:
X -o name of output file, default -o output.mpeg
X -w resize images to 'xsize' pixels wide; default orig. size
X -q qI,qP,qB Quality factors, 3..31, 3 being best, default -q 3,5,4
X -p framepattern Pattern of I-, P- and B-frames, default -p IPIPI
X file ... list of image files
X - Read a list of file names from standard input, one per line\n";
X
X$out = "output.mpeg";
X$pattern = "IPIPI";
X
Xwhile($ARGV[0] =~ /^-./) {
X if($ARGV[0] eq "-o") { shift, $out = shift, next; }
X elsif($ARGV[0] eq "-w") {
X shift, $_ = shift;
X unless(/(\d+)/ || $1 < 1 || $1 != int($1)) {
X print STDERR "-s imagesize: expected desired image width in pixels\n";
X exit(1);
X }
X $scale = "| pnmscale -xsize $1";
X } elsif($ARGV[0] eq "-q") {
X shift, $_ = shift;
X tr/,/ /;
X @quality = split(' ', $_);
X if(grep($_ < 1 || $_ > 31, @quality)) {
X print STDERR "-q qI,qP,qB: expected quality factors, each in range 1..31\n";
X exit(1);
X }
X grep($_ < 3 && ($_ = 3), @quality);
X } elsif($ARGV[0] eq "-p") {
X shift, $pattern = shift;
X if($pattern =~ /[^IBP]/i || $pattern !~ /I/i) {
X print STDERR "-p pattern: must contain a sequence of letters from I, B, or P (default IBPBI)
Xand must include at least one I.\n";
X exit(1);
X }
X } else {
X print STDERR "Unknown option: $ARGV[0]\n$usage";
X exit(1);
X }
X}
X
X
Xif ($#ARGV < 0) {
X print STDERR $usage;
X exit(1);
X}
X
X
X$PF = "/usr/tmp/$$.encode";
X
X$SIG{'INT'} = 'quit';
X$SIG{'HUP'} = 'quit';
X$SIG{'TERM'} = 'quit';
X
Xsub quit {
X unlink($PF);
X exit(1);
X}
X
X$gop = length($pattern);
X
Xopen(PF, ">$PF");
Xselect(PF);
Xprint "
XPATTERN $pattern
XOUTPUT $out
XBASE_FILE_FORMAT PNM
XINPUT_CONVERT img2pnm * $scale
XSLICES_PER_FRAME 1
XGOP_SIZE $gop
XPIXEL FULL
XRANGE 10
XPSEARCH_ALG LOGARITHMIC
XBSEARCH_ALG CROSS2
XREFERENCE_FRAME ORIGINAL
XINPUT_DIR .
X";
X
Xprint "IQSCALE\t", $quality[0] || 3, "\n";
Xprint "PQSCALE\t", $quality[1] || 5, "\n";
Xprint "BQSCALE\t", $quality[2] || 4, "\n";
X
Xprint "INPUT\n";
X
Xwhile($_ = shift) {
X if($_ eq "-") {
X while(<STDIN>) {
X print;
X print "\n" unless $_ =~ /\n$/;
X }
X } else {
X print $_, "\n";
X }
X}
X
Xprint "END_INPUT\n";
X
Xclose(PF);
X
Xsystem("mpeg_encode -stat /dev/null -no_frame_summary $PF");
X
Xunlink($PF);
END_OF_FILE
if test 2469 -ne `wc -c <'/u/share/bin/img2mpeg'`; then
echo shar: \"'/u/share/bin/img2mpeg'\" unpacked with wrong size!
fi
chmod +x '/u/share/bin/img2mpeg'
# end of '/u/share/bin/img2mpeg'
fi
echo shar: End of shell archive.
exit 0
|
||
|
Home | Overview | FAQ | Documentation | Support | Download | Mailing List Windows? | Development | Bug Reporting | Contributing | Contact Us | Sponsors |
|||
|
site hosted by |
|||