MPEG-1 Video Software Encoder (Version 1.2; October 18, 1993) Lawrence A. Rowe, Kevin Gong, Ketan Patel, 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 8.X) (i.e., HP 9000/7XX and 9000/3XX) IBM RS/6000 Intel i486 running ISC InterActive 2.2.1 (SysV 3.2), Linux (SLS v1.01), and XFree86-1.2 (X11R5) 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 (menes@statistik.tu-muenchen.de), or from the Berkeley FTP archive (toe.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/INSTALL. A man page is given in the file doc/mpeg_encode.1. The encoder will accept any input file format as long as you provide a script to convert the images to PPM or YUV 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. We have also provided a Tcl/Tk script (Ver 6.7), named encode.tcl, that can be used to set parameters interactively (see the misc/ directory). The misc/ directory contains other utilities you might find useful including: programs to do PPM/YUV conversion and programs to convert Parallax XVideo JPEG files into PPM or YUV frames. We have also written a program to read frames from a Parallax JMOVIE file (see the FTP site listed above file pub/multimedia/misc/jgetFrame.tar.Z). 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 doc/TIPS. 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 EXTENSIONS. If you succeed in implementing any of them, please let us know! In particular, we have not implemented rate control to limit the bitrate nor dynamically varying compression parameters (e.g., frame sequence, Qscale, search technique, etc.). We have established several mailing lists for messages about the Berkeley MPEG work: mpeg-list-dist@CS.Berkeley.EDU General information on the MPEG-1 decoder and encoder for everyone interested should be sent to this list. mpeg-list-request@CS.Berkeley.EDU Requests to join or leave the list should be sent to this address. The subject line should contain the single word ADD or DELETE. mpeg-bugs@CS.Berkeley.EDU 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. ACKNOWLEDGEMENTS: We gratefully thank Hewlett-Packard and Fujitsu who provided financial support for this work. We also want to thank the following people 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 implied warranty. --------- 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.