diff options
Diffstat (limited to 'upstream/mageia-cauldron/man1/ppmtompeg.1')
-rw-r--r-- | upstream/mageia-cauldron/man1/ppmtompeg.1 | 1213 |
1 files changed, 1213 insertions, 0 deletions
diff --git a/upstream/mageia-cauldron/man1/ppmtompeg.1 b/upstream/mageia-cauldron/man1/ppmtompeg.1 new file mode 100644 index 00000000..6f4bfc57 --- /dev/null +++ b/upstream/mageia-cauldron/man1/ppmtompeg.1 @@ -0,0 +1,1213 @@ +\ +.\" This man page was generated by the Netpbm tool 'makeman' from HTML source. +.\" Do not hand-hack it! If you have bug fixes or improvements, please find +.\" the corresponding HTML page on the Netpbm website, generate a patch +.\" against that, and send it to the Netpbm maintainer. +.TH "Ppmtompeg User Manual" 0 "23 July 2006" "netpbm documentation" + +.SH NAME +ppmtompeg - encode an MPEG-1 bitstream + +.UN synopsis +.SH SYNOPSIS + +\fBppmtompeg\fP +[\fIoptions\fP] +\fIparameter-file\fP + +.UN description +.SH DESCRIPTION +.PP +This program is part of +.BR "Netpbm" (1)\c +\&. +.PP +\fBppmtompeg\fP produces an MPEG-1 video stream. MPEG-1 is the +first great video compression method, and is what is used in Video CDs +(VCD). \fBppmtompeg\fP originated in the year 1995. DVD uses a more +advanced method, MPEG-2. There is an even newer method called MPEG-4 +which is also called Divx. I don't know where one finds that used. +.PP +There's technically a difference between a compression method for +video and an actual file (stream) format for a movie, and I don't know +if it can be validly said that the format of the stream +\fBppmtompeg\fP produces is MPEG-1. +.PP +Mencoder from the +.UR http://www.mplayerhq.hu +Mplayer package +.UE +\& is probably superior for most video format generation +needs, if for no other reason than that it is more popular. +.PP +The programming library +.UR http://pm2v.free.fr +\fBPM2V\fP +.UE +\& +generates MPEG-2 streams. +.PP +Use +.UR http://www.mplayerhq.hu +Mplayer +.UE +\& (not part of Netpbm) +to do the reverse conversion: to create a series of PNM files from an MPEG +stream. +.PP +\fIparam_file\fP is a parameter file which includes a list of +input files and other parameters. The file is described in detail +below. +.PP +To understand this program, you need to understand something about +the complex MPEG-1 format. One source of information about this +standard format is the section Introduction to MPEG in the +.UR http://www.faqs.org/faqs/compression-faq/ +Compression FAQ +.UE +\&. + +.UN options +.SH OPTIONS +.PP +The \fB-gop\fP, \fB-combine_gops\fP, \fB-frames\fP, and +\fB-combine_frames\fP options are all mutually exclusive. + + +.TP +\fB-stat stat_file\fP +This option causes \fBppmtompeg\fP to append the statistics that +it write to Standard Output to the file \fIstat_file\fP as well. The +statistics use the following abbreviations: bits per block (bpb), bits +per frame (bpf), seconds per frame (spf), and bits per second (bps). +.sp +These statistics include how many I, P, and B frames there were, +and information about compression and quality. + + +.TP +\fB-quiet\fP \fInum_seconds\fP + causes \fBppmtompeg\fP not to report remaining time more often +than every \fInum_seconds\fP seconds (unless the time estimate rises, +which will happen near the beginning of the run). A negative value +tells \fBppmtompeg\fP 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. + +.TP +\fB-realquiet\fP + causes \fBppmtompeg\fP to run silently, +with the only screen output being errors. Particularly useful when +reading input from stdin. The equivalent of the \fB-quiet\fP +common option of most other Netpbm programs. + +.TP + +\fB-no_frame_summary\fP + This option prevents \fBppmtompeg\fP from printing a summary +line for each frame + +.TP +\fB-float_dct\fP + forces \fBppmtompeg\fP to use a more accurate, yet more +computationally expensive version of the DCT. + +.TP +\fB-gop\fP \fIgop_num\fP +causes \fBppmtompeg\fP to encode only 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 \fB.gop.\fP\fIgop_num\fP. +\fBppmtompeg\fP does not output any sequence information. + +.TP +\fB-combine_gops\fP + causes \fBppmtompeg\fP simply to combine some GOP files into a +single MPEG output stream. \fBppmtompeg\fP inserts a sequence header +and trailer. In this case, the parameter file needs only to contain +the SIZE value, an output file, and perhaps a list of input GOP +files (see below). + +If you don't supply a list of input GOP files is used, then +\fBppmtompeg\fP assumes you're using the same parameter file you used +when you created the input (with the \fB-gop\fP option) and +calculates the corresponding gop filenames itself. If this is not the +case, you can 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 \fB.gop.\fP\fIgop_num\fP, with \fIgop_num\fP +starting from 0, as the input files. +.sp +Thus, unless you're mixing and matching GOP files from different +sources, you can simply use the same parameter file for creating the +GOP files (\fB-gop\fP) and for later turning them into an MPEG stream +(\fB-combine_gops\fP). + + +.TP +\fB-frames \fIfirst_frame\fP \fIlast_frame\fP\fP +This option causes \fBppmtompeg\fP to encode only the frames numbered +\fIfirst_frame\fP to \fIlast_frame\fP, 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 name with the suffix \fB.frame.\fP\fIframe_num\fP. No +GOP header information is output. (Thus, the parameter file need not +include the GOP_SIZE value) +.sp +Use \fBppmtompeg -combine_frames\fP to combine these frames later into +an MPEG stream. + + +.TP +\fB-combine_frames\fP + This option causes \fBppmtompeg\fP simply to combine some +individual MPEG frames (such as you might have created with an earlier +run of \fBppmtompeg -frames\fP) into a single MPEG stream. Sequence +and GOP headers are inserted appropriately. In this case, the +parameter file needs to contain only the SIZE value, the GOP_SIZE +value, an output file, and perhaps a list of frame files (see below). +.sp +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 \fB.frame.\fP\fIframe_num\fP, with +\fIframe_num\fP starting from 0, as the input files. + + + +.TP +\fB-nice\fP +This option causes \fBppmtompeg\fP to run any remote processes +"nicely," i.e. at low priority. (This is relevant only if you are +running \fBppmtompeg\fP in parallel mode. Otherwise, there are no +remote processes). See 'man nice.' + +.TP +\fB-max_machines \fInum_machines\fP\fP +This option causes \fBppmtompeg\fP to use no more than +\fInum_machines\fP machines as slaves for use in parallel encoding. + +.TP +\fB-snr\fP +This option causes \fBppmtompeg\fP to include the signal-to-noise +ratio in the reported statistics. 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 +\fBppmtompeg\fP runs a little slower when you use this option. + +.TP +\fB-mse\fP +This option causes \fBppmtompeg\fP to report the mean squared +error per block. It also automatically reports the quality of the +images, so there is no need to specify \fB-snr\fP then. + +.TP +\fB-bit_rate_info\fP \fIrate_file\fP + This option makes \fBppmtompeg\fP write bit rate information +into the file \fIrate_file\fP. Bit rate information is bits per frame, and +also bits per I-frame-to-I-frame. + +.TP +\fB-mv_histogram\fP + This option causes \fBppmtompeg\fP to print a histogram of the +motion vectors as part of statistics. There are three histograms -- +one for P frame, one for forward B frame, and one for backward B frame +motion vectors. +.sp +The output is in the form of a matrix, each entry corresponding to one +motion vector in the search window. The center of the matrix +represents (0,0) motion vectors. + +.TP +\fB-debug_sockets\fP +This option causes \fBppmtompeg\fP to print to Standard Output +messages that narrate the communication between the machines when you run +\fBppmtompeg\fP in +.UR #parallel +parallel mode +.UE +\&. + +.TP +\fB-debug_machines\fP +This option causes \fBppmtompeg\fP to print to Standard Output +messages that narrate the progress of the conversion on the various +machines when you run \fBppmtompeg\fP in +.UR #parallel +parallel mode +.UE +\&. + + + +.UN parmfile +.SH PARAMETER FILE +.PP +The parameter file \fBmust\fP contain the following +lines (except when using the \fB-combine_gops\fP or \fB-combine_frames\fP +options): + + + +.TP +\fBPATTERN\fP \fIpattern\fP +This statement specifies the pattern (sequence) of I frames, P frames, +and B frames. \fIpattern\fP is just a sequence of the letters I, P, and +B with nothing between. Example: + +.nf + PATTERN IBBPBBPBBPBBPBB +</pre> +.sp +See +.UR #ipb +I Frames, P Frames, B Frames +.UE +\&. + +.TP +\fBOUTPUT\fP \fIoutput file\fP +This names the file where the output MPEG stream goes. + +.TP +\fBINPUT_DIR\fP \fIdirectory\fP +This statement tells where the input images (frames) come from. +If each frame is in a separate file, \fIdirectory\fP is the directory +where they all are. You may use \fB.\fP to refer to the current +directory. A null \fIdirectory\fP refers to the root directory of the +system file tree. +.sp +To have \fBppmtompeg\fP read all the frames serially from Standard +Input, specify +.nf + INPUT_DIR stdin + +.fi + +.TP +\fBINPUT\fP +This line must be followed by a list of the input files (in display order) +and then the line \fBEND_INPUT\fP. +.sp +There are three types of lines between INPUT and END_INPUT. First, +a line may simply be the name of an input file. Second, the line +may be of the form \fIsingle_star_expr\fP +\fB[\fP\fIx\fP\fB-\fP\fIy\fP\fB]\fP. +\fIsingle_star_expr\fP can have a single \fB*\fP in it. It is +replaced by all the numbers between x and y inclusive. So, for +example, the line \fBtennis*.ppm [12-15]\fP refers to the files +tennis12.ppm, tennis13.ppm, tennis14.ppm, tennis15.ppm. +.sp +Uniform zero-padding occurs, as well. For example, the line +\fBfootball.*.ppm [001-130]\fP refers to the files football.001.ppm, +football.002.ppm, ..., football.009.ppm, football.010.ppm, ..., +football.130.ppm. +.sp +The third type of line is: \fIsingle_star_expr\fP +\fB[\fP\fIx\fP\fB-\fP\fIy\fP\fB+\fP\fIs\fP\fB]\fP, where the +line is treated exactly as above, except that we skip by \fIs\fP. Thus, the +line \fBfootball.*.ppm [001-130+4]\fP refers to the files +football.001.ppm, football.005.ppm, football.009.ppm, +football.013.ppm, etc. +.sp +Furthermore, a line may specify a shell command to execute to +generate lines to be interpreted as described above, as if those lines +were in the parameter file instead. Use back ticks, like in the +Bourne Shell, like this: + +.nf + `cat myfilelist` + +.fi +.sp +If input is from Standard Input (per the \fBINPUT_DIR\fP statement), +\fBppmtompeg\fP ignores the \fBINPUT\fP/\fBEND_INPUT\fP block, but +it still must be present. + +.TP +\fBBASE_FILE_FORMAT\fP {\fBPPM\fP | \fBPNM\fP | \fBYUV\fP | + \fBJPEG\fP | \fBJMOVIE\fP} +\fBppmtompeg\fP must convert all input files to one of the +following formats as a first step of processing: PNM, YUV, JPEG(v4), +or JMOVIE. (The conversion may be trivial if your input files are +already in one of these formats). This line specifies which of the +four formats. PPM is actually a subset of PNM. The separate +specification is allowed for backward compatibility. Use PNM instead +of PPM in new applications. + +.TP +\fBINPUT_CONVERT\fP \fIconversion_command\fP +You must specify how to convert a file to the base file format. +If no conversion is necessary, then you would just say: + +.nf + INPUT_CONVERT * + +.fi +.sp +Otherwise, \fIconversion_command\fP is a shell command that causes +an image in the format your specified with \fBBASE_FILE_FORMAT\fP to +be written to Standard Output. \fBppmtompeg\fP executes the command +once for each line between \fBINPUT\fP and \fBEND_INPUT\fP (which is +normally, but not necessarily, a file name). In the conversion +command, \fBppmtompeg\fP replaces each '*' with the contents of that +line. + + If you had a bunch of gif files, you might say: +.nf + INPUT_CONVERT giftopnm * + +.fi + + If you have a bunch of separate a.Y, a.U, and a.V files (where + the U and V have already been subsampled), then you might say: + +.nf + INPUT_CONVERT cat *.Y *.U *.V + +.fi +.sp +Input conversion is not allowed with input from stdin, so use + +.nf + INPUT_CONVERT * + +.fi + +as described above. + +.TP +\fBSIZE\fP \fIwidth\fP\fBx\fP\fIheight\fP +.sp +\fIwidth\fP and \fIheight\fP are the width and height of each +frame in pixels. +.sp +When \fBppmtompeg\fP can get this information from the input image +files, it ignores the \fBSIZE\fP parameter and you may omit it. +.sp +When the image files are in YUV format, the files don't contain +dimension information, so \fBSIZE\fP is required. +.sp +When \fBppmtompeg\fP is running in parallel mode, not all of the +processes in the network have access to the image files, so +\fBSIZE\fP is required and must give the same dimensions as the +input image files. + +.TP +\fBYUV_SIZE\fP \fIwidth\fP\fBx\fP\fIheight\fP +This is an obsolete synonym of \fBSIZE\fP. + +.TP +\fBYUV_FORMAT\fP {\fBABEKAS\fP | \fBPHILLIPS\fP | \fBUCB\fP | + \fBEYUV\fP | \fIpattern\fP} +This is meaningful only when \fBBASE_FILE_FORMAT\fP specifies +YUV format, and then it is required. It specifies the sub-format of +the YUV class. + + +.TP +\fBGOP_SIZE\fP \fIn\fP +\fIn\fP is the number of frames in a Group of Pictures. Except that +because a GOP must start with an I frame, \fBppmtompeg\fP makes a GOP as +much longer than \fIn\fP as it has to to make the next GOP start with an +I frame. +.sp +Normally, it makes sense to make your GOP size a multiple of your +pattern length (the latter is determined by the PATTERN parameter file +statement). +.sp +See +.UR #gop +Group Of Pictures +.UE +\&. + +.TP +\fBSLICES_PER_FRAME\fP \fIn\fP +\fIn\fP 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. + +.TP +\fBPIXEL\fP {\fBFULL\fP | \fBHALF\fP} +use half-pixel motion vectors, or just full-pixel ones It is +usually important that you use half-pixel motion vectors, because it +results in both better quality and better compression. + + +.TP +\fBRANGE\fP \fIn\fP +Use a search range of \fIn\fP pixels in each of the four directions +from a subject pixel. (So the search window is a square \fIn\fP*2 pixels +on a side). + +.TP +\fBPSEARCH_ALG\fP {\fBEXHAUSTIVE\fP | \fBTWOLEVEL\fP | + \fBSUBSAMPLE\fP | \fBLOGARITHMIC\fP} +This statement tells \fBppmtompeg\fP what kind of search + technique (algorithm) to use for P frames. You select the desired + combination of speed and compression. \fBEXHAUSTIVE\fP gives the + best compression, but \fBLOGARITHMIC\fP is the fastest. + \fBTWOLEVEL\fP 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 technique). + +.TP +\fBBSEARCH_ALG\fP {\fBSIMPLE\fP | \fBCROSS2\fP | \fBEXHAUSTIVE\fP} +This statement tells \fBppmtompeg\fP what kind of search + technique (algorithm) to use for B frames. \fBSIMPLE\fP means + find best forward and backward vectors, then interpolate. + \fBCROSS2\fP means find those two vectors, then see what backward + vector best matches the best forward vector, and vice versa. + \fBEXHAUSTIVE\fP does an n-squared search and is + \fIextremely\fP slow in relation to the others (\fBCROSS2\fP + is about half as fast as \fBSIMPLE\fP). + +.TP +\fBIQSCALE\fP \fIn\fP +Use \fIn\fP as the qscale for I frames. + See +.UR #qscale +Qscale +.UE +\&. + +.TP +\fBPQSCALE\fP \fIn\fP +Use \fIn\fP as the qscale for P frames. + See +.UR #qscale +Qscale +.UE +\&. + +.TP +\fBBQSCALE\fP \fIn\fP +Use \fIn\fP as the qscale for B frames. + See +.UR #qscale +Qscale +.UE +\&. + +.TP +\fBREFERENCE_FRAME\fP {\fBORIGINAL\fP | \fBDECODED\fP} +This +statement determines whether \fBppmtompeg\fP uses the original images +or the decoded images when computing motion vectors. Using decoded +images is more accurate and should increase the playback quality of +the output, but it makes the encoding take longer and seems to give +worse compression. It also causes some complications with parallel +encoding. (see the section on parallel encoding). One thing you can +do as a trade-off is select \fBORIGINAL\fP here, and lower the +qscale (see \fBQSCALE\fP if the quality is not good enough. + +.B Original or Decoded? (Normalized) +.TS +r c c c c c. +_ +Reference Compression Speed Quality I Quality P Quality B +Decoded 1000 1000 1000 969 919 +Original 885 1373 1000 912 884 +.TE + + + + + +.PP +The following lines are optional: + + + +.TP +\fBFORCE_ENCODE_LAST_FRAME\fP +This statement is obsolete. It does nothing. +.sp +Before Netpbm 10.26 (January 2005), \fBppmtompeg\fP would drop +trailing B frames from your movie, since a movie can't end with a B +frame. (See +.UR #ipb +I Frames, P Frames, B Frames +.UE +\&.) +You would have to specify \fBFORCE_ENCODE_LAST_FRAME\fP to stop +that from happening and get the same function that \fBppmtompeg\fP +has today. + + +.TP +\fBNIQTABLE\fP +This statement specifies a custom non-intra quantization table. +If you don't specify this statement, \fBppmtompeg\fP uses a default +non-intra quantization table. +.sp +The 8 lines immediately following \fBNIQTABLE\fP specify the quantization +table. Each line defines a table row and consists of 8 integers, +whitespace-delimited, which define the table columns. + +.TP +\fBIQTABLE\fP +This is analogous to NIQTABLE, but for the intra quantization table. + +.TP +\fBASPECT_RATIO\fP \fIratio\fP +This statement specifies the aspect ratio for \fBppmtompeg\fP to +specify in the MPEG output. I'm not sure what this is used for. +.sp +\fIratio\fP must be 1.0, 0.6735, 0.7031, 0.7615, 0.8055, 0.8437, +0.8935, 0.9157, 0.9815, 1.0255, 1.0695, 1.0950, 1.1575, or 1.2015. + +.TP +\fBFRAME_RATE\fP \fIrate\fP +This specifies the frame rate for \fBppmtompeg\fP to specify in the +MPEG output. Some players use this value to determine the playback rate. +.sp +\fIrate\fP must be 23.976, 24, 25, 29.97, 30, 50, 59.94, or 60. + +.TP +\fBBIT_RATE\fP \fIrate\fP +This specifies the bit rate for Constant Bit Rate (CBR) encoding. +.sp +\fIrate\fP must be an integer. + +.TP +\fBBUFFER_SIZE\fP \fIsize\fP +This specifies the value +\fBppmtompeg\fP is to specify in the MPEG output for the Video +Buffering Verifier (VBV) buffer size needed to decode the sequence. +.sp +A Video Verifying Buffer is a buffer in which a decoder keeps the +decoded bits in order to match the uneven speed of the decoding with +the required constant playback speed. +.sp +As \fBppmtompeg\fP encodes the image, it simulates the decoding +process in terms of how many bits would be in the VBV as each frame gets +decoded, assuming a VBV of the size you indicate. +.sp +If you specify the \fBWARN_VBV_UNDERFLOW\fP statement, +\fBppmtompeg\fP issues a warning each time the simulation underflows +the buffer, which suggests that an underflow would occur on playback, +which suggests the buffer is too small. +.sp +If you specify the \fBWARN_VBV_OVERFLOW\fP statement, +\fBppmtompeg\fP issues a warning each time the simulation overflows +the buffer, which suggests that an overflow would occur on playback, +which suggests the buffer is too small. + +.TP +\fBWARN_VBV_UNDERFLOW\fP +.TP +\fBWARN_VBV_OVERFLOW\fP +See \fBBUFFER_SIZE\fP. +.sp +These options were new in Netpbm 10.26 (January 2005). Before that, +\fBppmtompeg\fP issued the warnings always. + + + + +The following statements apply only to parallel operation: + + + +.TP +\fBPARALLEL\fP +This statement, paired with \fBEND PARALLEL\fP, is what causes +\fBppmtompeg\fP to operate in parallel mode. See +.UR #parallel +Parallel Operation +.UE +\&. + +.TP +\fBEND PARALLEL\fP +This goes with \fBPARALLEL\fP. + +.TP +\fBPARALLEL_TEST_FRAMES\fP \fIn\fP +The master starts off by measuring each slave's speed. It does +this by giving each slave \fIn\fP frames to encode and noting how +long the slave takes to finish. These are not just test frames, +though -- they're real frames and the results become part of the +output. +\fBppmtompeg\fP is old and measures time in undivided seconds, so +to get useful timings, specify enough frames that it will take at +least 5 seconds to process them. The default is 10. +.sp +If you specify \fBFORCE_I_ALIGN\fP, \fBppmtompeg\fP will increase +the test frames value enough to maintain the alignment. +.sp +If there aren't enough frames for every slave to have the indicated +number of test frames, \fBppmtompeg\fP will give some slaves fewer. + + +.TP +\fBPARALLEL_TIME_CHUNKS\fP \fIt\fP +When you specify this statement, the master attempts to feed work +to the slaves in chunks that take \fIt\fP seconds to process. It uses +the speed measurement it made when it started up (see PARALLEL_TEST_FRAMES) +to decide how many frames to put in the chunk. This statement obviously +doesn't affect the first batch of work sent to each slave, which is the +one used to measure the slave's speed. +.sp +Smaller values of \fIt\fP increase communication, but improve load +balancing. The default is 30 seconds. +.sp +You may specify only one of PARALLEL_TIME_CHUNKS, PARALLEL_CHUNK_TAPER, +and PARALLEL_PERFECT. PARALLEL_CHUNK_TAPER is usually best. + +.TP +\fBPARALLEL_CHUNK_TAPER\fP +When you specify this statement, the master distributes work like +with PARALLEL_TIME_CHUNKS, except that the master chooses the number +of seconds for the chunks. It starts with a large number and, as it +gets closer to finishing the job, reduces it. That way, it reduces +scheduling overhead when precise scheduling isn't helpful, but still +prevents a slave from finishing early after all the work has already +been handed out to the other slaves, and then sitting idle while +there's still work to do. +.sp +You may specify only one of PARALLEL_TIME_CHUNKS, PARALLEL_CHUNK_TAPER, +and PARALLEL_PERFECT. PARALLEL_CHUNK_TAPER is usually best. + + +.TP +\fBPARALLEL_PERFECT\fP +If this statement is present, \fBppmtompeg\fP schedules on the +assumption that each machine is about the same speed. The master will +simply divide up the frames evenly between the slaves -- each +slave gets the same number of frames. If some slaves are faster than +others, they will finish first and remain idle while the slower slaves +continue. +.sp +This has the advantage of minimal scheduling overhead. Where slaves +have different speeds, though, it makes inefficient use of the fast +ones. Where slaves are the same speed, it also has the disadvantage +that they all finish at the same time and feed their output to the +single Combine Server in a burst, which makes less efficient use of +the Combine Server and thus can increase the total elapsed time. +.sp +You may specify only one of PARALLEL_TIME_CHUNKS, PARALLEL_CHUNK_TAPER, +and PARALLEL_PERFECT. PARALLEL_CHUNK_TAPER is usually best. + +.TP +\fBRSH\fP \fIremote_shell_command\fP +\fBppmtompeg\fP executes the shell command +\fIremote_shell_command\fP to start a process on another machine. +The default command is \fBrsh\fP, and whatever command you specify +must have compatible semantics. \fBssh\fP is usually compatible. +The command \fBppmtompeg\fP uses is one like this: +\fBssh remote.host.com -l username shellcommand\fP. +.sp +Be sure to set up \fB.rhosts\fP files or SSH key authorizations +where needed. Otherwise, you'll have to type in passwords. +.sp +On some HP machines, \fBrsh\fP is the restricted shell, and you want +to specify \fBremsh\fP. + +.TP +\fBFORCE_I_ALIGN\fP +This statement forces each slave to encode a chunk of frames which +is a multiple of the pattern length (see \fBPATTERN\fP). Since the +first frame in any pattern is an I frame, this forces each chunk +encoded by a slave to begin with an I frame. +.sp +This document used to say there was an argument to +\fBFORCE_I_ALIGN\fP which was the number of frames \fBppmtompeg\fP +would use (and was required to be a multiple of the pattern length). +But \fBppmtompeg\fP has apparently always ignored that argument, and +it does now. + +.TP +\fBKEEP_TEMP_FILES\fP +This statement causes \fBppmtompeg\fP not to delete the temporary +files it uses to transmit encoded frames to the combine server. This +means you will be left with a file for each frame, the same as you +would get with the \fB-frames\fP option. +.sp +This is mostly useful for debugging. +.sp +This works only if you're using a shared filesystem to communicate +between the servers. +.sp +This option was new in Netpbm 10.26 (January 2005). + + + + +.UN parameterfile +.SS Parameter File Notes +.PP + If you use the \fB-combine_gops\fP option, then you need to specify +only the SIZE and OUTPUT values 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 you specify no input GOP files, then \fBppmtompeg\fP uses by default the +output file name with suffix \fB.gop.\fP\fIgop_num\fP, with \fIgop_num\fP +starting from 0, as the input files. +.PP +If you use the \fB-combine_frames\fP option, then you need to +specify only the SIZE, GOP_SIZE, and OUTPUT values 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 +\fB.frame.\fP\fIframe_num\fP, with \fIframe_num\fP starting from 0, +as the input files. +.PP +Any number of spaces and tabs may come between each option and value. Lines +beginning with \fB#\fP 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 \fB-combine_gops\fP and +\fB-combine_frames\fP. +.PP +The file format is case-sensitive so all keywords should be in +upper case. +.PP +The statements may appear in any order, except that the order within +a block statement (such as INPUT ... END INPUT) is significant. +.PP +\fBppmtompeg\fP is prepared to handle up to 16 B frames between +reference frames when encoding with input from stdin. (To build a +modified \fBppmtompeg\fP with a higher limit, change the constant +B_FRAME_RUN in frame.c and recompile). + +.UN general +.SH GENERAL USAGE INFORMATION + +.UN qscale +.SS Qscale +.PP +The quantization scale values (qscale) give a trade-off between +quality and compression. Using different Qscale values has very little +effect on speed. The qscale values can be set separately for I, P, and +B frames. +.PP +You select the qscale values with the \fBIQSCALE\fP, +\fBPQSCALE\fP, and \fBBSCALE\fP parameter file statements. +.PP +A qscale value is an integer from 1 to 31. Larger numbers give +better compression, but worse quality. In the following, the quality +numbers are peak signal-to-noise ratio, defined as: +.B signal-to-noise formula +.IMG -C ppmtompeg-snr.gif +where MSE is the mean squared error. + +.PP +Flower garden tests: + +.B Qscale vs Quality +.TS +r r r r. +_ +Qscale I Frames P Frames B Frames +1 43.2 46.3 46.5 +6 32.6 34.6 34.3 +11 28.6 29.5 30.0 +16 26.3 26.8 28.6 +21 24.7 25.0 27.9 +26 23.5 23.9 27.5 +31 22.6 23.0 27.3 +.TE + +.B Qscale vs Compression +.TS +r r r r. +_ +Qscale I Frames P Frames B Frames +1 2 2 2 +6 7 10 15 +11 11 18 43 +16 15 29 97 +21 19 41 173 +26 24 56 256 +31 28 73 330 +.TE + + +.UN searchtech +.SS Search Techniques + +.PP +There are several different motion vector search techniques +available. There are different techniques available for P frame +search and B frame search. Using different search techniques present +little difference in quality, but a large difference in compression +and speed. + +.PP +There are 4 types of P frame search: Exhaustive, TwoLevel, +SubSample, and Logarithmic. + +.PP +There are 3 types of B frame search: Exhaustive, Cross2, and +Simple. + +The recommended search techniques are TwoLevel and Logarithmic for +P frame search, and Cross2 and Simple for B frame search. Here are +some numbers comparing the different search methods: + +.B P frame Motion Vector Search (Normalized) +.TS +r c c c. +_ +Technique T{ +Compression +.UR #smallbetter +\u1\d +.UE +T} T{ +Speed +.UR #largefaster +\u2\d +.UE +T} T{ +Quality +.UR #largebetter +\u3\d +.UE +T} +Exhaustive 1000 1000 1000 +SubSample 1008 2456 1000 +TwoLevel 1009 3237 1000 +Logarithmic 1085 8229 998 +.TE + +.B B frame Motion Vector Search (Normalized) +.TS +r c c c. +_ +Technique T{ +Compression +.UR #smallbetter +\u1\d +.UE +T} T{ +Speed +.UR #largefaster +\u2\d +.UE +T} T{ +Quality +.UR #largebetter +\u3\d +.UE +T} +Exhaustive 1000 1000 1000 +Cross2 975 1000 996 +Simple 938 1765 991 +.TE + +.UN smallbetter +\u1\dSmaller numbers are better +compression. + +.UN largefaster +\u2\dLarger numbers mean faster +execution. + +.UN largebetter +\u3\dLarger numbers mean better quality. +.PP +For some reason, Simple seems to give better compression, but it +depends on the image sequence. +.PP +Select the search techniques with the \fBPSEARCH_ALG\fP and +\fBBSEARCH_ALG\fP parameter file statements. + + +.UN gop +.SS Group Of Pictures (GOP) +.PP +A Group of Pictures (GOP) is a roughly independently decodable +sequence of frames. An MPEG video stream is made of one or more +GOP's. You may specify how many frames should be in each GOP with the +\fBGOP_SIZE\fP parameter file statement. A GOP always starts with an +I frame. +.PP +Instead of encoding an entire sequence, you can encode a single +GOP. To do this, use the \fB-gop\fP command option. You can later +join the resulting GOP files at any time by running \fBppmtompeg\fP +with the \fB-combine_gops\fP command option. + + +.UN slices +.SS Slices +.PP +A slice is an independently decodable unit in a frame. It can be +as small as one macroblock, or it can be as big as the entire frame. +Barring transmission error, adding slices does not change quality or +speed; the only effect is slightly worse compression. More slices are +used for noisy transmission so that errors are more recoverable. Since +usually errors are not such a problem, we usually just use one slice +per frame. + +.PP +Control the slice size with the \fBSLICES_PER_FRAME\fP parameter +file statement. +.PP +Some MPEG playback systems require that each slice consist of whole +rows of macroblocks. If you are encoding for this kind of player, if +the height of the image is H pixels, then you should set the +SLICES_PER_FRAME to some number which divides H/16. For example, if +the image is 240 pixels (15 macroblocks) high, then you should use +only 15, 5, 3, or 1 slices per frame. + +.PP +Note: these MPEG playback systems are really wrong, since the MPEG +standard says this doesn't have to be so. + + + +.UN searchwindow +.SS Search Window + +.PP +The search window is the window in which \fBppmtompeg\fP searches +for motion vectors. The window is a square. You can specify the size +of the square, and whether to allow half-pixel motion vectors or not, +with the \fBRANGE\fP and \fBPIXEL\fP parameter file statements. + +.UN ipb +.SS I Frames, P Frames, B Frames +.PP +In MPEG-1, a movie is represented as a sequence of MPEG frames, +each of which is an I Frame, a P Frame, or a B Frame. Each represents +an actual frame of the movie (don't get confused by the dual use of +the word "frame." A movie frame is a graphical image. An MPEG frame +is a set of data that describes a movie frame). +.PP +An I frame ("intra" frame) describes a movie frame in isolation -- +without respect to any other frame in the movie. A P frame +("predictive" frame) describes a movie frame by describing how it +differs from the movie frame described by the latest preceding I or +P frame. A B frame ("bidirectional" frame) describes a movie frame by +describing how it differs from the movie frames described by the +nearest I or P frame before \fIand\fP after it. +.PP +Note that the first frame of a movie must be described by an I +frame (because there is no previous movie frame) and the last movie +frame must be described by an I or P frame (because there is no +subsequent movie frame). +.PP +Beyond that, you can choose which frames are represented by which +types. You specify a pattern, such as IBPBP and \fBppmtompeg\fP +simply repeats it over and over throughout the movie. The pattern +affects speed, quality, and stream size. Here is a chart which shows +some of the trade-offs: + +.B Comparison of I/P/B Frames (Normalized) +.TS +r c c c. +_ +Frame Type Size Speed Quality +I frames 1000 1000 1000 +P frames 409 609 969 +B frames 72 260 919 +.TE + +(this is with constant qscale) + +.PP +A standard sequence is IBBPBBPBBPBBPBB. + +.PP +Select the sequence with the \fBPATTERN\fP parameter file statement. +.PP +Since the last MPEG frame cannot be a B frame (see above), if the +pattern you specify indicates a B frame for the last movie frame of +the movie, \fBppmtompeg\fP makes it an I frame instead. +.PP +Before Netpbm 10.26 (January 2005), \fBppmtompeg\fP instead drops +the trailing B frames by default, and you need the +\fBFORCE_ENCODE_LAST_FRAME\fP parameter file statement to make it do +this. +.PP +The MPEG frames don't appear in the MPEG-1 stream in the same order that +the corresponding movie frames appear in the movie -- the B frames come after +the I and P frames on which they are based. For example, if the movie is +4 frames that you will represent with the pattern IBBP, the MPEG-1 stream +will start with an I frame describing movie frame 0. The next frame in +the MPEG-1 stream is a P frame describing movie frame 3. The last two +frames in the MPEG-1 stream are B frames describing movie frames 1 and 2, +respectively. + + +.UN iofiles +.SS Specifying Input and Output Files +.PP +Specify the input frame images with the \fBINPUT_DIR\fP, +\fBINPUT\fP, \fBEND_INPUT\fP, \fBBASE_FILE_FORMAT\fP, +\fBSIZE\fP, \fBYUV_FORMAT\fP and \fBINPUT_CONVERT\fP parameter +file statements. +.PP +Specify the output file with the \fBOUTPUT\fP parameter file statement. + + +.UN statistics +.SS Statistics +.PP +\fBppmtompeg\fP can generate a variety of statistics about the +encoding. See the \fB-stat\fP, \fB-snr\fP, \fB-mv_histogram\fP, +\fB-quiet\fP, \fB-no_frame_summary\fP, and \fB-bit_rate_info\fP +options. + + +.UN parallel +.SH PARALLEL OPERATION +.PP +You can run \fBppmtompeg\fP on multiple machines at once, encoding +the same MPEG stream. When you do, the machines are used as shown in +the following diagram. We call this "parallel mode." +.PP +.B ppmtompeg-par.gif +.IMG -C ppmtompeg-par.gif +.PP +To do parallel processing, put the statement + +.nf + PARALLEL + +.fi + +in the parameter file, followed by a listing of the machines, one +machine per line, then + +.nf + END_PARALLEL + +.fi + +Each of the machine lines must be in one of two forms. If the machine +has filesystem access to the input files, then the line is: +.PP +\fImachine\fP \fIuser\fP \fIexecutable\fP +.PP +The executable is normally \fBppmtompeg\fP (you may need to give +the complete path if you've built for different architectures). If +the machine does not have filesystem access to the input files, the line +is: +.PP +\fBREMOTE\fP \fImachine\fP \fIuser\fP \fIexecutable\fP +\fIparameter file\fP +.PP +The \fB-max_machines\fP command option limits the number of +machines \fBppmtompeg\fP will use. If you specify more machines in +the parameter file than \fB-max_machines\fP allows, \fBppmtompeg\fP +uses only the machines listed first. This is handy if you want to +experiment with different amounts of parallelism. +.PP +In general, you should use full path file names when describing +executables and parameter files. This \fIincludes\fP the parameter +file argument on the original invocation of \fBppmtompeg\fP. +.PP +All file names must be the same on all systems (so if e.g. you're +using an NFS filesystem, you must make sure it is mounted at the same +mountpoint on all systems). +.PP +Because not all of the processes involved in parallel operation +have easy access to the input files, you must specify the \fBSIZE\fP +parameter file statement when you do parallel operation. +.PP +The machine on which you originally invoke \fBppmtompeg\fP is the +master machine. It hosts a "combine server,", a +"decode server," and a number of "i/o servers," +all as separate processes. The other machines in the network (listed +in the parameter file) are slave machines. Each hosts a single +process that continuously requests work from the master and does it. +The slave process does the computation to encode MPEG frames. It +processes frames in batches identified by the master. +.PP +The master uses a remote shell command to start a process on a +slave machine. By default, it uses an \fBrsh\fP shell command to do +this. But use the \fBRSH\fP parameter file statement to control +this. The shell command the master executes remotely is +\fBppmtompeg\fP, but with options to indicate that it is to perform +slave functions. +.PP +The various machines talk to each other over TCP connections. Each +machine finds and binds to a free TCP port number and tells its +partners the port number. These port numbers are at least 2048. +.PP +Use the PARALLEL_TEST_FRAMES, PARALLEL_TIME_CHUNKS, and +PARALLEL_PERFECT parameter file statements to control the way the +master divides up work among the slaves. +.PP +Use the \fB-nice\fP command option to cause all slave processes to run +"nicely," i.e. as low priority processes. That way, this substantial and +long-running CPU load will have minimal impact on other, possibly +interactive, users of the systems. + +.UN speed +.SH SPEED +.PP +Here is a look at \fBppmtompeg\fP speed, in single-node (not parallel) +operation: + +.B Compression Speed +.TS +r c. +_ +Machine Type Macroblocks per second\u1\d +HP 9000/755 280 +DEC 3000/400 247 +HP 9000/750 191 +Sparc 10 104 +DEC 5000 68 +.TE +\u1\dA macroblock is a 16x16 pixel square +.PP +The measurements in the table are with inputs and outputs via a +conventional locally attached filesystem. If you are using a network +filesystem over a single 10 MB/s Ethernet, that constrains your speed more +than your CPU speed. In that case, don't expect to get better than 4 +or 5 frames per second no matter how fast your CPUs are. +.PP +Network speed is even more of a bottleneck when the slaves do not +have filesystem access to the input files -- i.e. you declare them +REMOTE. +.PP +Where I/O is the bottleneck, size of the input frames can make a big +difference. So YUV input is better than PPM, and JPEG is better than +both. +.PP +When you're first trying to get parallel mode working, be sure to +use the \fB-debug_machines\fP option so you can see what's going on. +Also, \fB-debug_sockets\fP can help you diagnose communication +problems. + + +.UN authors +.SH AUTHORS + + + +.IP \(bu +Kevin Gong - University of California, Berkeley, \fIkeving@cs.berkeley.edu\fP + +.IP \(bu +Ketan Patel - University of California, Berkeley, \fIkpatel@cs.berkeley.edu\fP + +.IP \(bu +Dan Wallach - University of California, Berkeley, \fIdwallach@cs.berkeley.edu\fP + +.IP \(bu +Darryl Brown - University of California, Berkeley, \fIdarryl@cs.berkeley.edu\fP + +.IP \(bu +Eugene Hung - University of California, Berkeley, \fIeyhung@cs.berkeley.edu\fP + +.IP \(bu +Steve Smoot - University of California, Berkeley, \fIsmoot@cs.berkeley.edu\fP +.SH DOCUMENT SOURCE +This manual page was generated by the Netpbm tool 'makeman' from HTML +source. The master documentation is at +.IP +.B http://netpbm.sourceforge.net/doc/ppmtompeg.html +.PP
\ No newline at end of file |