Provided by: netpbm_10.0-15ubuntu2_amd64 bug

NAME

       ppmtompeg - encodes MPEG-1 bitstreams

SYNOPSIS

       ppmtompeg [ options ] parameter-file

DESCRIPTION

       ppmtompeg  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.  This man
       page is probably incomplete.  For complete usage, see the User's Guide.

OPTIONS

       -stat stat_file : causes the encoder to append the statistics to the file  stat_file.   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).

       -quiet  num_seconds  :  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.

       -realquiet : causes the encoder to run silently, with the only screen output being errors.
              Particularly useful when reading input from stdin.

       -no_frame_summary : prevents the program from printing a summary line for each frame

       -float_dct : forces the encoder to use a more accurate, yet more computationally expensive
              version of the DCT.

       -gop gop_num : 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.

       -combine_gops : 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).

       -frames  first_frame  last_frame  :  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 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)

       -combine_frames : 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).

       -nice : causes the program to run any remote processes 'nicely.'  This is only relevant if
              the program is using parallel encoding.  (see 'man nice.')

       -max_machines num_machines : causes the program to use no more than num_machines  machines
              as slaves for use in parallel encoding.

       -snr  : 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.

       -mse : computes the mean squared error per block.  Also automatically computes the quality
              of the images when set, so there is no need to specify -snr then.

       -bit_rate_info rate_file : prints bit rate information into the file rate_file.  Bit  rate
              info is bits per frame, and also bits per I-frame-to-I-frame.

       -mv-histogram : prints histogram of motion vectors as part of statistics.  There are three
              histograms -- one for P, forward B, and backward B vectors.  Each  histogram  is  a
              2-dimensional array, and there is one entry for each vector in the search window.

PARAMETER FILE

       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).  If input files will be  coming  in  from  standard  input,  use
                     'stdin'.

              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 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 or JPEG or JMOVIE>
                     All  the input files must be converted to YUV, JPEG(v4), JMOVIE, PNM, or PPM
                     format.  This line specifies which of the three formats (actually PPM  is  a
                     subset  of  PNM).   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
                            Input conversion is not allowed with input from stdin.

                     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 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
                                   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

NOTES

       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, and
              YUV_FORMAT <ABEKAS or PHILLIPS or UCB or EYUV or pattern>.
       See the file doc/INPUT.FORMAT for more information.

       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.

       The encoder is prepared to handle up to 16 B frames between reference frames when encoding
       with input from stdin.  To increase  this  amount,  change  the  constant  B_FRAME_RUN  in
       frame.c and recompile.

PARALLEL OPERATION

       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 ppmtompeg (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 ppmtompeg.  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 minimal scheduling overhead, but is obviously wrong if
              machines have varying speeds, or if the network load makes performance uneven.

VERSION

       This is version 1.5 it contins new features and bug fixes from version 1.3.

BUGS

       Not really a bug, but at least a limitation: If  writing  to  an  output  file,  ppmtompeg
       sometimes uses <filename>.* as temporary files.

       No known bugs, but if you find any, report them to mpeg-bugs@plateau.cs.berkeley.edu.

AUTHORS

       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

       Darryl Brown - University of California, Berkeley, darryl@cs.berkeley.edu

       Eugene Hung - University of California, Berkeley, eyhung@cs.berkeley.edu

       Steve Smoot - University of California, Berkeley, smoot@cs.berkeley.edu

                                         1 February 1995                             PPMTOMPEG(1)