Release Notes¶
Version 2.6¶
Release date - 29th November, 2017.
New features¶
- x265 can now refine analysis from a previous HEVC encode (using options
--refine-inter
, and--refine-intra
), or a previous AVC encode (using option--refine-mv-type
). The previous encode’s information can be packaged using the x265_analysis_data_t data field available in the x265_picture object. - Basic support for segmented (or chunked) encoding added with
--vbv-end
that can specify the status of CPB at the end of a segment. String this together with--vbv-init
to encode a title as chunks while maintaining VBV compliance! --force-flush
can be used to trigger a premature flush of the encoder. This option is beneficial when input is known to be bursty, and may be at a rate slower than the encoder.- Experimental feature
--lowpass-dct
that uses truncated DCT for transformation.
Encoder enhancements¶
- Slice-parallel mode gets a significant boost in performance, particularly in low-latency mode.
- x265 now officially supported on VS2017.
- x265 now supports all depths from mono0 to mono16 for Y4M format.
API changes¶
- Options that modified PPS dynamically (
--opt-qp-pps
and--opt-ref-list-length-pps
) are now disabled by default to enable users to save bits by not sending headers. If these options are enabled, headers have to be repeated for every GOP. - Rate-control and analysis parameters can dynamically be reconfigured simultaneously via the x265_encoder_reconfig API.
- New API functions to extract intermediate information such as slice-type, scenecut information, reference frames, etc. are now available. This information may be beneficial to integrating applications that are attempting to perform content-adaptive encoding. Refer to documentation on x265_get_slicetype_poc_and_scenecut, and x265_get_ref_frame_list for more details and suggested usage.
- A new API to pass supplemental CTU information to x265 to influence analysis decisions has been added. Refer to documentation on x265_encoder_ctu_info for more details.
Version 2.5¶
Release date - 13th July, 2017.
Encoder enhancements¶
- Improved grain handling with
--tune
grain option by throttling VBV operations to limit QP jumps. - Frame threads are now decided based on number of threads specified in the
--pools
, as opposed to the number of hardware threads available. The mapping was also adjusted to improve quality of the encodes with minimal impact to performance. - CSV logging feature (enabled by
--csv
) is now part of the library; it was previously part of the x265 application. Applications that integrate libx265 can now extract frame level statistics for their encodes by exercising this option in the library. - Globals that track min and max CU sizes, number of slices, and other parameters have now been moved into instance-specific variables. Consequently, applications that invoke multiple instances of x265 library are no longer restricted to use the same settings for these parameter options across the multiple instances.
- x265 can now generate a seprate library that exports the HDR10+ parsing API. Other libraries that wish to use this API may do so by linking against this library. Enable ENABLE_HDR10_PLUS in CMake options and build to generate this library.
- SEA motion search receives a 10% performance boost from AVX2 optimization of its kernels.
- The CSV log is now more elaborate with additional fields such as PU statistics, average-min-max luma and chroma values, etc. Refer to documentation of
--csv
for details of all fields. - x86inc.asm cleaned-up for improved instruction handling.
API changes¶
- New API x265_encoder_ctu_info() introduced to specify suggested partition sizes for various CTUs in a frame. To be used in conjunction with
--ctu-info
to react to the specified partitions appropriately. - Rate-control statistics passed through the x265_picture object for an incoming frame are now used by the encoder.
- Options to scale, reuse, and refine analysis for incoming analysis shared through the x265_analysis_data field in x265_picture for runs that use
--analysis-reuse-mode
load; use options--scale
,--refine-mv
,--refine-inter
, and--refine-intra
to explore. - VBV now has a deterministic mode. Use
--const-vbv
to exercise.
Bug fixes¶
- Several fixes for HDR10+ parsing code including incompatibility with user-specific SEI, removal of warnings, linking issues in linux, etc.
- SEI messages for HDR10 repeated every keyint when HDR options (
--hdr-opt
,--master-display
) specified.
Version 2.4¶
Release date - 22nd April, 2017.
Encoder enhancements¶
- HDR10+ supported. Dynamic metadata may be either supplied as a bitstream via the userSEI field of x265_picture, or as a json jile that can be parsed by x265 and inserted into the bitstream; use
--dhdr10-info
to specify json file name, and--dhdr10-opt
to enable optimization of inserting tone-map information only at IDR frames, or when the tone map information changes. - Lambda tables for 8, 10, and 12-bit encoding revised, resulting in significant enhancement to subjective visual quality.
- Enhanced HDR10 encoding with HDR-specific QP optimzations for chroma, and luma planes of WCG content enabled; use
--hdr-opt
to activate. - Ability to accept analysis information from other previous encodes (that may or may not be x265), and selectively reuse and refine analysis for encoding subsequent passes enabled with the
--refine-level
option. - Slow and veryslow presets receive a 20% speed boost at iso-quality by enabling the
--limit-tu
option. - The bitrate target for x265 can now be dynamically reconfigured via the reconfigure API.
- Performance optimized SAO algorithm introduced via the
--limit-sao
option; seeing 10% speed benefits at faster presets.
API changes¶
- x265_reconfigure API now also accepts rate-control parameters for dynamic reconfiguration.
- Several additions to data fields in x265_analysis to support
--refine-level
: see x265.h for more details.
Bug fixes¶
- Avoid negative offsets in x265 lambda2 table with SAO enabled.
- Fix mingw32 build error.
- Seek now enabled for pipe input, in addition to file-based input
- Fix issue of statically linking core-utils not working in linux.
- Fix visual artifacts with
--multi-pass-opt-distortion
with VBV. - Fix bufferFill stats reported in csv.
Version 2.3¶
Release date - 15th February, 2017.
Encoder enhancements¶
- New SSIM-based RD-cost computation for improved visual quality, and efficiency; use
--ssim-rd
to exercise. - Multi-pass encoding can now share analysis information from prior passes (in addition to rate-control information) to improve performance and quality of subsequent passes; to your multi-pass command-lines that use the
--pass
option, add--multi-pass-opt-distortion
to share distortion information, and--multi-pass-opt-analysis
to share other analysis information. - A dedicated thread pool for lookahead can now be specified with
--lookahead-threads
. - option:–dynamic-rd dynamically increase analysis in areas where the bitrate is being capped by VBV; works for both CRF and ABR encodes with VBV settings.
- The number of bits used to signal the delta-QP can be optimized with the
--opt-cu-delta-qp
option; found to be useful in some scenarios for lower bitrate targets. - Experimental feature option:–aq-motion adds new QP offsets based on relative motion of a block with respect to the movement of the frame.
API changes¶
- Reconfigure API now supports signalling new scaling lists.
- x265 application’s csv functionality now reports time (in milliseconds) taken to encode each frame.
--strict-cbr
enables stricter bitrate adherence by adding filler bits when achieved bitrate is lower than the target; earlier, it was only reacting when the achieved rate was higher.--hdr
can be used to ensure that max-cll and max-fall values are always signaled (even if 0,0).
Bug fixes¶
- Fixed incorrect HW thread counting on MacOS platform.
- Fixed scaling lists support for 4:4:4 videos.
- Inconsistent output fix for
--opt-qp-pss
by removing last slice’s QP from cost calculation. - VTune profiling (enabled using ENABLE_VTUNE CMake option) now also works with 2017 VTune builds.
Version 2.2¶
Release date - 26th December, 2016.
Encoder enhancements¶
- Enhancements to TU selection algorithm with early-outs for improved speed; use
--limit-tu
to exercise. - New motion search method SEA (Successive Elimination Algorithm) supported now as :option: –me 4
- Bit-stream optimizations to improve fields in PPS and SPS for bit-rate savings through
--opt-qp-pps
,--opt-ref-list-length-pps
, and--multi-pass-opt-rps
. - Enabled using VBV constraints when encoding without WPP.
- All param options dumped in SEI packet in bitstream when info selected.
- x265 now supports POWERPC-based systems. Several key functions also have optimized ALTIVEC kernels.
API changes¶
- Options to disable SEI and optional-VUI messages from bitstream made more descriptive.
- New option
--scenecut-bias
to enable controlling bias to mark scene-cuts via cli. - Support mono and mono16 color spaces for y4m input.
--min-cu-size
of 64 no-longer supported for reasons of visual quality (was crashing earlier anyways.)- API for CSV now expects version string for better integration of x265 into other applications.
Bug fixes¶
- Several fixes to slice-based encoding.
--log2-max-poc-lsb
’s range limited according to HEVC spec.- Restrict MVs to within legal boundaries when encoding.
Version 2.1¶
Release date - 27th September, 2016
Encoder enhancements¶
- Support for qg-size of 8
- Support for inserting non-IDR I-frames at scenecuts and when running with settings for fixed-GOP (min-keyint = max-keyint)
- Experimental support for slice-parallelism.
API changes¶
- Encode user-define SEI messages passed in through x265_picture object.
- Disable SEI and VUI messages from the bitstream
- Specify qpmin and qpmax
- Control number of bits to encode POC.
Bug fixes¶
- QP fluctuation fix for first B-frame in mini-GOP for 2-pass encoding with tune-grain.
- Assembly fix for crashes in 32-bit from dct_sse4.
- Threadpool creation fix in windows platform.
Version 2.0¶
Release date - 13th July, 2016
New Features¶
- uhd-bd: Enable Ultra-HD Bluray support
- rskip: Enables skipping recursion to analyze lower CU sizes using heuristics at different rd-levels. Provides good visual quality gains at the highest quality presets.
- rc-grain: Enables a new ratecontrol mode specifically for grainy content. Strictly prevents QP oscillations within and between frames to avoid grain fluctuations.
- tune grain: A fully refactored and improved option to encode film grain content including QP control as well as analysis options.
- asm: ARM assembly is now enabled by default, native or cross compiled builds supported on armv6 and later systems.
API and Key Behaviour Changes¶
- x265_rc_stats added to x265_picture, containing all RC decision points for that frame
- PTL: high tier is now allowed by default, chosen only if necessary
- multi-pass: First pass now uses slow-firstpass by default, enabling better RC decisions in future passes
- pools: fix behaviour on multi-socketed Windows systems, provide more flexibility in determining thread and pool counts
- ABR: improve bits allocation in the first few frames, abr reset, vbv and cutree improved
Misc¶
- An SSIM calculation bug was corrected
Version 1.9¶
Release date - 29th January, 2016
New Features¶
- Quant offsets: This feature allows block level quantization offsets to be specified for every frame. An API-only feature.
- –intra-refresh: Keyframes can be replaced by a moving column of intra blocks in non-keyframes.
- –limit-modes: Intelligently restricts mode analysis.
- –max-luma and –min-luma for luma clipping, optional for HDR use-cases
- Emergency denoising is now enabled by default in very low bitrate, VBV encodes
API Changes¶
- x265_frame_stats returns many additional fields: maxCLL, maxFALL, residual energy, scenecut and latency logging
- –qpfile now supports frametype ‘K”
- x265 now allows CRF ratecontrol in pass N (N greater than or equal to 2)
- Chroma subsampling format YUV 4:0:0 is now fully supported and tested
Presets and Performance¶
- Recently added features lookahead-slices, limit-modes, limit-refs have been enabled by default for applicable presets.
- The default psy-rd strength has been increased to 2.0
- Multi-socket machines now use a single pool of threads that can work cross-socket.
Version 1.8¶
Release date - 10th August, 2015
API Changes¶
- Experimental support for Main12 is now enabled. Partial assembly support exists.
- Main12 and Intra/Still picture profiles are now supported. Still picture profile is detected based on x265_param::totalFrames.
3. Three classes of encoding statistics are now available through the API. a) x265_stats - contains encoding statistics, available through x265_encoder_get_stats() b) x265_frame_stats and x265_cu_stats - contains frame encoding statistics, available through recon x265_picture 4. –csv a) x265_encoder_log() is now deprecated b) x265_param::csvfn is also deprecated 5. –log-level now controls only console logging, frame level console logging has been removed. 6. Support added for new color transfer characteristic ARIB STD-B67
New Features¶
- limit-refs: This feature limits the references analysed for individual CUS. Provides a nice tradeoff between efficiency and performance.
- aq-mode 3: A new aq-mode that provides additional biasing for low-light conditions.
- An improved scene cut detection logic that allows ratecontrol to manage visual quality at fade-ins and fade-outs better.
Preset and Tune Options¶
- tune grain: Increases psyRdoq strength to 10.0, and rdoq-level to 2.
- qg-size: Default value changed to 32.