Command Line Options¶
Note that unless an option is listed as CLI ONLY the option is also supported by x265_param_parse(). The CLI uses getopt to parse the command line options so the short or long versions may be used and the long options may be truncated to the shortest unambiguous abbreviation. Users of the API must pass x265_param_parse() the full option name.
Preset and tune have special implications. The API user must call x265_param_default_preset() with the preset and tune parameters they wish to use, prior to calling x265_param_parse() to set any additional fields. The CLI does this for the user implicitly, so all CLI options are applied after the user’s preset and tune choices, regardless of the order of the arguments on the command line.
If there is an extra command line argument (not an option or an option value) the CLI will treat it as the input filename. This effectively makes the --input specifier optional for the input file. If there are two extra arguments, the second is treated as the output bitstream filename, making --output also optional if the input filename was implied. This makes x265 in.y4m out.hevc a valid command line. If there are more than two extra arguments, the CLI will consider this an error and abort.
Standalone Executable Options¶
- --help, -h¶
Display help text
- --version, -V¶
Display version details
- --asm <integer:false:string>, --no-asm¶
x265 will use all detected CPU SIMD architectures by default. You can disable all assembly by using --no-asm or you can specify a comma separated list of SIMD architectures to use, matching these strings: MMX2, SSE, SSE2, SSE3, SSSE3, SSE4, SSE4.1, SSE4.2, AVX, XOP, FMA4, AVX2, FMA3
Some higher architectures imply lower ones being present, this is handled implicitly.
One may also directly supply the CPU capability bitmap as an integer.
- --threads <integer>¶
Number of threads for thread pool. Default 0 (detected CPU core count)
- --preset, -p <integer|string>¶
Sets parameters to preselected values, trading off compression efficiency against encoding speed. These parameters are applied before all other input parameters are applied, and so you can override any parameters that these values control.
- medium (default)
- --tune, -t <string>¶
Tune the settings for a particular type of source or situation. The changes will be applied after --preset but before all other parameters. Default none
Values: psnr, ssim, zero-latency, fast-decode.
- --frame-threads, -F <integer>¶
Number of concurrently encoded frames. Using a single frame thread gives a slight improvement in compression, since the entire reference frames are always available for motion compensation, but it has severe performance implications. Default is an autodetected count based on the number of CPU cores and whether WPP is enabled or not.
- --log-level <integer|string>¶
Logging level. Debug level enables per-frame QP, metric, and bitrate logging. If a CSV file is being generated, debug level makes the log be per-frame rather than per-encode. Full level enables hash and weight logging. -1 disables all logging, except certain fatal errors, and can be specified by the string “none”.
- info (default)
- --csv <filename>¶
Writes encoding results to a comma separated value log file. Creates the file if it doesnt already exist, else adds one line per run. if --log-level is debug or above, it writes one line per frame. Default none
- --cu-stats, --no-cu-stats¶
Records statistics on how each CU was coded (split depths and other mode decisions) and reports those statistics at the end of the encode. Default disabled
- --output, -o <filename>¶
Bitstream output file name. If there are two extra CLI options, the first is implicitly the input filename and the second is the output filename, making the --output option optional.
The output file will always contain a raw HEVC bitstream, the CLI does not support any container file formats.
Disable CLI periodic progress reports
Quality reporting metrics¶
- --ssim, --no-ssim¶
Calculate and report Structural Similarity values. It is recommended to use --tune ssim if you are measuring ssim, else the results should not be used for comparison purposes. Default disabled
- --input <filename>¶
Input filename, only raw YUV or Y4M supported. Use single dash for stdin. This option name will be implied for the first “extra” command line argument.
- --input-depth <integer>¶
YUV only: Bit-depth of input file or stream
Values: any value between 8 and 16. Default is internal depth.
Enable high quality downscaling. Dithering is based on the diffusion of errors from one row of pixels to the next row of pixels in a picture. Only applicable when the input bit depth is larger than 8bits and internal bit depth is 8bits. Default disabled
- --nr <integer>¶
Noise reduction - an adaptive deadzone applied after DCT (subtracting from DCT coefficients), before quantization, on inter blocks. It does no pixel-level filtering, doesn’t cross DCT block boundaries, has no overlap, doesn’t affect intra blocks. The higher the strength value parameter, the more aggressively it will reduce noise.
Enabling noise reduction will make outputs diverge between different numbers of frame threads. Outputs will be deterministic but the outputs of -F2 will no longer match the outputs of -F3, etc.
Values: any value in range of 100 to 1000. Default disabled.
- --input-res <wxh>¶
YUV only: Source picture size [w x h]
- --input-csp <integer|string>¶
YUV only: Source color space. Only i420, i422, and i444 are supported at this time. The internal color space is always the same as the source color space (libx265 does not support any color space conversions).
- i420 (default)
- --fps <integer|float|numerator/denominator>¶
YUV only: Source frame rate
Range of values: positive int or float, or num/denom
- --interlaceMode <false|tff|bff>, --no-interlaceMode¶
EXPERIMENTAL Specify interlace type of source pictures.
- progressive pictures (default)
- top field first
- bottom field first
HEVC encodes interlaced content as fields. Fields must be provided to the encoder in the correct temporal order. The source dimensions must be field dimensions and the FPS must be in units of fields per second. The decoder must re-combine the fields in their correct orientation for display.
- --seek <integer>¶
Number of frames to skip at start of input file. Default 0
- --frames, -f <integer>¶
Number of frames to be encoded. Default 0 (all)
- --qpfile <filename>¶
Specify a text file which contains frametypes and QPs for some or all frames. The format of each line is:
framenumber frametype QP
Frametype can be one of [I,i,P,B,b]. B is a referenced B frame, b is an unreferenced B frame. I is a keyframe (random access point) while i is a I frame that is not a keyframe (references are not broken).
Specifying QP (integer) is optional, and if specified they are clamped within the encoder to qpmin/qpmax.
- --lambda-file <filename>¶
Specify a text file containing values for x265_lambda_tab and x265_lambda2_tab. Each table requires MAX_MAX_QP+1 (70) float values.
The text file syntax is simple. Comma is considered to be white-space. All white-space is ignored. Lines must be less than 2k bytes in length. Content following hash (#) characters are ignored. The values read from the file are logged at --log-level debug.
Note that the lambda tables are process-global and so the new values affect all encoders running in the same process.
Lambda values affect encoder mode decisions, the lower the lambda the more bits it will try to spend on signaling information (motion vectors and splits) and less on residual. This feature is intended for experimentation.
Profile, Level, Tier¶
- --profile <string>¶
Enforce the requirements of the specified profile, ensuring the output stream will be decodable by a decoder which supports that profile. May abort the encode if the specified profile is impossible to be supported by the compile options chosen for the encoder (a high bit depth encoder will be unable to output bitstreams compliant with Main or Mainstillpicture).
API users must use x265_param_apply_profile() after configuring their param structure. Any changes made to the param structure after this call might make the encode non-compliant.
Values: main, main10, mainstillpicture
- --level-idc <integer|float>¶
Minimum decoder requirement level. Defaults to 0, which implies auto-detection by the encoder. If specified, the encoder will attempt to bring the encode specifications within that specified level. If the encoder is unable to reach the level it issues a warning and aborts the encode. If the requested requirement level is higher than the actual level, the actual requirement level is signaled.
Beware, wpecifying a decoder level will force the encoder to enable VBV for constant rate factor encodes, which may introduce non-determinism.
The value is specified as a float or as an integer with the level times 10, for example level 5.1 is specified as “5.1” or “51”, and level 5.0 is specified as “5.0” or “50”.
Annex A levels: 1, 2, 2.1, 3, 3.1, 4, 4.1, 5, 5.1, 5.2, 6, 6.1, 6.2
- --high-tier, --no-high-tier¶
If --level-idc has been specied, the option adds the intention to support the High tier of that level. If your specified level does not support a High tier, a warning is issued and this modifier flag is ignored.
--profile, --level-idc, and --high-tier are only intended for use when you are targeting a particular decoder (or decoders) with fixed resource limitations and must constrain the bitstream within those limits. Specifying a profile or level may lower the encode quality parameters to meet those requirements but it will never raise them.
- --wpp, --no-wpp¶
Enable Wavefront Parallel Processing. The encoder may begin encoding a row as soon as the row above it is at least two CTUs ahead in the encode process. This gives a 3-5x gain in parallelism for about 1% overhead in compression efficiency. Default: Enabled
- --ctu, -s <64|32|16>¶
Maximum CU size (width and height). The larger the maximum CU size, the more efficiently x265 can encode flat areas of the picture, giving large reductions in bitrate. However this comes at a loss of parallelism with fewer rows of CUs that can be encoded in parallel, and less frame parallelism as well. Because of this the faster presets use a CU size of 32. Default: 64
- --tu-intra-depth <1..4>¶
The transform unit (residual) quad-tree begins with the same depth as the coding unit quad-tree, but the encoder may decide to further split the transform unit tree if it improves compression efficiency. This setting limits the number of extra recursion depth which can be attempted for intra coded units. Default: 1
- --tu-inter-depth <1..4>¶
The transform unit (residual) quad-tree begins with the same depth as the coding unit quad-tree, but the encoder may decide to further split the transform unit tree if it improves compression efficiency. This setting limits the number of extra recursion depth which can be attempted for inter coded units. Default: 1
Temporal / motion search options¶
- --me <integer|string>¶
Motion search method. Generally, the higher the number the harder the ME method will try to find an optimal match. Diamond search is the simplest. Hexagon search is a little better. Uneven Multi-Hexegon is an adaption of the search method used by x264 for slower presets. Star is a three step search adapted from the HM encoder: a star-pattern search followed by an optional radix scan followed by an optional star-search refinement. Full is an exhaustive search; an order of magnitude slower than all other searches but not much better than umh or star.
- hex (default)
- --subme, -m <0..7>¶
Amount of subpel refinement to perform. The higher the number the more subpel iterations and steps are performed. Default 2
-m HPEL iters HPEL dirs QPEL iters QPEL dirs HPEL SATD 0 1 4 0 4 false 1 1 4 1 4 false 2 1 4 1 4 true 3 2 4 1 4 true 4 2 4 2 4 true 5 1 8 1 8 true 6 2 8 1 8 true 7 2 8 2 8 true
- --merange <integer>¶
Motion search range. Default 57
The default is derived from the default CTU size (64) minus the luma interpolation half-length (4) minus maximum subpel distance (2) minus one extra pixel just in case the hex search method is used. If the search range were any larger than this, another CTU row of latency would be required for reference frames.
Range of values: an integer from 0 to 32768
- --max-merge <1..5>¶
Maximum number of neighbor (spatial and temporal) candidate blocks that the encoder may consider for merging motion predictions. If a merge candidate results in no residual, it is immediately selected as a “skip”. Otherwise the merge candidates are tested as part of motion estimation when searching for the least cost inter option. The max candidate number is encoded in the SPS and determines the bit cost of signaling merge CUs. Default 2
- --rdpenalty <0..2>¶
Penalty for 32x32 intra TU in non-I slices. Default 0
Values: 0:disabled 1:RD-penalty 2:maximum
- --b-intra, --no-b-intra¶
Enables the use of intra modes in very slow presets (--rd 5 or 6). Presets slow to ultrafast do not try intra in B frames regardless of this setting. Default enabled.
- --tskip, --no-tskip¶
Enable intra transform skipping (encode residual as coefficients) for intra coded blocks. Default disabled
- --tskip-fast, --no-tskip-fast¶
Enable fast intra transform skip decisions. Only applicable if transform skip is enabled. Default disabled
- --strong-intra-smoothing, --no-strong-intra-smoothing¶
Enable strong intra smoothing for 32x32 intra blocks. Default enabled
- --constrained-intra, --no-constrained-intra¶
Constrained intra prediction. When generating intra predictions for blocks in inter slices, only intra-coded reference pixels are used. Inter-coded reference pixels are replaced with intra-coded neighbor pixels or default values. The general idea is to block the propagation of reference errors that may have resulted from lossy signals. Default disabled
Mode decision / Analysis¶
- --rect, --no-rect¶
Enable analysis of rectangular motion partitions Nx2N and 2NxN (50/50 splits, two directions). Default disabled
- --amp, --no-amp¶
Enable analysis of asymmetric motion partitions (75/25 splits, four directions). This setting has no effect if rectangular partitions are disabled. Even though there are four possible AMP partitions, only the most likely candidate is tested, based on the results of the rectangular mode tests. Default disabled
- --early-skip, --no-early-skip¶
Measure full CU size (2Nx2N) merge candidates first; if no residual is found the analysis is short circuited. Default disabled
- --fast-cbf, --no-fast-cbf¶
Short circuit analysis if a prediction is found that does not set the coded block flag (aka: no residual was encoded). It prevents the encoder from perhaps finding other predictions that also have no residual but require less signaling bits. Default disabled
- --weightp, -w, --no-weightp¶
Enable weighted prediction in P slices. This enables weighting analysis in the lookahead, which influences slice decisions, and enables weighting analysis in the main encoder which allows P reference samples to have a weight function applied to them prior to using them for motion compensation. In video which has lighting changes, it can give a large improvement in compression efficiency. Default is enabled
- --weightb, --no-weightb¶
Enable weighted prediction in B slices. Default disabled
- --rd <0..6>¶
Level of RDO in mode decision. The higher the value, the more exhaustive the analysis and the more rate distortion optimization is used. The lower the value the faster the encode, the higher the value the smaller the bitstream (in general). Default 3
Note that this table aims for accuracy, but is not necessarily our final target behavior for each mode.
Level Description 0 sa8d mode and split decisions, intra w/ source pixels 1 recon generated (better intra), RDO merge residual 2 RDO splits and merge residual choice 3 RDO mode and split decisions 4 Adds RDO Quant 5 Adds RDO prediction decisions, enables intra modes in B slices 6 Currently same as 5
Range of values: 0: least .. 6: full RDO analysis
- --psy-rd <float>¶
Influence rate distortion optimizations to try to preserve the energy of the source image in the encoded image, at the expense of compression efficiency. 1.0 is a typical value. Default disabled. It only has effect on presets which use full RDO-based decisions (slower, veryslow and placebo)
Range of values: 0 .. 2.0
- --cu-lossless, --no-cu-lossless¶
For each CU, evaluate lossless encode (transform and quant bypass) as a potential rate distortion optimization. If the global option --lossless has been specified, all CUs will be encoded this way unconditionally regardless of whether this option was enabled. Default disabled.
- --signhide, --no-signhide¶
Hide sign bit of one coeff per TU (rdo). The last sign is implied. This requires analyzing all the coefficients to determine if a sign must be toggled, and then to determine which one can be toggled with the least amount of distortion. Default enabled
Slice decision options¶
- --open-gop, --no-open-gop¶
Enable open GOP, allow I-slices to be non-IDR. Default enabled
- --keyint, -I <integer>¶
Max intra period in frames. A special case of infinite-gop (single keyframe at the beginning of the stream) can be triggered with argument -1. Use 1 to force all-intra. Default 250
- --min-keyint, -i <integer>¶
Minimum GOP size. Scenecuts closer together than this are coded as I or P, not IDR.
Range of values: >=0 (0: auto)
- --scenecut <integer>, --no-scenecut¶
- --rc-lookahead <integer>¶
Number of frames for slice-type decision lookahead (a key determining factor for encoder latency). The longer the lookahead buffer the more accurate scenecut decisions will be, and the more effective cuTree will be at improving adaptive quant. Having a lookahead larger than the max keyframe interval is not helpful. Default 20
Range of values: Between the maximum consecutive bframe count (--bframes) and 250
- --b-adapt <integer>¶
Adaptive B frame scheduling. Default 2
Values: 0:none; 1:fast; 2:full(trellis)
- --bframes, -b <0..16>¶
Maximum number of consecutive b-frames. Use --bframes 0 to force all P/I low-latency encodes. Default 4. This parameter has a quadratic effect on the amount of memory allocated and the amount of work performed by the full trellis version of --b-adapt lookahead.
- --bframe-bias <integer>¶
Bias towards B frames in slicetype decision. The higher the bias the more likely x265 is to use B frames. Can be any value between -90 and 100 and is clipped to that range. Default 0
- --b-pyramid, --no-b-pyramid¶
Use B-frames as references, when possible. Default enabled
- --ref <1..16>¶
Max number of L0 references to be allowed. This number has a linear multiplier effect on the amount of work performed in motion search, but will generally have a beneficial affect on compression and distortion. Default 3
Quality, rate control and rate distortion options¶
- --bitrate <integer>¶
Enables single-pass ABR rate control. Specify the target bitrate in kbps. Default is 0 (CRF)
Range of values: An integer greater than 0
- --crf <0..51.0>¶
Quality-controlled variable bitrate. CRF is the default rate control method; it does not try to reach any particular bitrate target, instead it tries to achieve a given uniform quality and the size of the bitstream is determined by the complexity of the source video. The higher the rate factor the higher the quantization and the lower the quality. Default rate factor is 28.0.
- --crf-max <0..51.0>¶
Specify an upper limit to the rate factor which may be assigned to any given frame (ensuring a max QP). This is dangerous when CRF is used in combination with VBV as it may result in buffer underruns. Default disabled
- --crf-min <0..51.0>¶
Specify an lower limit to the rate factor which may be assigned to any given frame (ensuring a min QP). This is dangerous when CRF is used in combination with VBV as it may result in buffer underruns. Default disabled
- --vbv-bufsize <integer>¶
Specify the size of the VBV buffer (kbits). Enables VBV in ABR mode. In CRF mode, --vbv-maxrate must also be specified. Default 0 (vbv disabled)
- --vbv-maxrate <integer>¶
Maximum local bitrate (kbits/sec). Will be used only if vbv-bufsize is also non-zero. Both vbv-bufsize and vbv-maxrate are required to enable VBV in CRF mode. Default 0 (disabled)
- --vbv-init <float>¶
Initial buffer occupancy. The portion of the decode buffer which must be full before the decoder will begin decoding. Determines absolute maximum frame size. Default 0.9
Range of values: 0 - 1.0
- --qp, -q <integer>¶
Specify base quantization parameter for Constant QP rate control. Using this option enables Constant QP rate control. The specified QP is assigned to P slices. I and B slices are given QPs relative to P slices using param->rc.ipFactor and param->rc.pbFactor unless QP 0 is specified, in which case QP 0 is used for all slice types. Note that QP 0 does not cause lossless encoding, it only disables quantization. Default disabled (CRF)
Range of values: an integer from 0 to 51
- --ipratio <float>¶
QP ratio factor between I and P slices. This ratio is used in all of the rate control modes. Some --tune options may change the default value. It is not typically manually specified. Default 1.4
- --pbratio <float>¶
QP ratio factor between P and B slices. This ratio is used in all of the rate control modes. Some --tune options may change the default value. It is not typically manually specified. Default 1.3
- --lossless, --no-lossless¶
Enables true lossless coding by bypassing scaling, transform, quantization and in-loop filter processes. This is used for ultra-high bitrates with zero loss of quality. Reconstructed output pictures are bit-exact to the input pictures. Lossless encodes implicitly have no rate control, all rate control options are ignored. Slower presets will generally achieve better compression efficiency (and generate smaller bitstreams). Default disabled.
- --aq-mode <0|1|2>¶
Adaptive Quantization operating mode. Raise or lower per-block quantization based on complexity analysis of the source image. The more complex the block, the more quantization is used. This offsets the tendency of the encoder to spend too many bits on complex areas and not enough in flat areas.
- AQ enabled
- AQ enabled with auto-variance (default)
- --aq-strength <float>¶
Adjust the strength of the adaptive quantization offsets. Setting --aq-strength to 0 disables AQ. Default 1.0.
Range of values: 0.0 to 3.0
- --cutree, --no-cutree¶
Enable the use of lookahead’s lowres motion vector fields to determine the amount of reuse of each block to tune adaptive quantization factors. CU blocks which are heavily reused as motion reference for later frames are given a lower QP (more bits) while CU blocks which are quickly changed and are not referenced are given less bits. This tends to improve detail in the backgrounds of video with less detail in areas of high motion. Default enabled
- --cbqpoffs <integer>¶
Offset of Cb chroma QP from the luma QP selected by rate control. This is a general way to spend more or less bits on the chroma channel. Default 0
Range of values: -12 to 12
- --crqpoffs <integer>¶
Offset of Cr chroma QP from the luma QP selected by rate control. This is a general way to spend more or less bits on the chroma channel. Default 0
Range of values: -12 to 12
- --lft, --no-lft¶
Toggle deblocking loop filter, default enabled
- --sao, --no-sao¶
Toggle Sample Adaptive Offset loop filter, default enabled
- --sao-lcu-bounds <0|1>¶
How to handle depencency with deblocking filter
- right/bottom boundary areas skipped (default)
- non-deblocked pixels are used
VUI (Video Usability Information) options¶
x265 emits a VUI with only the timing info by default. If the SAR is specified (or read from a Y4M header) it is also included. All other VUI fields must be manually specified.
- --sar <integer|w:h>¶
Sample Aspect Ratio, the ratio of width to height of an individual sample (pixel). The user may supply the width and height explicitly or specify an integer from the predefined list of aspect ratios defined in the HEVC specification. Default undefined (not signaled)
- 1:1 (square)
- --crop-rect <left,top,right,bottom>¶
Define the (overscan) region of the image that does not contain information because it was added to achieve certain resolution or aspect ratio. The decoder may be directed to crop away this region before displaying the images via the --overscan option. Default undefined (not signaled)
- --overscan <show|crop>¶
Specify whether it is appropriate for the decoder to display or crop the overscan area. Default unspecified (not signaled)
- --videoformat <integer|string>¶
Specify the source format of the original analog video prior to digitizing and encoding. Default undefined (not signaled)
- --range <full|limited>¶
Specify output range of black level and range of luma and chroma signals. Default undefined (not signaled)
- --colorprim <integer|string>¶
Specify color primitive to use when converting to RGB. Default undefined (not signaled)
- --transfer <integer|string>¶
Specify transfer characteristics. Default undefined (not signaled)
- --colormatrix <integer|string>¶
Specify color matrix setting i.e set the matrix coefficients used in deriving the luma and chroma. Default undefined (not signaled)
- --chromalocs <0..5>¶
Specify chroma sample location for 4:2:0 inputs. Consult the HEVC specification for a description of these values. Default undefined (not signaled)
- --repeat-headers, --no-repeat-headers¶
If enabled, x265 will emit VPS, SPS, and PPS headers with every keyframe. This is intended for use when you do not have a container to keep the stream headers for you and you want keyframes to be random access points. Default disabled
- --info, --no-info¶
Emit an informational SEI with the stream headers which describes the encoder version, build info, and encode parameters. This is very helpful for debugging purposes but encoding version numbers and build info could make your bitstreams diverge and interfere with regression testing. Default enabled
- --hrd, --no-hrd¶
Enable the signalling of HRD parameters to the decoder. The HRD parameters are carried by the Buffering Period SEI messages and Picture Timing SEI messages providing timing information to the decoder. Default disabled
- --aud, --no-aud¶
Emit an access unit delimiter NAL at the start of each slice access unit. If option:–repeat-headers is not enabled (indicating the user will be writing headers manually at the start of the stream) the very first AUD will be skipped since it cannot be placed at the start of the access unit, where it belongs. Default disabled
- --hash <integer>¶
Emit decoded picture hash SEI, so the decoder may validate the reconstructed pictures and detect data loss. Also useful as a debug feature to validate the encoder state. Default None
- --recon, -r <filename>¶
Output file containing reconstructed images in display order. If the file extension is ”.y4m” the file will contain a YUV4MPEG2 stream header and frame headers. Otherwise it will be a raw YUV file in the encoder’s internal bit depth.
- --recon-depth <integer>¶
Bit-depth of output file. This value defaults to the internal bit depth and currently cannot to be modified.