📄 x264.c
字号:
#define QUIET_TEXT N_("Quiet mode")#define QUIET_LONGTEXT N_( "Quiet mode.")#define VERBOSE_TEXT N_("Statistics")#define VERBOSE_LONGTEXT N_( "Print stats for each frame.")#if X264_BUILD >= 47 /* r518 */#define SPS_ID_TEXT N_("SPS and PPS id numbers")#define SPS_ID_LONGTEXT N_( "Set SPS and PPS id numbers to allow concatenating " \ "streams with different settings.")#endif#define AUD_TEXT N_("Access unit delimiters")#define AUD_LONGTEXT N_( "Generate access unit delimiter NAL units.")#if X264_BUILD >= 24 && X264_BUILD < 58static const char *const enc_me_list[] = { "dia", "hex", "umh", "esa" };static const char *const enc_me_list_text[] = { N_("dia"), N_("hex"), N_("umh"), N_("esa") };#endif#if X264_BUILD >= 58 /* r728 */static const char *const enc_me_list[] = { "dia", "hex", "umh", "esa", "tesa" };static const char *const enc_me_list_text[] = { N_("dia"), N_("hex"), N_("umh"), N_("esa"), N_("tesa") };#endifstatic const char *const enc_analyse_list[] = { "none", "fast", "normal", "slow", "all" };static const char *const enc_analyse_list_text[] = { N_("none"), N_("fast"), N_("normal"), N_("slow"), N_("all") };#if X264_BUILD >= 45 /* r457 */static const char *const direct_pred_list[] = { "none", "spatial", "temporal", "auto" };static const char *const direct_pred_list_text[] = { N_("none"), N_("spatial"), N_("temporal"), N_("auto") };#elsestatic const char *const direct_pred_list[] = { "none", "spatial", "temporal" };static const char *const direct_pred_list_text[] = { N_("none"), N_("spatial"), N_("temporal") };#endifvlc_module_begin(); set_description( N_("H.264/MPEG4 AVC encoder (using x264 library)")); set_capability( "encoder", 200 ); set_callbacks( Open, Close ); set_category( CAT_INPUT ); set_subcategory( SUBCAT_INPUT_VCODEC );/* Frame-type options */ add_integer( SOUT_CFG_PREFIX "keyint", 250, NULL, KEYINT_TEXT, KEYINT_LONGTEXT, false ); add_integer( SOUT_CFG_PREFIX "min-keyint", 25, NULL, MIN_KEYINT_TEXT, MIN_KEYINT_LONGTEXT, false ); add_deprecated_alias( SOUT_CFG_PREFIX "keyint-min" ); /* Deprecated since 0.8.5 */ add_integer( SOUT_CFG_PREFIX "scenecut", 40, NULL, SCENE_TEXT, SCENE_LONGTEXT, false ); change_integer_range( -1, 100 );#if X264_BUILD >= 55 /* r607 */ add_bool( SOUT_CFG_PREFIX "pre-scenecut", 0, NULL, PRESCENE_TEXT, PRESCENE_LONGTEXT, false );#endif add_integer( SOUT_CFG_PREFIX "bframes", 0, NULL, BFRAMES_TEXT, BFRAMES_LONGTEXT, false ); change_integer_range( 0, 16 );#if X264_BUILD >= 0x0013 /* r137 */ add_bool( SOUT_CFG_PREFIX "b-adapt", 1, NULL, B_ADAPT_TEXT, B_ADAPT_LONGTEXT, false ); add_integer( SOUT_CFG_PREFIX "b-bias", 0, NULL, B_BIAS_TEXT, B_BIAS_LONGTEXT, false ); change_integer_range( -100, 100 );#endif add_bool( SOUT_CFG_PREFIX "bpyramid", 0, NULL, BPYRAMID_TEXT, BPYRAMID_LONGTEXT, false ); add_bool( SOUT_CFG_PREFIX "cabac", 1, NULL, CABAC_TEXT, CABAC_LONGTEXT, false ); add_integer( SOUT_CFG_PREFIX "ref", 1, NULL, REF_TEXT, REF_LONGTEXT, false ); change_integer_range( 1, 16 ); add_deprecated_alias( SOUT_CFG_PREFIX "frameref" ); /* Deprecated since 0.8.5 */ add_bool( SOUT_CFG_PREFIX "nf", 0, NULL, NF_TEXT, NF_LONGTEXT, false ); add_deprecated_alias( SOUT_CFG_PREFIX "loopfilter" ); /* Deprecated since 0.8.5 */ add_string( SOUT_CFG_PREFIX "deblock", "0:0", NULL, FILTER_TEXT, FILTER_LONGTEXT, false ); add_deprecated_alias( SOUT_CFG_PREFIX "filter" ); /* Deprecated since 0.8.6 */ add_string( SOUT_CFG_PREFIX "level", "5.1", NULL, LEVEL_TEXT, LEVEL_LONGTEXT, false );#if X264_BUILD >= 51 /* r570 */ add_bool( SOUT_CFG_PREFIX "interlaced", 0, NULL, INTERLACED_TEXT, INTERLACED_LONGTEXT, false );#endif/* Ratecontrol */ add_integer( SOUT_CFG_PREFIX "qp", 26, NULL, QP_TEXT, QP_LONGTEXT, false ); change_integer_range( 0, 51 ); /* QP 0 -> lossless encoding */#if X264_BUILD >= 37 /* r334 */ add_integer( SOUT_CFG_PREFIX "crf", 0, NULL, CRF_TEXT, CRF_LONGTEXT, false ); change_integer_range( 0, 51 );#endif add_integer( SOUT_CFG_PREFIX "qpmin", 10, NULL, QPMIN_TEXT, QPMIN_LONGTEXT, false ); change_integer_range( 0, 51 ); add_deprecated_alias( SOUT_CFG_PREFIX "qp-min" ); /* Deprecated since 0.8.5 */ add_integer( SOUT_CFG_PREFIX "qpmax", 51, NULL, QPMAX_TEXT, QPMAX_LONGTEXT, false ); change_integer_range( 0, 51 ); add_deprecated_alias( SOUT_CFG_PREFIX "qp-max" ); /* Deprecated since 0.8.5 */ add_integer( SOUT_CFG_PREFIX "qpstep", 4, NULL, QPSTEP_TEXT, QPSTEP_LONGTEXT, false ); change_integer_range( 0, 51 ); add_float( SOUT_CFG_PREFIX "ratetol", 1.0, NULL, RATETOL_TEXT, RATETOL_LONGTEXT, false ); change_float_range( 0, 100 ); add_deprecated_alias( SOUT_CFG_PREFIX "tolerance" ); /* Deprecated since 0.8.5 */ add_integer( SOUT_CFG_PREFIX "vbv-maxrate", 0, NULL, VBV_MAXRATE_TEXT, VBV_MAXRATE_LONGTEXT, false ); add_integer( SOUT_CFG_PREFIX "vbv-bufsize", 0, NULL, VBV_BUFSIZE_TEXT, VBV_BUFSIZE_LONGTEXT, false ); add_float( SOUT_CFG_PREFIX "vbv-init", 0.9, NULL, VBV_INIT_TEXT, VBV_INIT_LONGTEXT, false ); change_float_range( 0, 1 ); add_float( SOUT_CFG_PREFIX "ipratio", 1.40, NULL, IPRATIO_TEXT, IPRATIO_LONGTEXT, false ); change_float_range( 1, 2 ); add_float( SOUT_CFG_PREFIX "pbratio", 1.30, NULL, PBRATIO_TEXT, PBRATIO_LONGTEXT, false ); change_float_range( 1, 2 );#if X264_BUILD >= 23 /* r190 */ add_integer( SOUT_CFG_PREFIX "chroma-qp-offset", 0, NULL, CHROMA_QP_OFFSET_TEXT, CHROMA_QP_OFFSET_LONGTEXT, false );#endif add_integer( SOUT_CFG_PREFIX "pass", 0, NULL, PASS_TEXT, PASS_LONGTEXT, false ); change_integer_range( 0, 3 ); add_float( SOUT_CFG_PREFIX "qcomp", 0.60, NULL, QCOMP_TEXT, QCOMP_LONGTEXT, false ); change_float_range( 0, 1 ); add_float( SOUT_CFG_PREFIX "cplxblur", 20.0, NULL, CPLXBLUR_TEXT, CPLXBLUR_LONGTEXT, false ); add_float( SOUT_CFG_PREFIX "qblur", 0.5, NULL, QBLUR_TEXT, QBLUR_LONGTEXT, false );#if X264_BUILD >= 59 add_integer( SOUT_CFG_PREFIX "aq-mode", 2, NULL, AQ_MODE_TEXT, AQ_MODE_LONGTEXT, false ); change_integer_range( 0, 2 ); add_float( SOUT_CFG_PREFIX "aq-strength", 1.0, NULL, AQ_STRENGTH_TEXT, AQ_STRENGTH_LONGTEXT, false );#endif/* Analysis */ /* x264 partitions = none (default). set at least "normal" mode. */ add_string( SOUT_CFG_PREFIX "partitions", "normal", NULL, ANALYSE_TEXT, ANALYSE_LONGTEXT, false ); change_string_list( enc_analyse_list, enc_analyse_list_text, 0 ); add_deprecated_alias( SOUT_CFG_PREFIX "analyse" ); /* Deprecated since 0.8.6 */ add_string( SOUT_CFG_PREFIX "direct", "spatial", NULL, DIRECT_PRED_TEXT, DIRECT_PRED_LONGTEXT, false ); change_string_list( direct_pred_list, direct_pred_list_text, 0 );#if X264_BUILD >= 52 /* r573 */ add_integer( SOUT_CFG_PREFIX "direct-8x8", -1, NULL, DIRECT_PRED_SIZE_TEXT, DIRECT_PRED_SIZE_LONGTEXT, false ); change_integer_range( -1, 1 );#endif#if X264_BUILD >= 0x0012 /* r134 */ add_bool( SOUT_CFG_PREFIX "weightb", 0, NULL, WEIGHTB_TEXT, WEIGHTB_LONGTEXT, false );#endif#if X264_BUILD >= 24 /* r221 */ add_string( SOUT_CFG_PREFIX "me", "hex", NULL, ME_TEXT, ME_LONGTEXT, false ); change_string_list( enc_me_list, enc_me_list_text, 0 ); add_integer( SOUT_CFG_PREFIX "merange", 16, NULL, MERANGE_TEXT, MERANGE_LONGTEXT, false ); change_integer_range( 1, 64 );#endif add_integer( SOUT_CFG_PREFIX "mvrange", -1, NULL, MVRANGE_TEXT, MVRANGE_LONGTEXT, false );#if X264_BUILD >= 55 /* r607 */ add_integer( SOUT_CFG_PREFIX "mvrange-thread", -1, NULL, MVRANGE_THREAD_TEXT, MVRANGE_THREAD_LONGTEXT, false );#endif add_integer( SOUT_CFG_PREFIX "subme", 5, NULL, SUBME_TEXT, SUBME_LONGTEXT, false ); change_integer_range( 1, SUBME_MAX ); add_deprecated_alias( SOUT_CFG_PREFIX "subpel" ); /* Deprecated since 0.8.5 */#if X264_BUILD >= 41 /* r368 */ add_bool( SOUT_CFG_PREFIX "b-rdo", 0, NULL, B_RDO_TEXT, B_RDO_LONGTEXT, false );#endif#if X264_BUILD >= 36 /* r318 */ add_bool( SOUT_CFG_PREFIX "mixed-refs", 0, NULL, MIXED_REFS_TEXT, MIXED_REFS_LONGTEXT, false );#endif#if X264_BUILD >= 23 /* r171 */ add_bool( SOUT_CFG_PREFIX "chroma-me", 1, NULL, CHROMA_ME_TEXT, CHROMA_ME_LONGTEXT, false );#endif#if X264_BUILD >= 43 /* r390 */ add_bool( SOUT_CFG_PREFIX "bime", 0, NULL, BIME_TEXT, BIME_LONGTEXT, false );#endif#if X264_BUILD >= 30 /* r251 */ add_bool( SOUT_CFG_PREFIX "8x8dct", 0, NULL, TRANSFORM_8X8DCT_TEXT, TRANSFORM_8X8DCT_LONGTEXT, false );#endif#if X264_BUILD >= 39 /* r360 */ add_integer( SOUT_CFG_PREFIX "trellis", 0, NULL, TRELLIS_TEXT, TRELLIS_LONGTEXT, false ); change_integer_range( 0, 2 );#endif#if X264_BUILD >= 42 /* r384 */ add_bool( SOUT_CFG_PREFIX "fast-pskip", 1, NULL, FAST_PSKIP_TEXT, FAST_PSKIP_LONGTEXT, false );#endif#if X264_BUILD >= 46 /* r503 */ add_bool( SOUT_CFG_PREFIX "dct-decimate", 1, NULL, DCT_DECIMATE_TEXT, DCT_DECIMATE_LONGTEXT, false );#endif#if X264_BUILD >= 44 /* r398 */ add_integer( SOUT_CFG_PREFIX "nr", 0, NULL, NR_TEXT, NR_LONGTEXT, false ); change_integer_range( 0, 1000 );#endif#if X264_BUILD >= 52 /* r573 */ add_integer( SOUT_CFG_PREFIX "deadzone-inter", 21, NULL, DEADZONE_INTER_TEXT, DEADZONE_INTRA_LONGTEXT, false ); change_integer_range( 0, 32 ); add_integer( SOUT_CFG_PREFIX "deadzone-intra", 11, NULL, DEADZONE_INTRA_TEXT, DEADZONE_INTRA_LONGTEXT, false ); change_integer_range( 0, 32 );#endif/* Input/Output */#if X264_BUILD >= 55 /* r607 */ add_bool( SOUT_CFG_PREFIX "non-deterministic", 0, NULL, NON_DETERMINISTIC_TEXT, NON_DETERMINISTIC_LONGTEXT, false );#endif add_bool( SOUT_CFG_PREFIX "asm", 1, NULL, ASM_TEXT, ASM_LONGTEXT, false ); /* x264 psnr = 1 (default). disable PSNR computation for speed. */ add_bool( SOUT_CFG_PREFIX "psnr", 0, NULL, PSNR_TEXT, PSNR_LONGTEXT, false );#if X264_BUILD >= 50 /* r554 */ /* x264 ssim = 1 (default). disable SSIM computation for speed. */ add_bool( SOUT_CFG_PREFIX "ssim", 0, NULL, SSIM_TEXT, SSIM_LONGTEXT, false );#endif add_bool( SOUT_CFG_PREFIX "quiet", 0, NULL, QUIET_TEXT, QUIET_LONGTEXT, false );#if X264_BUILD >= 47 /* r518 */ add_integer( SOUT_CFG_PREFIX "sps-id", 0, NULL, SPS_ID_TEXT, SPS_ID_LONGTEXT, false );#endif add_bool( SOUT_CFG_PREFIX "aud", 0, NULL, AUD_TEXT, AUD_LONGTEXT, false );#if X264_BUILD >= 0x000e /* r81 */ add_bool( SOUT_CFG_PREFIX "verbose", 0, NULL, VERBOSE_TEXT, VERBOSE_LONGTEXT, false );#endif add_string( SOUT_CFG_PREFIX "stats", "x264_2pass.log", NULL, STATS_TEXT, STATS_LONGTEXT, false );vlc_module_end();/***************************************************************************** * Local prototypes *****************************************************************************/static const char *const ppsz_sout_options[] = { "8x8dct", "analyse", "asm", "aud", "bframes", "bime", "bpyramid", "b-adapt", "b-bias", "b-rdo", "cabac", "chroma-me", "chroma-qp-offset", "cplxblur", "crf", "dct-decimate", "deadzone-inter", "deadzone-intra", "deblock", "direct", "direct-8x8", "filter", "fast-pskip", "frameref", "interlaced", "ipratio", "keyint", "keyint-min", "level", "loopfilter", "me", "merange", "min-keyint", "mixed-refs", "mvrange", "mvrange-thread", "nf", "non-deterministic", "nr", "partitions", "pass", "pbratio", "pre-scenecut", "psnr", "qblur", "qp", "qcomp", "qpstep", "qpmax", "qpmin", "qp-max", "qp-min", "quiet", "ratetol", "ref", "scenecut", "sps-id", "ssim", "stats", "subme", "subpel", "tolerance", "trellis", "verbose", "vbv-bufsize", "vbv-init", "vbv-maxrate", "weightb", "aq-mode", "aq-strength",NULL};static block_t *Encode( encoder_t *, picture_t * );struct encoder_sys_t{ x264_t *h; x264_param_t param; int i_buffer; uint8_t *p_buffer;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -