📄 x264.c
字号:
/***************************************************************************** * x264.c: h264 video encoder ***************************************************************************** * Copyright (C) 2004-2006 the VideoLAN team * $Id$ * * Authors: Laurent Aimar <fenrir@via.ecp.fr> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************//***************************************************************************** * Preamble *****************************************************************************/#ifdef HAVE_CONFIG_H# include "config.h"#endif#include <vlc_common.h>#include <vlc_plugin.h>#include <vlc_vout.h>#include <vlc_sout.h>#include <vlc_codec.h>#ifdef PTW32_STATIC_LIB#include <pthread.h>#endif#include <x264.h>#define SOUT_CFG_PREFIX "sout-x264-"/***************************************************************************** * Module descriptor *****************************************************************************/static int Open ( vlc_object_t * );static void Close( vlc_object_t * );/* Frame-type options */#define KEYINT_TEXT N_("Maximum GOP size")#define KEYINT_LONGTEXT N_( "Sets maximum interval between IDR-frames." \ "Larger values save bits, thus improving quality for a given bitrate at " \ "the cost of seeking precision." )#define MIN_KEYINT_TEXT N_("Minimum GOP size")#define MIN_KEYINT_LONGTEXT N_( "Sets minimum interval between IDR-frames. " \ "In H.264, I-frames do not necessarily bound a closed GOP because it is " \ "allowable for a P-frame to be predicted from more frames than just the " \ "one frame before it (also see reference frame option). Therefore, " \ "I-frames are not necessarily seekable. IDR-frames restrict subsequent " \ "P-frames from referring to any frame prior to the IDR-frame. \n" \ "If scenecuts appear within this interval, they are still encoded as " \ "I-frames, but do not start a new GOP." )#define SCENE_TEXT N_("Extra I-frames aggressivity" )#define SCENE_LONGTEXT N_( "Scene-cut detection. Controls how " \ "aggressively to insert extra I-frames. With small values of " \ "scenecut, the codec often has " \ "to force an I-frame when it would exceed keyint. " \ "Good values of scenecut may find a better location for the " \ "I-frame. Large values use more I-frames " \ "than necessary, thus wasting bits. -1 disables scene-cut detection, so " \ "I-frames are inserted only every other keyint frames, which probably " \ "leads to ugly encoding artifacts. Range 1 to 100." )#if X264_BUILD >= 55 /* r607 */#define PRESCENE_TEXT N_("Faster, less precise scenecut detection" )#define PRESCENE_LONGTEXT N_( "Faster, less precise scenecut detection. " \ "Required and implied by multi-threading." )#endif#define BFRAMES_TEXT N_("B-frames between I and P")#define BFRAMES_LONGTEXT N_( "Number of consecutive B-frames between I and " \ "P-frames. Range 1 to 16." )#define B_ADAPT_TEXT N_("Adaptive B-frame decision")#define B_ADAPT_LONGTEXT N_( "Force the specified number of " \ "consecutive B-frames to be used, except possibly before an I-frame." )#define B_BIAS_TEXT N_("Influence (bias) B-frames usage")#define B_BIAS_LONGTEXT N_( "Bias the choice to use B-frames. Positive values " \ "cause more B-frames, negative values cause less B-frames." )#define BPYRAMID_TEXT N_("Keep some B-frames as references")#define BPYRAMID_LONGTEXT N_( "Allows B-frames to be used as references for " \ "predicting other frames. Keeps the middle of 2+ consecutive B-frames " \ "as a reference, and reorders frame appropriately." )#define CABAC_TEXT N_("CABAC")#define CABAC_LONGTEXT N_( "CABAC (Context-Adaptive Binary Arithmetic "\ "Coding). Slightly slows down encoding and decoding, but should save " \ "10 to 15% bitrate." )#define REF_TEXT N_("Number of reference frames")#define REF_LONGTEXT N_( "Number of previous frames used as predictors. " \ "This is effective in Anime, but seems to make little difference in " \ "live-action source material. Some decoders are unable to deal with " \ "large frameref values. Range 1 to 16." )#define NF_TEXT N_("Skip loop filter")#define NF_LONGTEXT N_( "Deactivate the deblocking loop filter (decreases quality).")#define FILTER_TEXT N_("Loop filter AlphaC0 and Beta parameters alpha:beta")#define FILTER_LONGTEXT N_( "Loop filter AlphaC0 and Beta parameters. " \ "Range -6 to 6 for both alpha and beta parameters. -6 means light " \ "filter, 6 means strong.") #define LEVEL_TEXT N_("H.264 level")#define LEVEL_LONGTEXT N_( "Specify H.264 level (as defined by Annex A " \ "of the standard). Levels are not enforced; it's up to the user to select " \ "a level compatible with the rest of the encoding options. Range 1 to 5.1 " \ "(10 to 51 is also allowed).")/* In order to play an interlaced output stream encoded by x264, a decoder needs mbaff support. r570 is using the 'mb' part and not 'aff' yet; so it's really 'pure-interlaced' mode */#if X264_BUILD >= 51 /* r570 */#define INTERLACED_TEXT N_("Interlaced mode")#define INTERLACED_LONGTEXT N_( "Pure-interlaced mode.")#endif/* Ratecontrol */#define QP_TEXT N_("Set QP")#define QP_LONGTEXT N_( "This selects the quantizer to use. " \ "Lower values result in better fidelity, but higher bitrates. 26 is a " \ "good default value. Range 0 (lossless) to 51." )#define CRF_TEXT N_("Quality-based VBR")#define CRF_LONGTEXT N_( "1-pass Quality-based VBR. Range 0 to 51." )#define QPMIN_TEXT N_("Min QP")#define QPMIN_LONGTEXT N_( "Minimum quantizer parameter. 15 to 35 seems to " \ "be a useful range." )#define QPMAX_TEXT N_("Max QP")#define QPMAX_LONGTEXT N_( "Maximum quantizer parameter." )#define QPSTEP_TEXT N_("Max QP step")#define QPSTEP_LONGTEXT N_( "Max QP step between frames.")#define RATETOL_TEXT N_("Average bitrate tolerance")#define RATETOL_LONGTEXT N_( "Allowed variance in average " \ "bitrate (in kbits/s).")#define VBV_MAXRATE_TEXT N_("Max local bitrate")#define VBV_MAXRATE_LONGTEXT N_( "Sets a maximum local bitrate (in kbits/s).")#define VBV_BUFSIZE_TEXT N_("VBV buffer")#define VBV_BUFSIZE_LONGTEXT N_( "Averaging period for the maximum " \ "local bitrate (in kbits).")#define VBV_INIT_TEXT N_("Initial VBV buffer occupancy")#define VBV_INIT_LONGTEXT N_( "Sets the initial buffer occupancy as a " \ "fraction of the buffer size. Range 0.0 to 1.0.")#if X264_BUILD >= 59#define AQ_MODE_TEXT N_("How AQ distributes bits")#define AQ_MODE_LONGTEXT N_("Defines bitdistribution mode for AQ, default 2\n" \ " - 0: Disabled\n"\ " - 1: Avoid moving bits between frames\n"\ " - 2: Move bits between frames")#define AQ_STRENGTH_TEXT N_("Strength of AQ")#define AQ_STRENGTH_LONGTEXT N_("Strength to reduce blocking and blurring in flat\n"\ "and textured areas, default 1.0 recommented to be between 0..2\n"\ " - 0.5: weak AQ\n"\ " - 1.5: strong AQ")#endif/* IP Ratio < 1 is technically valid but should never improve quality */#define IPRATIO_TEXT N_("QP factor between I and P")#define IPRATIO_LONGTEXT N_( "QP factor between I and P. Range 1.0 to 2.0.")/* PB ratio < 1 is not valid and breaks ratecontrol */#define PBRATIO_TEXT N_("QP factor between P and B")#define PBRATIO_LONGTEXT N_( "QP factor between P and B. Range 1.0 to 2.0.")#define CHROMA_QP_OFFSET_TEXT N_("QP difference between chroma and luma")#define CHROMA_QP_OFFSET_LONGTEXT N_( "QP difference between chroma and luma.")#define PASS_TEXT N_("Multipass ratecontrol")#define PASS_LONGTEXT N_( "Multipass ratecontrol:\n" \ " - 1: First pass, creates stats file\n" \ " - 2: Last pass, does not overwrite stats file\n" \ " - 3: Nth pass, overwrites stats file\n" )#define QCOMP_TEXT N_("QP curve compression")#define QCOMP_LONGTEXT N_( "QP curve compression. Range 0.0 (CBR) to 1.0 (QCP).")#define CPLXBLUR_TEXT N_("Reduce fluctuations in QP")#define CPLXBLUR_LONGTEXT N_( "This reduces the fluctuations in QP " \ "before curve compression. Temporally blurs complexity.")#define QBLUR_TEXT N_("Reduce fluctuations in QP")#define QBLUR_LONGTEXT N_( "This reduces the fluctations in QP " \ "after curve compression. Temporally blurs quants.")/* Analysis */#define ANALYSE_TEXT N_("Partitions to consider")#define ANALYSE_LONGTEXT N_( "Partitions to consider in analyse mode: \n" \ " - none : \n" \ " - fast : i4x4\n" \ " - normal: i4x4,p8x8,(i8x8)\n" \ " - slow : i4x4,p8x8,(i8x8),b8x8\n" \ " - all : i4x4,p8x8,(i8x8),b8x8,p4x4\n" \ "(p4x4 requires p8x8. i8x8 requires 8x8dct).")#define DIRECT_PRED_TEXT N_("Direct MV prediction mode")#define DIRECT_PRED_LONGTEXT N_( "Direct MV prediction mode.")#if X264_BUILD >= 52 /* r573 */#define DIRECT_PRED_SIZE_TEXT N_("Direct prediction size")#define DIRECT_PRED_SIZE_LONGTEXT N_( "Direct prediction size: "\ " - 0: 4x4\n" \ " - 1: 8x8\n" \ " - -1: smallest possible according to level\n" )#endif#define WEIGHTB_TEXT N_("Weighted prediction for B-frames")#define WEIGHTB_LONGTEXT N_( "Weighted prediction for B-frames.")#define ME_TEXT N_("Integer pixel motion estimation method")#if X264_BUILD >= 58 /* r728 */#define ME_LONGTEXT N_( "Selects the motion estimation algorithm: "\ " - dia: diamond search, radius 1 (fast)\n" \ " - hex: hexagonal search, radius 2\n" \ " - umh: uneven multi-hexagon search (better but slower)\n" \ " - esa: exhaustive search (extremely slow, primarily for testing)\n" \ " - tesa: hadamard exhaustive search (extremely slow, primarily for testing)\n" )#else#define ME_LONGTEXT N_( "Selects the motion estimation algorithm: "\ " - dia: diamond search, radius 1 (fast)\n" \ " - hex: hexagonal search, radius 2\n" \ " - umh: uneven multi-hexagon search (better but slower)\n" \ " - esa: exhaustive search (extremely slow, primarily for testing)\n" )#endif#if X264_BUILD >= 24#define MERANGE_TEXT N_("Maximum motion vector search range")#define MERANGE_LONGTEXT N_( "Maximum distance to search for " \ "motion estimation, measured from predicted position(s). " \ "Default of 16 is good for most footage, high motion sequences may " \ "benefit from settings between 24 and 32. Range 0 to 64." )#define MVRANGE_TEXT N_("Maximum motion vector length")#define MVRANGE_LONGTEXT N_( "Maximum motion vector length in pixels. " \ "-1 is automatic, based on level." )#endif#if X264_BUILD >= 55 /* r607 */#define MVRANGE_THREAD_TEXT N_("Minimum buffer space between threads")#define MVRANGE_THREAD_LONGTEXT N_( "Minimum buffer space between threads. " \ "-1 is automatic, based on number of threads." )#endif#define SUBME_TEXT N_("Subpixel motion estimation and partition decision " \ "quality")#if X264_BUILD >= 46 /* r477 */#define SUBME_MAX 7#define SUBME_LONGTEXT N_( "This parameter controls quality versus speed " \ "tradeoffs involved in the motion estimation decision process " \ "(lower = quicker and higher = better quality). Range 1 to 7." )#elif X264_BUILD >= 30 /* r262 */#define SUBME_MAX 6#define SUBME_LONGTEXT N_( "This parameter controls quality versus speed " \ "tradeoffs involved in the motion estimation decision process " \ "(lower = quicker and higher = better quality). Range 1 to 6." )#else#define SUBME_MAX 5#define SUBME_LONGTEXT N_( "This parameter controls quality versus speed " \ "tradeoffs involved in the motion estimation decision process " \ "(lower = quicker and higher = better quality). Range 1 to 5." )#endif#define B_RDO_TEXT N_("RD based mode decision for B-frames")#define B_RDO_LONGTEXT N_( "RD based mode decision for B-frames. This " \ "requires subme 6 (or higher).")#define MIXED_REFS_TEXT N_("Decide references on a per partition basis")#define MIXED_REFS_LONGTEXT N_( "Allows each 8x8 or 16x8 partition to " \ "independently select a reference frame, as opposed to only one ref " \ "per macroblock." )#define CHROMA_ME_TEXT N_("Chroma in motion estimation")#define CHROMA_ME_LONGTEXT N_( "Chroma ME for subpel and mode decision in " \ "P-frames.")#define BIME_TEXT N_("Jointly optimize both MVs in B-frames")#define BIME_LONGTEXT N_( "Joint bidirectional motion refinement.")#define TRANSFORM_8X8DCT_TEXT N_("Adaptive spatial transform size")#define TRANSFORM_8X8DCT_LONGTEXT N_( \ "SATD-based decision for 8x8 transform in inter-MBs.")#define TRELLIS_TEXT N_("Trellis RD quantization" )#define TRELLIS_LONGTEXT N_( "Trellis RD quantization: \n" \ " - 0: disabled\n" \ " - 1: enabled only on the final encode of a MB\n" \ " - 2: enabled on all mode decisions\n" \ "This requires CABAC." )#define FAST_PSKIP_TEXT N_("Early SKIP detection on P-frames")#define FAST_PSKIP_LONGTEXT N_( "Early SKIP detection on P-frames.")#define DCT_DECIMATE_TEXT N_("Coefficient thresholding on P-frames")#define DCT_DECIMATE_LONGTEXT N_( "Coefficient thresholding on P-frames." \ "Eliminate dct blocks containing only a small single coefficient.")/* Noise reduction 1 is too weak to measure, suggest at least 10 */#define NR_TEXT N_("Noise reduction")#define NR_LONGTEXT N_( "Dct-domain noise reduction. Adaptive pseudo-deadzone. " \ "10 to 1000 seems to be a useful range." )#if X264_BUILD >= 52 /* r573 */#define DEADZONE_INTER_TEXT N_("Inter luma quantization deadzone")#define DEADZONE_INTER_LONGTEXT N_( "Set the size of the inter luma quantization deadzone. " \ "Range 0 to 32." )#define DEADZONE_INTRA_TEXT N_("Intra luma quantization deadzone")#define DEADZONE_INTRA_LONGTEXT N_( "Set the size of the intra luma quantization deadzone. " \ "Range 0 to 32." )#endif/* Input/Output */#if X264_BUILD >= 55 /* r607 */#define NON_DETERMINISTIC_TEXT N_("Non-deterministic optimizations when threaded")#define NON_DETERMINISTIC_LONGTEXT N_( "Slightly improve quality of SMP, " \ "at the cost of repeatability.")#endif#define ASM_TEXT N_("CPU optimizations")#define ASM_LONGTEXT N_( "Use assembler CPU optimizations.")#define STATS_TEXT N_("Filename for 2 pass stats file")#define STATS_LONGTEXT N_( "Filename for 2 pass stats file for multi-pass encoding.")#define PSNR_TEXT N_("PSNR computation")#define PSNR_LONGTEXT N_( "Compute and print PSNR stats. This has no effect on " \ "the actual encoding quality." )#define SSIM_TEXT N_("SSIM computation")#define SSIM_LONGTEXT N_( "Compute and print SSIM stats. This has no effect on " \ "the actual encoding quality." )
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -