MPEG-FAQ 4.1: MPEG-1 Video Software Encoder
MPEG-1 Video Software Encoder
MPEG-1 Video Software Encoder
(Version 1.5; May 8, 1995)
Lawrence A. Rowe, Kevin Gong, Eugene Hung, Ketan Patel, Steve Smoot
and Dan Wallach
Computer Science Division-EECS, Univ. of Calif. at Berkeley
This directory contains the freely distributed Berkeley MPEG-1 Video
Encoder. The encoder implements the standard described in the ISO/IEC
International Standard 11172-2. The code has been compiled and tested
on the following platforms:
DECstation 5000 and Alpha
HP PA-RISC (HP/UX 9.X) (i.e., HP 9000/7XX and 9000/3XX)
SGI Indigo running IRIX 5.0.1
Sun Sparc (SunOS 4.X)
In addition, Rainer Menes from the Technical University of Munich has
ported the encoder and decoder to the Macintosh. You can get that code
directly from him (email@example.com), or from the
Berkeley FTP archive (mm-ftp.CS.Berkeley.EDU). If you decide to port
the code to a new architecture, please let us know so that we can
incorporate the changes into our sources.
This directory contains everything required to build the encoder
and run it. We have included source code, makefiles, binaries
for selected platforms, documentation, and test data. Installation
instructions are given in the file named src/mpeg_encode/INSTALL. A man
page is given in the file doc/mpeg_encode.1. A detailed user
manual is provided in postscript format in the file doc/user-manual.ps.
The encoder will accept any input file format as long as you provide
a script to convert the images to PPM, YUV, JPEG, or JMOVIE format. Input
file processing is described in the file doc/INPUT.FORMAT. Options to
control input file processing and compression parameters are specified in
a parameter file. Very little error processing is done when reading
this file. We suggest you start with the sample parameter file
examples/template.param and modify it. See also examples/default.param.
The convert directory of Mpeg-Tools contains utilities you might find
programs to do PPM/YUV conversion and programs to convert Parallax
XVideo JPEG files into PPM, YUV, or JPEG frames.
The motion vector search window can be specified, including half-pixel
block matching, in the parameter file. We have implemented several
search algorithms for P-frames including: 1) exhaustive search,
2) subsampled search, and 3) logarithmic search. We have also implemented
several alternatives for B-frame block matching including: 1) interpolate
best forward and best backward block, 2) find backward block for best
forward or vice-versa (called CROSS2), and 3) exhaustive cross product
(i.e., go out for coffee and a donut!). The search algorithms are controlled
by options in the parameters file. For tips on choosing the right search
technique, see the user manual.
The encoder can be run on one computer (i.e., sequential) or on several
computers (i.e., parallel). Our goal is to produce a portable, easy-to-use
encoder that we can use to encode large volumes of video material for
the Berkeley VOD system (see paper VodsProp93.ps.Z on the FTP archive).
The parallelism is done on a sequence of pictures. In other words, you
can spawn one or more children to encode continuous runs pictures. The
uncompressed data can be accessed either through NFS or TCP sockets.
The goal is to allow you to encode using multiple processors, think
spare cycles on workstations, to speed up the encoding time. Although
performance depends on the speed of individual processors, the file system
and network, and the P/B frame search methods, we have encoded 3.75
frames/second on 8 HP Snakes running in parallel as compared with 0.6
frames/second on 1 Snake. These are preliminary results. We are continuing
to experiment with and tune the code. Instructions to run the parallel system
are given in the man page and the parallel.param example parameter file.
We have done some tuning to produce a reasonable encoder, but there are
many more optimizations that we would like to incorporate. These
extensions are listed in the file doc/EXTENSIONS. If you succeed in
implementing any of them, please let us know!
Send bug reports to:
Problems, questions, or patches should be sent to this address.
Anyone interested in providing financial support for this research or
discussing other aspects of this project should contact Larry Rowe at
Rowe@CS.Berkeley.EDU (+1 510-642-5117).
This software is freely distributed. That means, you may use it for
any non-commercial purpose. However, patents are held by several companies
on various aspects of the MPEG video standard. Companies or individuals
who want to develop commercial products that include this code must
acquire licenses from these companies. For information on licensing, see
Appendix F in the standard.
We gratefully thank Hewlett-Packard and Fujitsu who provided financial
support for this work. We also want to thank the following people and
organizations for their help:
Jef Poskanzer who developed the pbmplus package.
Copyright (C) 1989, 1991 by Jef Poskanzer.
Permission to use, copy, modify, and distribute this software and its
documentation for any purpose and without fee is hereby granted, provided
that the above copyright notice appear in all copies and that both that
copyright notice and this permission notice appear in supporting
documentation. This software is provided "as is" without express or
Eiichi Kowashi of Intel and Avideh Zakhor of U.C. Berkeley who
provided valuable suggestions on motion vector searching.
Chad Fogg of the University of Washington who has helped us
understand many issues in MPEG coding and decoding.
Rainer Menes of the Technical University of Munich who has ported the
the Berkeley MPEG encoder and decoder to the Macintosh, and he has
provided us with many suggestions to improve the code.
Robert Safranek of ATT for comments, suggestions, and most of the
code for custom quantization tables.
Jim Boucher of Boston University for jmovie2jpeg.
The San Diego SuperComputing Center for providing facilities to
develop some of the code contained within.
Eugene Hung firstname.lastname@example.org