/* aspect ratios *///像素幅值比:表示屏幕上一个像素点的宽度和高度的比值
//Pixel Aspect Ratio
#define XVID_PAR_11_VGA 1 /* 1:1 vga (square), default if supplied PAR is not a valid value */
#define XVID_PAR_43_PAL 2 /* 4:3 pal (12:11 625-line) */
#define XVID_PAR_43_NTSC 3 /* 4:3 ntsc (10:11 525-line) */
#define XVID_PAR_169_PAL 4 /* 16:9 pal (16:11 625-line) */
#define XVID_PAR_169_NTSC 5 /* 16:9 ntsc (40:33 525-line) */
#define XVID_PAR_EXT 15 /* extended par; use par_width, par_height */
//视频应用中常见的像素幅值比有两种:4:3,16:9,后者更具有剧场效果。
/*
PAL和NTSC是两种电视标准,这两种电视标准是隔行扫描时代的产物
PAL规定的场率是50场/秒(25帧/秒)扫描线行数是525行
NTSC规定的场率是60场/秒(30帧/秒)扫描线行数是625行
*/
/* frame type flags 帧类型*/
#define XVID_TYPE_VOL -1 /* decoder only: vol was decoded */
#define XVID_TYPE_NOTHING 0 /* decoder only (encoder stats): nothing was decoded/encoded */
#define XVID_TYPE_AUTO 0 /* encoder: automatically determine coding type */
#define XVID_TYPE_IVOP 1 /* intra frame */
#define XVID_TYPE_PVOP 2 /* predicted frame */
#define XVID_TYPE_BVOP 3 /* bidirectionally encoded */
#define XVID_TYPE_SVOP 4 /* predicted+sprite frame */
/*****************************************************************************
* xvid_global() 全局初始化,获取xvid和硬件信息功能,全局信息,色场空间转换
****************************************************************************/
fprintf(stderr, "xvid_encraw built at %s on %s\n", __TIME__, __DATE__);
fprintf(stderr, "Usage : xvid_encraw [OPTIONS]\n\n");fprintf(stderr, "Input options:\n");
fprintf(stderr, " -i string : input filename (stdin)\n"); //输入文件名称
#ifdef XVID_AVI_INPUTfprintf(stderr, " -type integer : input data type (yuv=0, pgm=1, avi/avs=2) ("); //如果定义了XVID_AVI_INPUT
#else
fprintf(stderr, " -type integer : input data type (yuv=0, pgm=1) (");//否则输入数据类型为这种
#endif
fprintf(stderr, "%d)\n", ARG_INPUTTYPE);//打印输入文件类型参数
fprintf(stderr, " -h integer : frame height ([1.%d])\n", MAX_YDIM);//图像的宽和高最大值,如果不设定会有默认值
fprintf(stderr, " -csp string : colorspace of raw input file i420%s, yv12%s\n", (ARG_COLORSPACE == XVID_CSP_I420)?" (default)":"", (ARG_COLORSPACE == XVID_CSP_YV12)?" (default)":"");
//图像色场空间选择,常用XVID_CSP_I420、XVID_CSP_YV12
fprintf(stderr, " -frames integer : number of frames to encode (");if (ARG_MAXFRAMENR==-1)
fprintf(stderr, "all)");
else
fprintf(stderr, "%d)", ARG_MAXFRAMENR);
fprintf(stderr, "\n\n");
//需要编码的帧数,默认为-1 编码所有帧,可以指定
fprintf(stderr, "Output options:\n");fprintf(stderr, " -dump : save decoder output\n");
fprintf(stderr, " -save : save an Elementary Stream file per frame\n");
fprintf(stderr, " -o string : save an Elementary Stream for the complete sequence\n");
//输出选项,保存编码输出,每一帧都保存元素文件 -o指定保存的完整序列的数据流文件
#ifdef XVID_AVI_OUTPUTfprintf(stderr, " -avi string : save an AVI file for the complete sequence\n");
#endif
#ifdef XVID_MKV_OUTPUT
fprintf(stderr, " -mkv string : save a MKV file for the complete sequence\n");
#endif
fprintf(stderr, "\n");
//为输出的文件保存一个AVI格式,MKV格式的文件
fprintf(stderr, "Rate control options:\n");//码率控制选项
fprintf(stderr, " -framerate float : target framerate (auto)\n"); //目标帧率
fprintf(stderr, " -bitrate [integer] : target bitrate in kbps (%d)\n", DEFAULT_BITRATE/1000);//目标比特率,默认的比特率/1000
fprintf(stderr, " -size integer : target size in kilobytes\n"); //目标大小
fprintf(stderr," -single : single pass mode%s\n", (ARG_SINGLE)?" (default)":"");
//两种编码模式其中的一种,速度快,但是效果不是最好的
fprintf(stderr, " -cq float : single pass constant quantizer\n");
// single pass 模式下的量化参数
fprintf(stderr, " -pass1 [filename] : twopass mode (first pass)\n");
//两种编码模式中的two pass模式,复杂度高,效果好,这个是第一步
fprintf(stderr, " -full1pass : perform full quality first pass (disabled)\n");fprintf(stderr," -pass2 [filename] : twopass mode (2nd pass)\n");
//两种编码模式中的two pass模式,复杂度高,效果好,这个是第二步
fprintf(stderr, " -max_key_interval integer : maximum keyframe interval (%d)\n", ARG_MAXKEYINTERVAL);
//最大的关键帧间隔
fprintf(stderr, " -zones [zones] : use `-help zones' for usage guidelines\n");
//使用帮助区域作为使用指南
fprintf(stderr," -zq starting_frame float : bitrate zone; quant\n");
//
fprintf(stderr," -zw starting_frame float : bitrate zone; weight\n");
fprintf(stderr, "\n");
fprintf(stderr, "Single Pass options:\n");
fprintf(stderr, " -reaction integer : reaction delay factor (%d)\n", ARG_REACTION);
fprintf(stderr, " -averaging integer : averaging period (%d)\n", ARG_AVERAGING);
fprintf(stderr, " -smoother integer : smoothing buffer (%d)\n", ARG_SMOOTHER);
fprintf(stderr, "\n");
fprintf(stderr, "Second Pass options:\n");
fprintf(stderr, " -kboost integer : I frame boost (%d)\n", ARG_KBOOST);
fprintf(stderr, " -kthresh integer : I frame reduction threshold (%d)\n", ARG_KTHRESH);
fprintf(stderr, " -kreduction integer : I frame reduction amount (%d)\n", ARG_KREDUCTION);
fprintf(stderr, " -ostrength integer : overflow control strength (%d)\n", ARG_OVERSTRENGTH);
fprintf(stderr, " -oimprove integer : max overflow improvement (%d)\n", ARG_OVERIMPROVE);
fprintf(stderr, " -odegrade integer : max overflow degradation (%d)\n", ARG_OVERDEGRADE);
fprintf(stderr, " -chigh integer : high bitrate scenes degradation (%d)\n", ARG_CHIGH);
fprintf(stderr, " -clow integer : low bitrate scenes improvement (%d)\n", ARG_CLOW);
fprintf(stderr, " -overhead integer : container frame overhead (%d)\n", ARG_OVERHEAD);
fprintf(stderr, " -vbvsize integer : use vbv buffer size\n");
fprintf(stderr, " -vbvmax integer : vbv max bitrate\n");
fprintf(stderr, " -vbvpeak integer : vbv peak bitrate over 1 second\n");
fprintf(stderr, "\n");
fprintf(stderr, "BFrames options:\n");
fprintf(stderr, " -max_bframes integer : max bframes (%d)\n", ARG_MAXBFRAMES);
fprintf(stderr," -bquant_ratio integer : bframe quantizer ratio (%d)\n", ARG_BQRATIO);
fprintf(stderr," -bquant_offset integer : bframe quantizer offset (%d)\n", ARG_BQOFFSET);
fprintf(stderr, "\n");
fprintf(stderr, "Other options\n");
if (ARG_USE_ASSEMBLER)
fprintf(stderr, " -noasm : do not use assembly optimized code (use)\n");
else
fprintf(stderr, " -asm : use assembly optimized code (don't use)\n");
if (ARG_TURBO)
fprintf(stderr, " -noturbo : do not use turbo presets for higher encoding speed (use)\n");
else
fprintf(stderr, " -turbo : use turbo presets for higher encoding speed (don't use)\n");
fprintf(stderr, " -quality integer : quality ([0..%d]) (%d)\n", ME_ELEMENTS - 1, ARG_QUALITY);
fprintf(stderr, " -vhqmode integer : level of R-D optimizations ([0..4]) (%d)\n", ARG_VHQMODE);
if (ARG_BVHQ)
fprintf(stderr, " -nobvhq : do not use R-D optimizations for B-frames (use)\n");
else
fprintf(stderr, " -bvhq : use R-D optimizations for B-frames (don't use)\n");
fprintf(stderr, " -metric integer : distortion metric for R-D opt (PSNR:0, PSNRHVSM:1) (%d)\n", ARG_QMETRIC);
if (ARG_QPEL)
fprintf(stderr, " -noqpel : do not use quarter pixel ME (use)\n");
else
fprintf(stderr, " -qpel : use quarter pixel ME (don't use)\n");
if (ARG_GMC)
fprintf(stderr, " -nogmc : do not use global motion compensation (use)\n");
else
fprintf(stderr, " -gmc : use global motion compensation (don't use)\n");
fprintf(stderr, " -qtype integer : quantization type (H263:0, MPEG4:1) (%d)\n", ARG_QTYPE);
fprintf(stderr, " -qmatrix filename : use custom MPEG4 quantization matrix\n");
fprintf(stderr, " -interlaced [integer] : interlaced encoding (BFF:1, TFF:2) (%d)\n", DEFAULT_INTERLACING);
if (ARG_PACKED)
fprintf(stderr, " -nopacked : disable packed B-frames mode (enabled)\n");
else
fprintf(stderr, " -packed : enable packed B-frames mode (disabled)\n");
if (ARG_CLOSED_GOP)
fprintf(stderr, " -noclosed_gop : disable closed GOP mode (enabled)\n");
else
fprintf(stderr, " -closed_gop : enable closed GOP mode (disabled)\n");
fprintf(stderr, " -masking [integer] : HVS masking mode (None:0, Lumi:1, Variance:2) (%d)\n", ARG_LUMIMASKING);
if (ARG_STATS)
fprintf(stderr, " -nostats : do not print stats about encoded frames (print)\n");
else
fprintf(stderr, " -stats : print stats about encoded frames (don't print)\n");
fprintf(stderr, " -ssim [integer] : print ssim for every frame (accurate: 0 fast: 4) (%d)\n", DEFAULT_SSIM);
fprintf(stderr, " -ssim_file filename : output the ssim stats into a file\n");
if (ARG_PSNRHVSM)
fprintf(stderr, " -nopsnrhvsm : do not print PSNRHVSM metric for every frame (print)\n");
else
fprintf(stderr, " -psnrhvsm : print PSNRHVSM metric for every frame (don't print)\n");
fprintf(stderr, " -debug integer : activate xvidcore internal debugging output (don't activate)\n");
if (ARG_VOPDEBUG)
fprintf(stderr, " -novop_debug : do not print debug info directly into encoded frames (print)\n");
else
fprintf(stderr, " -vop_debug : print some info directly into encoded frames (don't print)\n");
if (ARG_CHROMAME)
fprintf(stderr, " -nochromame : disable chroma motion estimation (enabled)\n");
else
fprintf(stderr, " -chromame : enable chroma motion estimation (disabled)\n");
if (ARG_TRELLIS)
fprintf(stderr, " -notrellis : disable trellis quantization (enabled)\n");
else
fprintf(stderr, " -trellis : enable trellis quantization (disabled)\n");
fprintf(stderr, " -imin integer : minimum I Quantizer (1..31) (%d)\n", ARG_QUANTS[0]);
fprintf(stderr, " -imax integer : maximum I quantizer (1..31) (%d)\n", ARG_QUANTS[1]);
fprintf(stderr, " -bmin integer : minimum B Quantizer (1..31) (%d)\n", ARG_QUANTS[4]);
fprintf(stderr, " -bmax integer : maximum B quantizer (1..31) (%d)\n", ARG_QUANTS[5]);
fprintf(stderr, " -pmin integer : minimum P Quantizer (1..31) (%d)\n", ARG_QUANTS[2]);
fprintf(stderr, " -pmax integer : maximum P quantizer (1..31) (%d)\n", ARG_QUANTS[3]);
fprintf(stderr, " -drop integer : frame Drop Ratio (0..100) (%d)\n", ARG_FRAMEDROP);
fprintf(stderr, " -start integer : starting frame number (%d)\n", ARG_STARTFRAMENR);
fprintf(stderr, " -threads integer : number of threads (auto)\n");
fprintf(stderr, " -slices integer : number of slices (%d)\n", ARG_SLICES);
fprintf(stderr, " -progress [integer] : show progress updates every n frames (%d)\n", DEFAULT_PROGRESS);
fprintf(stderr, " -par integer[:integer] : set Pixel Aspect Ratio (%d)\n", ARG_PAR);
fprintf(stderr, " 1 = 1:1\n");
fprintf(stderr, " 2 = 12:11 (4:3 PAL)\n");
fprintf(stderr, " 3 = 10:11 (4:3 NTSC)\n");
fprintf(stderr, " 4 = 16:11 (16:9 PAL)\n");
fprintf(stderr, " 5 = 40:33 (16:9 NTSC)\n");
fprintf(stderr, " other = custom (width:height)\n");
fprintf(stderr, " -help : print this help message\n");
fprintf(stderr, "\n");
fprintf(stderr, "NB: You can define up to %d zones via both the -zones and the -z[qw] options as needed.\n", MAX_ZONES);