home *** CD-ROM | disk | FTP | other *** search
-
-
-
- MMMMPPPPEEEEGGGG____EEEENNNNCCCCOOOODDDDEEEE((((1111)))) UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV ((((11118888 OOOOccccttttoooobbbbeeeerrrr 1111999999993333)))) MMMMPPPPEEEEGGGG____EEEENNNNCCCCOOOODDDDEEEE((((1111))))
-
-
-
- NNNNAAAAMMMMEEEE
- mpeg_encode - mpeg-1 video stream encoder
-
- SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
- mmmmppppeeeegggg____eeeennnnccccooooddddeeee [ ----ssssttttaaaatttt ssssttttaaaatttt____ffffiiiilllleeee ] [ ----qqqquuuuiiiieeeetttt nnnnuuuummmm____sssseeeeccccoooonnnnddddssss ] [ ----
- nnnnoooo____ffffrrrraaaammmmeeee____ssssuuuummmmmmmmaaaarrrryyyy ] [ ----ggggoooopppp ggggoooopppp____nnnnuuuummmm ] [ ----ccccoooommmmbbbbiiiinnnneeee____ggggooooppppssss ] [ ----
- ffffrrrraaaammmmeeeessss ffffiiiirrrrsssstttt____ffffrrrraaaammmmeeee llllaaaasssstttt____ffffrrrraaaammmmeeee ] [ ----ccccoooommmmbbbbiiiinnnneeee____ffffrrrraaaammmmeeeessss ] [ ----nnnniiiicccceeee
- ] [ ----mmmmaaaaxxxx____mmmmaaaacccchhhhiiiinnnneeeessss nnnnuuuummmm____mmmmaaaacccchhhhiiiinnnneeeessss ] [ ----ssssnnnnrrrr ] ppppaaaarrrraaaammmm____ffffiiiilllleeee
-
- DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
- mmmmppppeeeegggg____eeeennnnccccooooddddeeee produces an MPEG-1 video stream. param_file is
- a parameter file which includes a list of input files and
- other parameters. The file is described in detail below.
- The -gop, -combine_gops, -frames, and -combine_frames
- options are all exclusive.
-
- OOOOPPPPTTTTIIIIOOOONNNNSSSS
- ----ssssttttaaaatttt ssssttttaaaatttt____ffffiiiilllleeee : causes the encoder to append the
- statistics to the file _s_t_a_t__f_i_l_e. In any case, the
- statistics are output to stdout. The statistics use
- the following abbreviations: bits per block (bpb),
- bits per frame (bpf), seconds per frame (spf), and bits
- per second (bps).
-
- ----qqqquuuuiiiieeeetttt nnnnuuuummmm____sssseeeeccccoooonnnnddddssss : causes the program to not report
- remaining time for at least num_seconds seconds. A
- negative values tells the program not to report at all.
- 0 is the default (reports once after each frame). Note
- that the time remaining is an estimate and does not
- take into account time to read in frames.
-
- ----nnnnoooo____ffffrrrraaaammmmeeee____ssssuuuummmmmmmmaaaarrrryyyy : prevents the program from printing a
- summary line for each frame
-
- ----ggggoooopppp ggggoooopppp____nnnnuuuummmm : causes the encoder to only encode the
- numbered GOP (first GOP is 0). The parameter file is
- the same as for normal usage. The output file will be
- the normal output file with the suffix ".gop.<gop_num>"
- No sequence info is output.
-
- ----ccccoooommmmbbbbiiiinnnneeee____ggggooooppppssss : causes the encoder to simply combine some
- GOP files into a single MPEG stream. A sequence
- header/ender are inserted. In this case, the parameter
- file need only contain the YUV_SIZE value, an output
- file, and perhaps a list of input GOP files (see
- below).
-
- ----ffffrrrraaaammmmeeeessss ffffiiiirrrrsssstttt____ffffrrrraaaammmmeeee llllaaaasssstttt____ffffrrrraaaammmmeeee : causes the encoder to only
- encode the frames from first_frame to last_frame,
- inclusive. The parameter file is the same as for
- normal usage. The output will be placed in separate
- files, one per frame, with the file names being the
-
-
-
- Page 1 (printed 11/26/93)
-
-
-
-
-
-
- MMMMPPPPEEEEGGGG____EEEENNNNCCCCOOOODDDDEEEE((((1111)))) UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV ((((11118888 OOOOccccttttoooobbbbeeeerrrr 1111999999993333)))) MMMMPPPPEEEEGGGG____EEEENNNNCCCCOOOODDDDEEEE((((1111))))
-
-
-
- normal output file with the suffix ".frame.<frame num>"
- No GOP header information is output. (Thus, the
- parameter file need not include the GOP_SIZE value)
-
- ----ccccoooommmmbbbbiiiinnnneeee____ffffrrrraaaammmmeeeessss : causes the encoder to simply combine some
- frames into a single MPEG stream. Sequence and GOP
- headers are inserted appropriately. In this case, the
- parameter file need only contain the YUV_SIZE value,
- the GOP_SIZE value, an output file, and perhaps a list
- of frame files (see below).
-
- ----nnnniiiicccceeee : causes the program to run any remote processes
- 'nicely.' This is only relevant if the program is
- using parallel encoding. (see 'man nice.')
-
- ----mmmmaaaaxxxx____mmmmaaaacccchhhhiiiinnnneeeessss nnnnuuuummmm____mmmmaaaacccchhhhiiiinnnneeeessss : causes the program to use no
- more than num_machines machines as slaves for use in
- parallel encoding.
-
- ----ssssnnnnrrrr : print the signal-to-noise ratio. Prints SNR (Y U V)
- and peak SNR (Y U V) for each frame. In summary,
- prints averages of luminance only (Y). SNR is defined
- as 10*log(variance of original/variance of error).
- Peak SNR is defined as 20*log(255/RMSE). Note that the
- encoder will run a little slower if you want it to
- print the SNR.
-
-
- PPPPAAAARRRRAAAAMMMMEEEETTTTEEEERRRR FFFFIIIILLLLEEEE
- The parameter file MUST contain the following lines (except
- when using the -combine_gops or -combine_frames options):
-
- PATTERN <pattern>
-
- OUTPUT <output file>
-
- INPUT_DIR <directory>
- all input files must reside in this directory. If
- you want to refer to the current directory, use
- '.' (an empty INPUT_DIR value would refer to the
- root directory).
-
- INPUT
- This line must be followed by a list of the input
- files (in display order) and then the line
- END_INPUT
- There are three types of lines between INPUT and
- END_INPUT. First, a line may simply be the name
- of an input file. Secondly, the line may be of
- the form
- <single_star_expr> [x-y]
- single_star_expr can have a single '*' in it. It
-
-
-
- Page 2 (printed 11/26/93)
-
-
-
-
-
-
- MMMMPPPPEEEEGGGG____EEEENNNNCCCCOOOODDDDEEEE((((1111)))) UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV ((((11118888 OOOOccccttttoooobbbbeeeerrrr 1111999999993333)))) MMMMPPPPEEEEGGGG____EEEENNNNCCCCOOOODDDDEEEE((((1111))))
-
-
-
- is replaced by all the numbers between x and y
- inclusive. So, for example, the line
- tennis*.ppm [12-15]
- is replaced by tennis12.ppm, tennis13.ppm,
- tennis14.ppm, tennis15.ppm. Uniform zero-padding
- occurs, as well. For example, the line
- football.*.ppm [001-130]
- is replaced by football.001.ppm, football.002.ppm,
- ..., football.009.ppm, football.010.ppm, ...,
- football.130.ppm. The third type of line is:
- <single_star_expr> [x-y+s]
- Where the line is treated exactly as above, except
- that we skip by s. Thus, the line
- football.*.ppm [001-130+4]
- is replaced by football.001.ppm, football.005.ppm,
- football.009.ppm, football.013.ppm, etc.
-
- BASE_FILE_FORMAT <YUV or PPM or PNM>
- All the input files must be converted to YUV, PNM
- or PPM format. This line specifies which of the
- three formats (actually PPM is a subset of PNM).
- In the YUV format, the U and V components are
- subsampled 4:1. The reason for having a separate
- PPM option is for simplicity. If your files are
- RAWBITS ppm files, then use the PPM option rather
- than the PNM. Also, depending on the system, file
- reads will go much faster with the PPM option (as
- opposed to PNM).
-
- INPUT_CONVERT <conversion command>
- You must specify how to convert a file to the base
- file format. In the conversion command, each '*'
- is replaced by the filename (the items listed
- between INPUT and END_INPUT). If no conversion is
- necessary, then you would just say:
- INPUT_CONVERT *
- If you had a bunch of gif files, you might say:
- INPUT_CONVERT giftoppm *
- If you have a bunch of separate a.Y, a.U, and a.V
- files, then you might say:
- INPUT_CONVERT cat *.Y *.U *.V
-
- GOP_SIZE <n>
- n is roughly the number of frames in a Group of
- Pictures (roughly because a GOP must begin with an
- I-frame)
-
- SLICES_PER_FRAME <n>
- n is roughly the number of slices per frame.
- Note, at least one MPEG player may complain if
- slices do not start at the left side of an image.
- To ensure this does not happen, make sure the
-
-
-
- Page 3 (printed 11/26/93)
-
-
-
-
-
-
- MMMMPPPPEEEEGGGG____EEEENNNNCCCCOOOODDDDEEEE((((1111)))) UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV ((((11118888 OOOOccccttttoooobbbbeeeerrrr 1111999999993333)))) MMMMPPPPEEEEGGGG____EEEENNNNCCCCOOOODDDDEEEE((((1111))))
-
-
-
- number of rows is divisible by SLICES_PER_FRAME.
-
- PIXEL <FULL or HALF>
- use half-pixel motion vectors, or only full-pixel
- ones
-
- RANGE <n>
- use a search range of +/- n pixels
-
- PSEARCH_ALG <algorithm>
- algorithm must be one of {EXHAUSTIVE, TWOLEVEL,
- SUBSAMPLE, LOGARITHMIC}. Tells what kind of
- search procedure should be used for P-frames.
- Exhaustive gives the best compression, but
- logarithmic is the fastest. You select the
- desired combination of speed and compression.
- TWOLEVEL is an exhaustive full-pixel search,
- followed by a local half- pixel search around the
- best full-pixel vector (the PIXEL option is
- ignored for this search algorithm).
-
- BSEARCH_ALG <algorithm>
- algorithm must be one of {SIMPLE, CROSS2,
- EXHAUSTIVE}. Tells what kind of search procedure
- should be used for B-frames. Simple means find
- best forward and backward vectors, then
- interpolate. Cross2 means find those two vectors,
- then see what backward vector best matches the
- best forward vector, and vice versa. Exhaustive
- does an n-squared search and is EXTREMELY slow in
- relation to the others (Cross2 is about twice as
- slow as Simple).
-
- IQSCALE <n>
- use n as the qscale for I-frames
-
- PQSCALE <n>
- use n as the qscale for P-frames
-
- BQSCALE <n>
- use n as the qscale for B-frames
-
- REFERENCE_FRAME <ORIGINAL or DECODED>
- If ORIGINAL is specified, then the original images
- are used when computing motion vectors. To be
- more accurate, use DECODED, in which the decoded
- images are used. This should increase the quality
- of the image, but will take a bit longer to
- encode.
- The following lines are optional:
-
- FORCE_I_ALIGN
-
-
-
- Page 4 (printed 11/26/93)
-
-
-
-
-
-
- MMMMPPPPEEEEGGGG____EEEENNNNCCCCOOOODDDDEEEE((((1111)))) UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV ((((11118888 OOOOccccttttoooobbbbeeeerrrr 1111999999993333)))) MMMMPPPPEEEEGGGG____EEEENNNNCCCCOOOODDDDEEEE((((1111))))
-
-
-
- This option is only relevant for parallel
- execution (see below). It forces each
- processor to encode a block of N frames,
- where N must be a multiple of the pattern
- length. Since the first frame in any pattern
- is an I-frame, this forces each block encoded
- by a processor to begin with an I-frame.
- foo
-
-
- NNNNOOOOTTTTEEEESSSS
- If the BASE_FILE_FORMAT is YUV, then the parameter file must
- contain:
- YUV_SIZE <w>x<h>
- where w = width, h = height (in pixels) of image
-
- If the -combine-gops option is used, then only the YUV_SIZE
- and OUTPUT values need be specified in the parameter file.
- In addition, the parameter file may specify input GOP files
- in the same manner as normal input files -- except instead
- of using INPUT_DIR, INPUT, and END_INPUT, use GOP_INPUT_DIR,
- GOP_INPUT, and GOP_END_INPUT. If no input GOP files are
- specified, then the default is to use the output file name
- with suffix ".gop.<gop_num>" starting from 0 as the input
- files.
-
- If the -combine-frames option is used, then only the
- YUV_SIZE, GOP_SIZE, and OUTPUT values need be specified in
- the parameter file. In addition, the parameter file may
- specify input frame files in the same manner as normal input
- files -- except instead of using INPUT_DIR, INPUT, and
- END_INPUT, use FRAME_INPUT_DIR, FRAME_INPUT, and
- FRAME_END_INPUT. If no input frame files are specified,
- then the default is to use the output file name with suffix
- ".frame.<frame_num>" starting from 0 as the input files.
-
- Any number of spaces and tabs may come between each option
- and value. Lines beginning with '#' are ignored. Any other
- lines are ignored except for those between INPUT and
- END_INPUT. This allows you to use the same parameter file
- for normal usage and for -combine_gops and -combine_frames.
-
- The encoder is case-sensitive so, except for file names and
- directories, everything should be in upper case.
-
- The lines may appear in any order, except the following
- exceptions. INPUT must appear before END_INPUT (also,
- GOP_INPUT before GOP_END_INPUT and FRAME_INPUT before
- FRAME_END_INPUT). All lines between INPUT and END_INPUT
- must be the frames in play order.
-
-
-
-
-
- Page 5 (printed 11/26/93)
-
-
-
-
-
-
- MMMMPPPPEEEEGGGG____EEEENNNNCCCCOOOODDDDEEEE((((1111)))) UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV ((((11118888 OOOOccccttttoooobbbbeeeerrrr 1111999999993333)))) MMMMPPPPEEEEGGGG____EEEENNNNCCCCOOOODDDDEEEE((((1111))))
-
-
-
- PPPPAAAARRRRAAAALLLLLLLLEEEELLLL OOOOPPPPEEEERRRRAAAATTTTIIIIOOOONNNN
- The encoder may be run on multiple machines at once. To do
- so, add a line "PARALLEL" in the parameter file, followed by
- a listing, one machine per line, then "END_PARALLEL". Each
- of the lines should be in one of two forms. If the machine
- has access to the file server, then the line should be:
-
- <machine> <user> <executable>
-
- The executable is normally mpeg_encode (you may need to give
- the complete path if you've built for different
- architectures). If the machine is a remote machine, then
- the line should be:
-
- REMOTE <machine> <user> <executable> <parameter file>
-
- Full paths should generally be used when describing
- executables and parameter files. This INCLUDES the
- parameter file given as an argument to the original call to
- mpeg_encode. Also, .rhosts files on the appropriate
- machines should have the appropriate information.
-
- The encoder will use the original machine for the master and
- I/O server processes, and uses the listed machines as slaves
- to do the computation.
-
- Optional lines are
-
- RSH <remote shell command>
- The encoder uses the remote shell command to start
- processes on other machines. The default command is
- 'rsh.' If your machine supports a different command,
- specify it here.
-
- PARALLEL_TEST_FRAMES <n>
- n is the number of frames to encode initially on each
- processor
-
- PARALLEL_TIME_CHUNKS <t>
- subsequently, each slave processor will be asked to
- encode for approximately t seconds. Smaller values of
- <t> increase communication, but improve load balancing.
-
- The default values for these two options are n = 3
- frames and t = 30 seconds.
-
- PARALLEL_PERFECT
- If this line is present, then scheduling is done on the
- assumption that work distribution will be perfectly
- even -- meaning that each machine is about the same
- speed. The frames will simply be divided up evenly
- between the processors. This has the advantage of very
-
-
-
- Page 6 (printed 11/26/93)
-
-
-
-
-
-
- MMMMPPPPEEEEGGGG____EEEENNNNCCCCOOOODDDDEEEE((((1111)))) UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV ((((11118888 OOOOccccttttoooobbbbeeeerrrr 1111999999993333)))) MMMMPPPPEEEEGGGG____EEEENNNNCCCCOOOODDDDEEEE((((1111))))
-
-
-
- minimal scheduling overhead, but is obviously wrong if
- machines have varying speeds, or if the network load
- makes performance uneven.
- Please note that the parallel code has not been well-tested
- and is not very fault-tolerant (if a slave process goes
- down, nothing works). Future versions of the encoder will
- support parallel execution better.
-
-
- AAAAUUUUTTTTHHHHOOOORRRRSSSS
- Kevin Gong - University of California, Berkeley,
- keving@cs.berkeley.edu
-
- Ketan Patel - University of California, Berkeley,
- kpatel@cs.berkeley.edu
-
- Dan Wallach - University of California, Berkeley,
- dwallach@cs.berkeley.edu
-
- BBBBUUUUGGGGSSSS
- No known bugs.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Page 7 (printed 11/26/93)
-
-
-
-