-
-
Save lextra2/f40641bdb3385ec7a986eed74f45c564 to your computer and use it in GitHub Desktop.
https://github.com/GPUOpen-LibrariesAndSDKs/AMF/tree/master/amf/public/include/components | |
https://github.com/GPUOpen-LibrariesAndSDKs/AMF/blob/master/amf/doc/AMF_Video_Encode_HEVC_API.md | |
https://github.com/GPUOpen-LibrariesAndSDKs/AMF/blob/master/amf/doc/AMF_Video_PreAnalysis_API.md | |
OBS | |
https://github.com/obsproject/obs-studio/blob/master/plugins/obs-ffmpeg/texture-amf.cpp | |
--------------------------------------------------------------------------------------------------------- | |
HevcQP_I=22 HevcQP_P=24 | |
PeakBitrate=16000000 VBVBufferSize=24000000 PAEngineType=4 PASceneChangeDetectionEnable=false | |
PeakBitrate=20000000 VBVBufferSize=80000000 PAEngineType=4 PASceneChangeDetectionEnable=false | |
https://github.com/GPUOpen-LibrariesAndSDKs/AMF/issues/439#issuecomment-1917886326 | |
https://github.com/GPUOpen-LibrariesAndSDKs/AMF/issues/417#issuecomment-2040289753 | |
{ | |
"description": "VirtualDub external encoder profile collection", | |
"externalEncoders": { | |
"sets": { | |
"ProRes": { | |
"videoEncoder": "ProRes", | |
"audioEncoder": "", | |
"multiplexer": "", | |
"description": "", | |
"extension": "", | |
"processPartial": true, | |
"useOutputAsTemp": false | |
}, | |
"ProRes Q4": { | |
"videoEncoder": "ProRes Q4", | |
"audioEncoder": "", | |
"multiplexer": "", | |
"description": "", | |
"extension": "", | |
"processPartial": true, | |
"useOutputAsTemp": false | |
} | |
}, | |
"profiles": { | |
"ProRes": { | |
"name": "ProRes", | |
"program": "ffmpeg.exe", | |
"commandArguments": "-f rawvideo -pix_fmt %(pix_fmt) -s %(width)x%(height) -r %(fpsnum)/%(fpsden) -i - -c:v prores_ks -pix_fmt yuv420p10le %(tempvideofile)", | |
"outputFilename": "%(outputname).mov", | |
"type": 0, | |
"pixelFormat": "yuv444p16le", | |
"inputFormat": 0, | |
"checkReturnCode": true, | |
"logStdout": true, | |
"logStderr": true, | |
"bypassCompression": false, | |
"predeleteOutputFile": false | |
}, | |
"ProRes Q4": { | |
"name": "ProRes Q4", | |
"program": "ffmpeg.exe", | |
"commandArguments": "-f rawvideo -pix_fmt %(pix_fmt) -s %(width)x%(height) -r %(fpsnum)/%(fpsden) -i - -c:v prores_ks -q:v 4 -pix_fmt yuv420p10le %(tempvideofile)", | |
"outputFilename": "%(outputname).mov", | |
"type": 0, | |
"pixelFormat": "yuv444p16le", | |
"inputFormat": 0, | |
"checkReturnCode": true, | |
"logStdout": true, | |
"logStderr": true, | |
"bypassCompression": false, | |
"predeleteOutputFile": false | |
} | |
} | |
} | |
} |
x264 --fullhelp | |
x264 core:164 r3095 baee400 | |
Syntax: x264 [options] -o outfile infile | |
Infile can be raw (in which case resolution is required), | |
or YUV4MPEG (*.y4m), | |
or Avisynth if compiled with support (yes). | |
or libav* formats if compiled with lavf support (yes) or ffms support (no). | |
Outfile type is selected by filename: | |
.264 -> Raw bytestream | |
.mkv -> Matroska | |
.flv -> Flash Video | |
.mp4 -> MP4 if compiled with GPAC or L-SMASH support (lsmash) | |
Output bit depth: 8/10 | |
Options: | |
-h, --help List basic options | |
--longhelp List more options | |
--fullhelp List all options | |
Example usage: | |
Constant quality mode: | |
x264 --crf 24 -o <output> <input> | |
Two-pass with a bitrate of 1000kbps: | |
x264 --pass 1 --bitrate 1000 -o <output> <input> | |
x264 --pass 2 --bitrate 1000 -o <output> <input> | |
Lossless: | |
x264 --qp 0 -o <output> <input> | |
Maximum PSNR at the cost of speed and visual quality: | |
x264 --preset placebo --tune psnr -o <output> <input> | |
Constant bitrate at 1000kbps with a 2 second-buffer: | |
x264 --vbv-bufsize 2000 --bitrate 1000 -o <output> <input> | |
Presets: | |
--profile <string> Force the limits of an H.264 profile | |
Overrides all settings. | |
- baseline: | |
--no-8x8dct --bframes 0 --no-cabac | |
--cqm flat --weightp 0 | |
No interlaced. | |
No lossless. | |
- main: | |
--no-8x8dct --cqm flat | |
No lossless. | |
- high: | |
No lossless. | |
- high10: | |
No lossless. | |
Support for bit depth 8-10. | |
- high422: | |
No lossless. | |
Support for bit depth 8-10. | |
Support for 4:2:0/4:2:2 chroma subsampling. | |
- high444: | |
Support for bit depth 8-10. | |
Support for 4:2:0/4:2:2/4:4:4 chroma subsampling. | |
--preset <string> Use a preset to select encoding settings [medium] | |
Overridden by user settings. | |
- ultrafast: | |
--no-8x8dct --aq-mode 0 --b-adapt 0 | |
--bframes 0 --no-cabac --no-deblock | |
--no-mbtree --me dia --no-mixed-refs | |
--partitions none --rc-lookahead 0 --ref 1 | |
--scenecut 0 --subme 0 --trellis 0 | |
--no-weightb --weightp 0 | |
- superfast: | |
--no-mbtree --me dia --no-mixed-refs | |
--partitions i8x8,i4x4 --rc-lookahead 0 | |
--ref 1 --subme 1 --trellis 0 --weightp 1 | |
- veryfast: | |
--no-mixed-refs --rc-lookahead 10 | |
--ref 1 --subme 2 --trellis 0 --weightp 1 | |
- faster: | |
--no-mixed-refs --rc-lookahead 20 | |
--ref 2 --subme 4 --weightp 1 | |
- fast: | |
--rc-lookahead 30 --ref 2 --subme 6 | |
--weightp 1 | |
- medium: | |
Default settings apply. | |
- slow: | |
--direct auto --rc-lookahead 50 --ref 5 | |
--subme 8 --trellis 2 | |
- slower: | |
--b-adapt 2 --direct auto --me umh | |
--partitions all --rc-lookahead 60 | |
--ref 8 --subme 9 --trellis 2 | |
- veryslow: | |
--b-adapt 2 --bframes 8 --direct auto | |
--me umh --merange 24 --partitions all | |
--ref 16 --subme 10 --trellis 2 | |
--rc-lookahead 60 | |
- placebo: | |
--bframes 16 --b-adapt 2 --direct auto | |
--slow-firstpass --no-fast-pskip | |
--me tesa --merange 24 --partitions all | |
--rc-lookahead 60 --ref 16 --subme 11 | |
--trellis 2 | |
--tune <string> Tune the settings for a particular type of source | |
or situation | |
Overridden by user settings. | |
Multiple tunings are separated by commas. | |
Only one psy tuning can be used at a time. | |
- film (psy tuning): | |
--deblock -1:-1 --psy-rd <unset>:0.15 | |
- animation (psy tuning): | |
--bframes {+2} --deblock 1:1 | |
--psy-rd 0.4:<unset> --aq-strength 0.6 | |
--ref {Double if >1 else 1} | |
- grain (psy tuning): | |
--aq-strength 0.5 --no-dct-decimate | |
--deadzone-inter 6 --deadzone-intra 6 | |
--deblock -2:-2 --ipratio 1.1 | |
--pbratio 1.1 --psy-rd <unset>:0.25 | |
--qcomp 0.8 | |
- stillimage (psy tuning): | |
--aq-strength 1.2 --deblock -3:-3 | |
--psy-rd 2.0:0.7 | |
- psnr (psy tuning): | |
--aq-mode 0 --no-psy | |
- ssim (psy tuning): | |
--aq-mode 2 --no-psy | |
- fastdecode: | |
--no-cabac --no-deblock --no-weightb | |
--weightp 0 | |
- zerolatency: | |
--bframes 0 --force-cfr --no-mbtree | |
--sync-lookahead 0 --sliced-threads | |
--rc-lookahead 0 | |
--slow-firstpass Don't force these faster settings with --pass 1: | |
--no-8x8dct --me dia --partitions none | |
--ref 1 --subme {2 if >2 else unchanged} | |
--trellis 0 --fast-pskip | |
Frame-type options: | |
-I, --keyint <integer or "infinite"> Maximum GOP size [250] | |
-i, --min-keyint <integer> Minimum GOP size [auto] | |
--no-scenecut Disable adaptive I-frame decision | |
--scenecut <integer> How aggressively to insert extra I-frames [40] | |
--intra-refresh Use Periodic Intra Refresh instead of IDR frames | |
-b, --bframes <integer> Number of B-frames between I and P [3] | |
--b-adapt <integer> Adaptive B-frame decision method [1] | |
Higher values may lower threading efficiency. | |
- 0: Disabled | |
- 1: Fast | |
- 2: Optimal (slow with high --bframes) | |
--b-bias <integer> Influences how often B-frames are used [0] | |
--b-pyramid <string> Keep some B-frames as references [normal] | |
- none: Disabled | |
- strict: Strictly hierarchical pyramid | |
- normal: Non-strict (not Blu-ray compatible) | |
--open-gop Use recovery points to close GOPs | |
Only available with b-frames | |
--no-cabac Disable CABAC | |
-r, --ref <integer> Number of reference frames [3] | |
--no-deblock Disable loop filter | |
-f, --deblock <alpha:beta> Loop filter parameters [0:0] | |
--slices <integer> Number of slices per frame; forces rectangular | |
slices and is overridden by other slicing options | |
--slices-max <integer> Absolute maximum slices per frame; overrides | |
slice-max-size/slice-max-mbs when necessary | |
--slice-max-size <integer> Limit the size of each slice in bytes | |
--slice-max-mbs <integer> Limit the size of each slice in macroblocks (max) | |
--slice-min-mbs <integer> Limit the size of each slice in macroblocks (min) | |
--tff Enable interlaced mode (top field first) | |
--bff Enable interlaced mode (bottom field first) | |
--constrained-intra Enable constrained intra prediction. | |
--pulldown <string> Use soft pulldown to change frame rate | |
- none, 22, 32, 64, double, triple, euro (requires cfr input) | |
--fake-interlaced Flag stream as interlaced but encode progressive. | |
Makes it possible to encode 25p and 30p Blu-Ray | |
streams. Ignored in interlaced mode. | |
--frame-packing <integer> For stereoscopic videos define frame arrangement | |
- 0: checkerboard - pixels are alternatively from L and R | |
- 1: column alternation - L and R are interlaced by column | |
- 2: row alternation - L and R are interlaced by row | |
- 3: side by side - L is on the left, R on the right | |
- 4: top bottom - L is on top, R on bottom | |
- 5: frame alternation - one view per frame | |
- 6: mono - 2D frame without any frame packing | |
- 7: tile format - L is on top-left, R split across | |
Ratecontrol: | |
-q, --qp <integer> Force constant QP (0-81, 0=lossless) | |
-B, --bitrate <integer> Set bitrate (kbit/s) | |
--crf <float> Quality-based VBR (-12-51) [23.0] | |
--rc-lookahead <integer> Number of frames for frametype lookahead [40] | |
--vbv-maxrate <integer> Max local bitrate (kbit/s) [0] | |
--vbv-bufsize <integer> Set size of the VBV buffer (kbit) [0] | |
--vbv-init <float> Initial VBV buffer occupancy [0.9] | |
--crf-max <float> With CRF+VBV, limit RF to this value | |
May cause VBV underflows! | |
--qpmin <integer> Set min QP [0] | |
--qpmax <integer> Set max QP [81] | |
--qpstep <integer> Set max QP step [4] | |
--ratetol <float> Tolerance of ABR ratecontrol and VBV [1.0] | |
--ipratio <float> QP factor between I and P [1.40] | |
--pbratio <float> QP factor between P and B [1.30] - Has no effect if mbtree is enabled (default) | |
--chroma-qp-offset <integer> QP difference between chroma and luma [0] | |
--aq-mode <integer> AQ method [1] | |
- 0: Disabled | |
- 1: Variance AQ (complexity mask) | |
- 2: Auto-variance AQ | |
- 3: Auto-variance AQ with bias to dark scenes | |
--aq-strength <float> Reduces blocking and blurring in flat and | |
textured areas. [1.0] | |
-p, --pass <integer> Enable multipass ratecontrol | |
- 1: First pass, creates stats file | |
- 2: Last pass, does not overwrite stats file | |
- 3: Nth pass, overwrites stats file | |
--stats <string> Filename for 2 pass stats ["x264_2pass.log"] | |
--no-mbtree Disable mb-tree ratecontrol. | |
--qcomp <float> QP curve compression [0.60] | |
--cplxblur <float> Reduce fluctuations in QP (before curve compression) [20.0] | |
--qblur <float> Reduce fluctuations in QP (after curve compression) [0.5] | |
--zones <zone0>/<zone1>/... Tweak the bitrate of regions of the video | |
Each zone is of the form | |
<start frame>,<end frame>,<option> | |
where <option> is either | |
q=<integer> (force QP) | |
or b=<float> (bitrate multiplier) | |
--qpfile <string> Force frametypes and QPs for some or all frames | |
Format of each line: framenumber frametype QP | |
QP is optional (none lets x264 choose). Frametypes: I,i,K,P,B,b. | |
K=<I or i> depending on open-gop setting | |
QPs are restricted by qpmin/qpmax. | |
Analysis: | |
-A, --partitions <string> Partitions to consider ["p8x8,b8x8,i8x8,i4x4"] | |
- p8x8, p4x4, b8x8, i8x8, i4x4, none, all | |
(p4x4 requires p8x8. i8x8 requires --8x8dct.) | |
--direct <string> Direct MV prediction mode ["spatial"] | |
- none, spatial, temporal, auto | |
--no-weightb Disable weighted prediction for B-frames | |
--weightp <integer> Weighted prediction for P-frames [2] | |
- 0: Disabled | |
- 1: Weighted refs | |
- 2: Weighted refs + Duplicates | |
--me <string> Integer pixel motion estimation method ["hex"] | |
- dia: diamond search, radius 1 (fast) | |
- hex: hexagonal search, radius 2 | |
- umh: uneven multi-hexagon search | |
- esa: exhaustive search | |
- tesa: hadamard exhaustive search (slow) | |
--merange <integer> Maximum motion vector search range [16] | |
--mvrange <integer> Maximum motion vector length [-1 (auto)] | |
--mvrange-thread <int> Minimum buffer between threads [-1 (auto)] | |
-m, --subme <integer> Subpixel motion estimation and mode decision [7] | |
- 0: fullpel only (not recommended) | |
- 1: SAD mode decision, one qpel iteration | |
- 2: SATD mode decision | |
- 3-5: Progressively more qpel | |
- 6: RD mode decision for I/P-frames | |
- 7: RD mode decision for all frames | |
- 8: RD refinement for I/P-frames | |
- 9: RD refinement for all frames | |
- 10: QP-RD - requires trellis=2, aq-mode>0 | |
- 11: Full RD: disable all early terminations | |
--psy-rd <float:float> Strength of psychovisual optimization ["1.0:0.0"] | |
#1: RD (requires subme>=6) | |
#2: Trellis (requires trellis, experimental) | |
--no-psy Disable all visual optimizations that worsen | |
both PSNR and SSIM. | |
--no-mixed-refs Don't decide references on a per partition basis | |
--no-chroma-me Ignore chroma in motion estimation | |
--no-8x8dct Disable adaptive spatial transform size | |
-t, --trellis <integer> Trellis RD quantization. [1] | |
- 0: disabled | |
- 1: enabled only on the final encode of a MB | |
- 2: enabled on all mode decisions | |
--no-fast-pskip Disables early SKIP detection on P-frames | |
--no-dct-decimate Disables coefficient thresholding on P-frames | |
--nr <integer> Noise reduction [0] | |
--deadzone-inter <int> Set the size of the inter luma quantization deadzone [21] | |
--deadzone-intra <int> Set the size of the intra luma quantization deadzone [11] | |
Deadzones should be in the range 0 - 32. | |
--cqm <string> Preset quant matrices ["flat"] | |
- flat, jvt | |
--cqmfile <string> Read custom quant matrices from a JM-compatible file | |
Overrides any other --cqm* options. | |
--cqm4 <list> Set all 4x4 quant matrices | |
Takes a comma-separated list of 16 integers. | |
--cqm8 <list> Set all 8x8 quant matrices | |
Takes a comma-separated list of 64 integers. | |
--cqm4i, --cqm4p, --cqm8i, --cqm8p <list> | |
Set both luma and chroma quant matrices | |
--cqm4iy, --cqm4ic, --cqm4py, --cqm4pc <list> | |
Set individual quant matrices | |
Video Usability Info (Annex E): | |
The VUI settings are not used by the encoder but are merely suggestions to | |
the playback equipment. See doc/vui.txt for details. Use at your own risk. | |
--overscan <string> Specify crop overscan setting ["undef"] | |
- undef, show, crop | |
--videoformat <string> Specify video format ["undef"] | |
- component, pal, ntsc, secam, mac, undef | |
--range <string> Specify color range ["auto"] | |
- auto, tv, pc | |
--colorprim <string> Specify color primaries ["undef"] | |
- undef, bt709, bt470m, bt470bg, smpte170m, | |
smpte240m, film, bt2020, smpte428, | |
smpte431, smpte432 | |
--transfer <string> Specify transfer characteristics ["undef"] | |
- undef, bt709, bt470m, bt470bg, smpte170m, | |
smpte240m, linear, log100, log316, | |
iec61966-2-4, bt1361e, iec61966-2-1, | |
bt2020-10, bt2020-12, smpte2084, smpte428, | |
arib-std-b67 | |
--colormatrix <string> Specify color matrix setting ["???"] | |
- undef, bt709, fcc, bt470bg, smpte170m, | |
smpte240m, GBR, YCgCo, bt2020nc, bt2020c, | |
smpte2085, chroma-derived-nc, | |
chroma-derived-c, ICtCp | |
--chromaloc <integer> Specify chroma sample location (0 to 5) [0] | |
--mastering-display <string> Specify 'G(x,y)B(x,y)R(x,y)WP(x,y)L(max,min)' | |
for primaries, white point, and display brightness | |
--cll <string> Specify 'max_content,max_frame_average' content | |
light levels | |
--alternative-transfer <string> Specify an alternative transfer | |
characteristics ["undef"] | |
- same values as --transfer | |
--nal-hrd <string> Signal HRD information (requires vbv-bufsize) | |
- none, vbr, cbr (cbr not allowed in .mp4) | |
--filler Force hard-CBR and generate filler (implied by | |
--nal-hrd cbr) | |
--pic-struct Force pic_struct in Picture Timing SEI | |
--crop-rect <string> Add 'left,top,right,bottom' to the bitstream-level | |
cropping rectangle | |
Input/Output: | |
-o, --output <string> Specify output file | |
--muxer <string> Specify output container format ["auto"] | |
- auto, raw, mkv, flv, mp4 | |
--demuxer <string> Specify input container format ["auto"] | |
- auto, raw, y4m, avs, lavf | |
--input-fmt <string> Specify input file format (requires lavf support) | |
--input-csp <string> Specify input colorspace format for raw input | |
- valid csps for `raw' demuxer: | |
i400, i420, yv12, nv12, nv21, i422, yv16, nv16, | |
yuyv, uyvy, i444, yv24, bgr, bgra, rgb | |
- valid csps for `lavf' demuxer: | |
yuv420p, yuyv422, rgb24, bgr24, yuv422p, | |
yuv444p, yuv410p, yuv411p, gray, monow, monob, | |
pal8, yuvj420p, yuvj422p, yuvj444p, uyvy422, | |
uyyvyy411, bgr8, bgr4, bgr4_byte, rgb8, rgb4, | |
rgb4_byte, nv12, nv21, argb, rgba, abgr, bgra, | |
gray16be, gray16le, yuv440p, yuvj440p, | |
yuva420p, rgb48be, rgb48le, rgb565be, rgb565le, | |
rgb555be, rgb555le, bgr565be, bgr565le, | |
bgr555be, bgr555le, vaapi_moco, vaapi_idct, | |
vaapi_vld, yuv420p16le, yuv420p16be, | |
yuv422p16le, yuv422p16be, yuv444p16le, | |
yuv444p16be, dxva2_vld, rgb444le, rgb444be, | |
bgr444le, bgr444be, ya8, bgr48be, bgr48le, | |
yuv420p9be, yuv420p9le, yuv420p10be, | |
yuv420p10le, yuv422p10be, yuv422p10le, | |
yuv444p9be, yuv444p9le, yuv444p10be, | |
yuv444p10le, yuv422p9be, yuv422p9le, gbrp, | |
gbrp9be, gbrp9le, gbrp10be, gbrp10le, gbrp16be, | |
gbrp16le, yuva422p, yuva444p, yuva420p9be, | |
yuva420p9le, yuva422p9be, yuva422p9le, | |
yuva444p9be, yuva444p9le, yuva420p10be, | |
yuva420p10le, yuva422p10be, yuva422p10le, | |
yuva444p10be, yuva444p10le, yuva420p16be, | |
yuva420p16le, yuva422p16be, yuva422p16le, | |
yuva444p16be, yuva444p16le, vdpau, xyz12le, | |
xyz12be, nv16, nv20le, nv20be, rgba64be, | |
rgba64le, bgra64be, bgra64le, yvyu422, ya16be, | |
ya16le, gbrap, gbrap16be, gbrap16le, qsv, mmal, | |
d3d11va_vld, cuda, 0rgb, rgb0, 0bgr, bgr0, | |
yuv420p12be, yuv420p12le, yuv420p14be, | |
yuv420p14le, yuv422p12be, yuv422p12le, | |
yuv422p14be, yuv422p14le, yuv444p12be, | |
yuv444p12le, yuv444p14be, yuv444p14le, | |
gbrp12be, gbrp12le, gbrp14be, gbrp14le, | |
yuvj411p, bayer_bggr8, bayer_rggb8, | |
bayer_gbrg8, bayer_grbg8, bayer_bggr16le, | |
bayer_bggr16be, bayer_rggb16le, bayer_rggb16be, | |
bayer_gbrg16le, bayer_gbrg16be, bayer_grbg16le, | |
bayer_grbg16be, xvmc, yuv440p10le, yuv440p10be, | |
yuv440p12le, yuv440p12be, ayuv64le, ayuv64be, | |
videotoolbox_vld, p010le, p010be, gbrap12be, | |
gbrap12le, gbrap10be, gbrap10le, mediacodec, | |
gray12be, gray12le, gray10be, gray10le, p016le, | |
p016be, d3d11, gray9be, gray9le, gbrpf32be, | |
gbrpf32le, gbrapf32be, gbrapf32le, drm_prime, | |
opencl, gray14be, gray14le, grayf32be, | |
grayf32le, yuva422p12be, yuva422p12le, | |
yuva444p12be, yuva444p12le, nv24, nv42, vulkan, | |
y210be, y210le, x2rgb10le, x2rgb10be | |
--output-csp <string> Specify output colorspace ["i420"] | |
- i400, i420, i422, i444, rgb | |
--input-depth <integer> Specify input bit depth for raw input | |
--output-depth <integer> Specify output bit depth | |
--input-range <string> Specify input color range ["auto"] | |
- auto, tv, pc | |
--input-res <intxint> Specify input resolution (width x height) | |
--index <string> Filename for input index file | |
--sar width:height Specify Sample Aspect Ratio | |
--fps <float|rational> Specify framerate | |
--seek <integer> First frame to encode | |
--frames <integer> Maximum number of frames to encode | |
--level <string> Specify level (as defined by Annex A) | |
--bluray-compat Enable compatibility hacks for Blu-ray support | |
--avcintra-class <integer> Use compatibility hacks for AVC-Intra class | |
- 50, 100, 200, 300, 480 | |
--avcintra-flavor <string> AVC-Intra flavor ["panasonic"] | |
- panasonic, sony | |
--stitchable Don't optimize headers based on video content | |
Ensures ability to recombine a segmented encode | |
-v, --verbose Print stats for each frame | |
--no-progress Don't show the progress indicator while encoding | |
--quiet Quiet Mode | |
--log-level <string> Specify the maximum level of logging ["info"] | |
- none, error, warning, info, debug | |
--psnr Enable PSNR computation | |
--ssim Enable SSIM computation | |
--threads <integer> Force a specific number of threads. Default: 1.5x Logical Cores | |
--lookahead-threads <integer> Force a specific number of lookahead threads. | |
--sliced-threads Low-latency but lower-efficiency threading | |
--thread-input Run Avisynth in its own thread | |
--sync-lookahead <integer> Number of buffer frames for threaded lookahead. | |
--non-deterministic Slightly improve quality of SMP, at the cost of repeatability | |
--cpu-independent Ensure exact reproducibility across different cpus, | |
as opposed to letting them select different algorithms | |
--asm <integer> Override CPU detection | |
--no-asm Disable all CPU optimizations | |
--opencl Enable use of OpenCL | |
--opencl-clbin <string> Specify path of compiled OpenCL kernel cache | |
--opencl-device <integer> Specify OpenCL device ordinal | |
--dump-yuv <string> Save reconstructed frames | |
--sps-id <integer> Set SPS and PPS id numbers [0] | |
--aud Use access unit delimiters | |
--force-cfr Force constant framerate timestamp generation | |
--tcfile-in <string> Force timestamp generation with timecode file | |
--tcfile-out <string> Output timecode v2 file from input timestamps | |
--timebase <int/int> Specify timebase numerator and denominator | |
<integer> Specify timebase numerator for input timecode file | |
or specify timebase denominator for other input | |
--dts-compress Eliminate initial delay with container DTS hack |
x265 [info]: HEVC encoder version 3.5+115-3cf6c1e53 | |
x265 [info]: build info [Windows][MSVC 1939][64 bit] 8bit+10bit+12bit | |
Syntax: x265 [options] infile [-o] outfile | |
infile can be YUV or Y4M | |
outfile is raw HEVC bitstream | |
Executable Options: | |
-h/--help Show this help text and exit | |
--fullhelp Show all options and exit | |
-V/--version Show version info and exit | |
Output Options: | |
-o/--output <filename> Bitstream output file name | |
-D/--output-depth 8|10|12 Output bit depth (also internal bit depth). Default 8 | |
--log-level <string> Logging level: none error warning info debug full. Default full | |
--no-progress Disable CLI progress reports | |
--csv <filename> Comma separated log file, if csv-log-level > 0 frame level statistics, else one line per run | |
--csv-log-level <integer> Level of csv logging, if csv-log-level > 0 frame level statistics, else one line per run: 0-2 | |
Input Options: | |
--input <filename> Raw YUV or Y4M input file name. `-` for stdin | |
--y4m Force parsing of input stream as YUV4MPEG2 regardless of file extension | |
--fps <float|rational> Source frame rate (float or num/denom), auto-detected if Y4M | |
--input-res WxH Source picture size [w x h], auto-detected if Y4M | |
--input-depth <integer> Bit-depth of input file. Default 8 | |
--input-csp <string> Chroma subsampling, auto-detected if Y4M | |
0 - i400 (4:0:0 monochrome) | |
1 - i420 (4:2:0 default) | |
2 - i422 (4:2:2) | |
3 - i444 (4:4:4) | |
--dhdr10-info <filename> JSON file containing the Creative Intent Metadata to be encoded as Dynamic Tone Mapping | |
--[no-]dhdr10-opt Insert tone mapping SEI only for IDR frames and when the tone mapping information changes. Default disabled | |
--dolby-vision-profile <float|integer> Specifies Dolby Vision profile ID. Currently only profile 5, profile 8.1 and profile 8.2 enabled. Specified as '5' or '50'. Default 0 (disabled). | |
--dolby-vision-rpu <filename> File containing Dolby Vision RPU metadata. | |
If given, x265's Dolby Vision metadata parser will fill the RPU field of input pictures with the metadata read from the file. Default NULL(disabled). | |
--nalu-file <filename> Text file containing SEI messages in the following format : <POC><space><PREFIX><space><NAL UNIT TYPE>/<SEI TYPE><space><SEI Payload> | |
-f/--frames <integer> Maximum number of frames to encode. Default all | |
--seek <integer> First frame to encode | |
--[no-]interlace <bff|tff> Indicate input pictures are interlace fields in temporal order. Default progressive | |
--[no-]field Enable or disable field coding. Default disabled | |
--dither Enable dither if downscaling to 8 bit pixels. Default disabled | |
--[no-]copy-pic Copy buffers of input picture in frame. Default enabled | |
Quality reporting metrics: | |
--[no-]ssim Enable reporting SSIM metric scores. Default disabled | |
--[no-]psnr Enable reporting PSNR metric scores. Default disabled | |
Profile, Level, Tier: | |
-P/--profile <string> Enforce an encode profile: main, main10, mainstillpicture | |
--level-idc <integer|float> Force a minimum required decoder level (as '5.0' or '50') | |
--[no-]high-tier If a decoder level is specified, this modifier selects High tier of that level | |
--uhd-bd Enable UHD Bluray compatibility support | |
--[no-]allow-non-conformance Allow the encoder to generate profile NONE bitstreams. Default disabled | |
Threading, performance: | |
--pools <integer,...> Comma separated thread count per thread pool (pool per NUMA node) | |
'-' implies no threads on node, '+' implies one thread per core on node | |
-F/--frame-threads <integer> Number of concurrently encoded frames. 0: auto-determined by core count | |
--[no-]wpp Enable Wavefront Parallel Processing. Default enabled | |
--[no-]slices <integer> Enable Multiple Slices feature. Default 1 | |
--[no-]pmode Parallel mode analysis. Default disabled | |
--[no-]pme Parallel motion estimation. Default disabled | |
--[no-]asm <bool|int|string> Override CPU detection. Default: auto | |
Presets: | |
-p/--preset <string> Trade off performance for compression efficiency. Default medium | |
ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow, or placebo | |
-t/--tune <string> Tune the settings for a particular type of source or situation: | |
psnr, ssim, grain, zerolatency, fastdecode | |
Quad-Tree size and depth: | |
-s/--ctu <64|32|16> Maximum CU size (WxH). Default 64 | |
--min-cu-size <64|32|16|8> Minimum CU size (WxH). Default 8 | |
--max-tu-size <32|16|8|4> Maximum TU size (WxH). Default 32 | |
--tu-intra-depth <integer> Max TU recursive depth for intra CUs. Default 1 | |
--tu-inter-depth <integer> Max TU recursive depth for inter CUs. Default 1 | |
--limit-tu <0..4> Enable early exit from TU recursion for inter coded blocks. Default 0 | |
Analysis: | |
--rd <1..6> Level of RDO in mode decision 1:least....6:full RDO. Default 3 | |
--[no-]psy-rd <0..5.0> Strength of psycho-visual rate distortion optimization, 0 to disable. Default 2.0 | |
--[no-]rdoq-level <0|1|2> Level of RDO in quantization 0:none, 1:levels, 2:levels & coding groups. Default 0 | |
--[no-]psy-rdoq <0..50.0> Strength of psycho-visual optimization in RDO quantization, 0 to disable. Default 0.0 | |
--dynamic-rd <0..4.0> Strength of dynamic RD, 0 to disable. Default 0.00 | |
--[no-]ssim-rd Enable ssim rate distortion optimization, 0 to disable. Default disabled | |
--[no-]rd-refine Enable QP based RD refinement for rd levels 5 and 6. Default disabled | |
--[no-]early-skip Enable early SKIP detection. Default enabled | |
--rskip <Integer> Enable recursion skip for early exit from CTU analysis during inter prediction. 1: exit using RD cost & CU homogeneity. 2: exit using CU edge density. 0: disabled. Default 1 | |
--rskip-edge-threshold Threshold in terms of percentage (an integer of range [0,100]) for minimum edge density in CU's used to prune the recursion depth. Applicable only to rskip mode 2. Value is preset dependent. Default: 5 | |
--[no-]tskip-fast Enable fast intra transform skipping. Default disabled | |
--[no-]splitrd-skip Enable skipping split RD analysis when sum of split CU rdCost larger than one split CU rdCost for Intra CU. Default disabled | |
--nr-intra <integer> An integer value in range of 0 to 2000, which denotes strength of noise reduction in intra CUs. Default 0 | |
--nr-inter <integer> An integer value in range of 0 to 2000, which denotes strength of noise reduction in inter CUs. Default 0 | |
--ctu-info <integer> Enable receiving ctu information asynchronously and determine reaction to the CTU information (0, 1, 2, 4, 6) Default 0 | |
- 1: force the partitions if CTU information is present | |
- 2: functionality of (1) and reduce qp if CTU information has changed | |
- 4: functionality of (1) and force Inter modes when CTU Information has changed, merge/skip otherwise | |
Enable this option only when planning to invoke the API function x265_encoder_ctu_info to copy ctu-info asynchronously | |
Coding tools: | |
-w/--[no-]weightp Enable weighted prediction in P slices. Default enabled | |
--[no-]weightb Enable weighted prediction in B slices. Default disabled | |
--[no-]cu-lossless Consider lossless mode in CU RDO decisions. Default disabled | |
--[no-]signhide Hide sign bit of one coeff per TU (rdo). Default enabled | |
--[no-]tskip Enable intra 4x4 transform skipping. Default disabled | |
Temporal / motion search options: | |
--max-merge <1..5> Maximum number of merge candidates. Default 3 | |
--ref <integer> max number of L0 references to be allowed (1 .. 16) Default 3 | |
--limit-refs <0|1|2|3> Limit references per depth (1) or CU (2) or both (3). Default 1 | |
--me <string> Motion search method dia hex umh star full. Default 1 | |
-m/--subme <integer> Amount of subpel refinement to perform (0:least .. 7:most). Default 2 | |
--merange <integer> Motion search range. Default 57 | |
--[no-]rect Enable rectangular motion partitions Nx2N and 2NxN. Default disabled | |
--[no-]amp Enable asymmetric motion partitions, requires --rect. Default disabled | |
--[no-]limit-modes Limit rectangular and asymmetric motion predictions. Default 0 | |
--[no-]temporal-mvp Enable temporal MV predictors. Default enabled | |
--[no-]hme Enable Hierarchical Motion Estimation. Default disabled | |
--hme-search <string> Motion search-method for HME L0,L1 and L2. Default(L0,L1,L2) is 1,2,2 | |
--hme-range <int>,<int>,<int> Motion search-range for HME L0,L1 and L2. Default(L0,L1,L2) is 16,32,48 | |
Spatial / intra options: | |
--[no-]strong-intra-smoothing Enable strong intra smoothing for 32x32 blocks. Default enabled | |
--[no-]constrained-intra Constrained intra prediction (use only intra coded reference pixels) Default disabled | |
--[no-]b-intra Enable intra in B frames in veryslow presets. Default enabled | |
--[no-]fast-intra Enable faster search method for angular intra predictions. Default disabled | |
--rdpenalty <0..2> penalty for 32x32 intra TU in non-I slices. 0:disabled 1:RD-penalty 2:maximum. Default 0 | |
Slice decision options: | |
--[no-]open-gop Enable open-GOP, allows I slices to be non-IDR. Default enabled | |
--cra-nal Force nal type to CRA to all frames expect first frame, works only with keyint 1. Default disabled | |
-I/--keyint <integer> Max IDR period in frames. -1 for infinite-gop. Default 250 | |
-i/--min-keyint <integer> Scenecuts closer together than this are coded as I, not IDR. Default: auto | |
--gop-lookahead <integer> Extends gop boundary if a scenecut is found within this from keyint boundary. Default 0 | |
--no-scenecut Disable adaptive I-frame decision | |
--scenecut <integer> How aggressively to insert extra I-frames. Default 40 | |
--scenecut-bias <0..100.0> Bias for scenecut detection. Default 5.00 | |
--hist-scenecut Enables histogram based scene-cut detection using histogram based algorithm. | |
--no-hist-scenecut Disables histogram based scene-cut detection using histogram based algorithm. | |
--[no-]fades Enable detection and handling of fade-in regions. Default disabled | |
--scenecut-aware-qp <0..3> Enable increasing QP for frames inside the scenecut window around scenecut. Default disabled | |
0 - Disabled | |
1 - Forward masking | |
2 - Backward masking | |
3 - Bidirectional masking | |
--masking-strength <string> Comma separated values which specify the duration and offset for the QP increment for inter-frames when scenecut-aware-qp is enabled. | |
--scenecut-qp-config <file> File containing scenecut-aware-qp mode, window duration and offsets settings required for the masking. Works only with --pass 2 | |
--radl <integer> Number of RADL pictures allowed in front of IDR. Default 0 | |
--intra-refresh Use Periodic Intra Refresh instead of IDR frames | |
--rc-lookahead <integer> Number of frames for frame-type lookahead (determines encoder latency) Default 20 | |
--lookahead-slices <0..16> Number of slices to use per lookahead cost estimate. Default 8 | |
--lookahead-threads <integer> Number of threads to be dedicated to perform lookahead only. Default 0 | |
-b/--bframes <0..16> Maximum number of consecutive b-frames. Default 4 | |
--bframe-bias <integer> Bias towards B frame decisions. Default 0 | |
--b-adapt <0..2> 0 - none, 1 - fast, 2 - full (trellis) adaptive B frame scheduling. Default 2 | |
--[no-]b-pyramid Use B-frames as references. Default enabled | |
--qpfile <string> Force frametypes and QPs for some or all frames | |
Format of each line: framenumber frametype QP | |
QP is optional (none lets x265 choose). Frametypes: I,i,K,P,B,b. | |
QPs are restricted by qpmin/qpmax. | |
--force-flush <integer> Force the encoder to flush frames. Default 0 | |
0 - flush the encoder only when all the input pictures are over. | |
1 - flush all the frames even when the input is not over. Slicetype decision may change with this option. | |
2 - flush the slicetype decided frames only. | |
--[no-]-hrd-concat Set HRD concatenation flag for the first keyframe in the buffering period SEI. Default disabled | |
Rate control, Adaptive Quantization: | |
--bitrate <integer> Target bitrate (kbps) for ABR (implied). Default 0 | |
-q/--qp <integer> QP for P slices in CQP mode (implied). --ipratio and --pbration determine other slice QPs | |
--crf <float> Quality-based VBR (0-51). Default 28.0 | |
--[no-]lossless Enable lossless: bypass transform, quant and loop filters globally. Default disabled | |
--crf-max <float> With CRF+VBV, limit RF to this value. Default 0.000000 | |
May cause VBV underflows! | |
--crf-min <float> With CRF+VBV, limit RF to this value. Default 0.000000 | |
this specifies a minimum rate factor value for encode! | |
--vbv-maxrate <integer> Max local bitrate (kbit/s). Default 0 | |
--vbv-bufsize <integer> Set size of the VBV buffer (kbit). Default 0 | |
--vbv-init <float> Initial VBV buffer occupancy (fraction of bufsize or in kbits). Default 0.90 | |
--vbv-end <float> Final VBV buffer emptiness (fraction of bufsize or in kbits). Default 0 (disabled) | |
--min-vbv-fullness <double> Minimum VBV fullness percentage to be maintained. Default 50.00 | |
--max-vbv-fullness <double> Maximum VBV fullness percentage to be maintained. Default 80.00 | |
--vbv-end-fr-adj <float> Frame from which qp has to be adjusted to achieve final decode buffer emptiness. Default 0 | |
--chunk-start <integer> First frame of the chunk. Default 0 (disabled) | |
--chunk-end <integer> Last frame of the chunk. Default 0 (disabled) | |
--pass Multi pass rate control. | |
- 1 : First pass, creates stats file | |
- 2 : Last pass, does not overwrite stats file | |
- 3 : Nth pass, overwrites stats file | |
--[no-]multi-pass-opt-analysis Refine analysis in 2 pass based on analysis information from pass 1 | |
--[no-]multi-pass-opt-distortion Use distortion of CTU from pass 1 to refine qp in 2 pass | |
--[no-]vbv-live-multi-pass Enable realtime VBV in rate control 2 pass.Default disabled | |
--stats Filename for stats file in multipass pass rate control. Default x265_2pass.log | |
--[no-]analyze-src-pics Motion estimation uses source frame planes. Default disable | |
--[no-]slow-firstpass Enable a slow first pass in a multipass rate control mode. Default enabled | |
--[no-]strict-cbr Enable stricter conditions and tolerance for bitrate deviations in CBR mode. Default disabled | |
--analysis-save <filename> Dump analysis info into the specified file. Default Disabled | |
--analysis-load <filename> Load analysis buffers from the file specified. Default Disabled | |
--analysis-reuse-file <filename> Specify file name used for either dumping or reading analysis data. Deault x265_analysis.dat | |
--analysis-reuse-level <1..10> Level of analysis reuse indicates amount of info stored/reused in save/load mode, 1:least..10:most. Now deprecated. Default 0 | |
--analysis-save-reuse-level <1..10> Indicates the amount of analysis info stored in save mode, 1:least..10:most. Default 0 | |
--analysis-load-reuse-level <1..10> Indicates the amount of analysis info reused in load mode, 1:least..10:most. Default 0 | |
--refine-analysis-type <string> Reuse anlaysis information received through API call. Supported options are avc and hevc. Default disabled - 0 | |
--scale-factor <int> Specify factor by which input video is scaled down for analysis save mode. Default 0 | |
--refine-intra <0..4> Enable intra refinement for encode that uses analysis-load. | |
- 0 : Forces both mode and depth from the save encode. | |
- 1 : Functionality of (0) + evaluate all intra modes at min-cu-size's depth when current depth is one smaller than min-cu-size's depth. | |
- 2 : Functionality of (1) + irrespective of size evaluate all angular modes when the save encode decides the best mode as angular. | |
- 3 : Functionality of (1) + irrespective of size evaluate all intra modes. | |
- 4 : Re-evaluate all intra blocks, does not reuse data from save encode. | |
Default:0 | |
--refine-inter <0..3> Enable inter refinement for encode that uses analysis-load. | |
- 0 : Forces both mode and depth from the save encode. | |
- 1 : Functionality of (0) + evaluate all inter modes at min-cu-size's depth when current depth is one smaller than | |
min-cu-size's depth. When save encode decides the current block as skip(for all sizes) evaluate skip/merge. | |
- 2 : Functionality of (1) + irrespective of size restrict the modes evaluated when specific modes are decided as the best mode by the save encode. | |
- 3 : Functionality of (1) + irrespective of size evaluate all inter modes. | |
Default:0 | |
--[no-]dynamic-refine Dynamically changes refine-inter level for each CU. Default disabled | |
--refine-mv <1..3> Enable mv refinement for load mode. Default 1 | |
--refine-ctu-distortion Store/normalize ctu distortion in analysis-save/load. | |
- 0 : Disabled. | |
- 1 : Store/Load ctu distortion to/from the file specified in analysis-save/load. | |
Default 0 - Disabled | |
--aq-mode <integer> Mode for Adaptive Quantization - 0:none 1:uniform AQ 2:auto variance 3:auto variance with bias to dark scenes 4:auto variance with edge information. Default 2 | |
--[no-]hevc-aq Mode for HEVC Adaptive Quantization. Default disabled | |
--aq-strength <float> Reduces blocking and blurring in flat and textured areas (0 to 3.0). Default 1.00 | |
--qp-adaptation-range <float> Delta QP range by QP adaptation based on a psycho-visual model (1.0 to 6.0). Default 1.00 | |
--[no-]aq-motion Block level QP adaptation based on the relative motion between the block and the frame. Default disabled | |
--[no-]sbrc Enables the segment based rate control. Default disabled | |
--qg-size <int> Specifies the size of the quantization group (64, 32, 16, 8). Default 32 | |
--[no-]cutree Enable cutree for Adaptive Quantization. Default enabled | |
--[no-]rc-grain Enable ratecontrol mode to handle grains specifically. turned on with tune grain. Default disabled | |
--ipratio <float> QP factor between I and P. Default 1.40 | |
--pbratio <float> QP factor between P and B. Default 1.30 | |
--qcomp <float> Weight given to predicted complexity. Default 0.60 | |
--qpstep <integer> The maximum single adjustment in QP allowed to rate control. Default 4 | |
--qpmin <integer> sets a hard lower limit on QP allowed to ratecontrol. Default 0 | |
--qpmax <integer> sets a hard upper limit on QP allowed to ratecontrol. Default 69 | |
--[no-]const-vbv Enable consistent vbv. turned on with tune grain. Default disabled | |
--cbqpoffs <integer> Chroma Cb QP Offset [-12..12]. Default 0 | |
--crqpoffs <integer> Chroma Cr QP Offset [-12..12]. Default 0 | |
--scaling-list <string> Specify a file containing HM style quant scaling lists or 'default' or 'off'. Default: off | |
--zones <zone0>/<zone1>/... Tweak the bitrate of regions of the video | |
Each zone is of the form | |
<start frame>,<end frame>,<option> | |
where <option> is either | |
q=<integer> (force QP) | |
or b=<float> (bitrate multiplier) | |
--zonefile <filename> Zone file containing the zone boundaries and the parameters to be reconfigured. | |
--no-zonefile-rc-init This allow to use rate-control history across zones in zonefile. | |
--lambda-file <string> Specify a file containing replacement values for the lambda tables | |
MAX_MAX_QP+1 floats for lambda table, then again for lambda2 table | |
Blank lines and lines starting with hash(#) are ignored | |
Comma is considered to be white-space | |
--max-ausize-factor <float> This value controls the maximum AU size defined in specification. | |
It represents the percentage of maximum AU size used. Default 1.0 | |
Loop filters (deblock and SAO): | |
--[no-]deblock Enable Deblocking Loop Filter, optionally specify tC:Beta offsets Default enabled | |
--[no-]sao Enable Sample Adaptive Offset. Default enabled | |
--[no-]sao-non-deblock Use non-deblocked pixels, else right/bottom boundary areas skipped. Default disabled | |
--[no-]limit-sao Limit Sample Adaptive Offset types. Default disabled | |
--selective-sao <int> Enable slice-level SAO filter. Default 0 | |
VUI options: | |
--sar <width:height|int> Sample Aspect Ratio, the ratio of width to height of an individual pixel. | |
Choose from 0=undef, 1=1:1("square"), 2=12:11, 3=10:11, 4=16:11, | |
5=40:33, 6=24:11, 7=20:11, 8=32:11, 9=80:33, 10=18:11, 11=15:11, | |
12=64:33, 13=160:99, 14=4:3, 15=3:2, 16=2:1 or custom ratio of <int:int>. Default 0 | |
--display-window <string> Describe overscan cropping region as 'left,top,right,bottom' in pixels | |
--overscan <string> Specify whether it is appropriate for decoder to show cropped region: unknown, show or crop. Default unknown | |
--videoformat <string> Specify video format from unknown, component, pal, ntsc, secam, mac. Default unknown | |
--range <string> Specify black level and range of luma and chroma signals as full or limited Default limited | |
--colorprim <string> Specify color primaries from bt709, unknown, reserved, bt470m, bt470bg, smpte170m, | |
smpte240m, film, bt2020, smpte428, smpte431, smpte432. Default unknown | |
--transfer <string> Specify transfer characteristics from bt709, unknown, reserved, bt470m, bt470bg, smpte170m, | |
smpte240m, linear, log100, log316, iec61966-2-4, bt1361e, iec61966-2-1, | |
bt2020-10, bt2020-12, smpte2084, smpte428, arib-std-b67. Default unknown | |
--colormatrix <string> Specify color matrix setting from unknown, bt709, fcc, bt470bg, smpte170m, | |
smpte240m, gbr, ycgco, bt2020nc, bt2020c, smpte2085, chroma-derived-nc, chroma-derived-c, ictcp. Default unknown | |
--chromaloc <integer> Specify chroma sample location (0 to 5). Default of 0 | |
--master-display <string> SMPTE ST 2086 master display color volume info SEI (HDR) | |
format: G(x,y)B(x,y)R(x,y)WP(x,y)L(max,min) | |
--max-cll <string> Specify content light level info SEI as "cll,fall" (HDR). | |
--video-signal-type-preset <string> Specify combinations of color primaries, transfer characteristics, color matrix, range of luma and chroma signals, and chroma sample location | |
format: <system-id>[:<color-volume>] | |
This has higher precedence than individual VUI parameters. If any individual VUI option is specified together with this, | |
which changes the values set corresponding to the system-id or color-volume, it will be discarded. | |
The color-volume can be used only with the system-id options BT2100_PQ_YCC, BT2100_PQ_ICTCP, and BT2100_PQ_RGB. | |
system-id options and their corresponding values: | |
BT601_525: --colorprim smpte170m --transfer smpte170m --colormatrix smpte170m --range limited --chromaloc 0 | |
BT601_626: --colorprim bt470bg --transfer smpte170m --colormatrix bt470bg --range limited --chromaloc 0 | |
BT709_YCC: --colorprim bt709 --transfer bt709 --colormatrix bt709 --range limited --chromaloc 0 | |
BT709_RGB: --colorprim bt709 --transfer bt709 --colormatrix gbr --range limited | |
BT2020_YCC_NCL: --colorprim bt2020 --transfer bt2020-10 --colormatrix bt709 --range limited --chromaloc 2 | |
BT2020_RGB: --colorprim bt2020 --transfer smpte2084 --colormatrix bt2020nc --range limited | |
BT2100_PQ_YCC: --colorprim bt2020 --transfer smpte2084 --colormatrix bt2020nc --range limited --chromaloc 2 | |
BT2100_PQ_ICTCP: --colorprim bt2020 --transfer smpte2084 --colormatrix ictcp --range limited --chromaloc 2 | |
BT2100_PQ_RGB: --colorprim bt2020 --transfer smpte2084 --colormatrix gbr --range limited | |
BT2100_HLG_YCC: --colorprim bt2020 --transfer arib-std-b67 --colormatrix bt2020nc --range limited --chromaloc 2 | |
BT2100_HLG_RGB: --colorprim bt2020 --transfer arib-std-b67 --colormatrix gbr --range limited | |
FR709_RGB: --colorprim bt709 --transfer bt709 --colormatrix gbr --range full | |
FR2020_RGB: --colorprim bt2020 --transfer bt2020-10 --colormatrix gbr --range full | |
FRP3D65_YCC: --colorprim smpte432 --transfer bt709 --colormatrix smpte170m --range full --chromaloc 1 | |
color-volume options and their corresponding values: | |
P3D65x1000n0005: --master-display G(13250,34500)B(7500,3000)R(34000,16000)WP(15635,16450)L(10000000,5) | |
P3D65x4000n005: --master-display G(13250,34500)B(7500,3000)R(34000,16000)WP(15635,16450)L(40000000,50) | |
BT2100x108n0005: --master-display G(8500,39850)B(6550,2300)R(34000,146000)WP(15635,16450)L(10000000,1) | |
--[no-]cll Emit content light level info SEI. Default enabled | |
--[no-]hdr10 Control dumping of HDR10 SEI packet. If max-cll or master-display has non-zero values, this is enabled. Default disabled | |
--[no-]hdr-opt Add luma and chroma offsets for HDR/WCG content. Default disabled. Now deprecated. | |
--[no-]hdr10-opt Block-level QP optimization for HDR10 content. Default disabled. | |
--min-luma <integer> Minimum luma plane value of input source picture | |
--max-luma <integer> Maximum luma plane value of input source picture | |
Bitstream options: | |
--[no-]repeat-headers Emit SPS and PPS headers at each keyframe. Default disabled | |
--[no-]info Emit SEI identifying encoder and parameters. Default enabled | |
--[no-]hrd Enable HRD parameters signaling. Default disabled | |
--[no-]idr-recovery-sei Emit recovery point infor SEI at each IDR frame | |
--temporal-layers Enable a temporal sublayer for unreferenced B frames. Default disabled | |
--[no-]aud Emit access unit delimiters at the start of each access unit. Default disabled | |
--[no-]eob Emit end of bitstream nal unit at the end of the bitstream. Default disabled | |
--[no-]eos Emit end of sequence nal unit at the end of every coded video sequence. Default disabled | |
--hash <integer> Decoded Picture Hash SEI 0: disabled, 1: MD5, 2: CRC, 3: Checksum. Default 0 | |
--atc-sei <integer> Emit the alternative transfer characteristics SEI message where the integer is the preferred transfer characteristics. Default disabled | |
--pic-struct <integer> Set the picture structure and emits it in the picture timing SEI message. Values in the range 0..12. See D.3.3 of the HEVC spec. for a detailed explanation. | |
--log2-max-poc-lsb <integer> Maximum of the picture order count | |
--[no-]vui-timing-info Emit VUI timing information in the bistream. Default enabled | |
--[no-]vui-hrd-info Emit VUI HRD information in the bistream. Default enabled | |
--[no-]opt-qp-pps Dynamically optimize QP in PPS (instead of default 26) based on QPs in previous GOP. Default disabled | |
--[no-]opt-ref-list-length-pps Dynamically set L0 and L1 ref list length in PPS (instead of default 0) based on values in last GOP. Default disabled | |
--[no-]multi-pass-opt-rps Enable storing commonly used RPS in SPS in multi pass mode. Default disabled | |
--[no-]opt-cu-delta-qp Optimize to signal consistent CU level delta QPs in frame. Default disabled | |
Reconstructed video options (debugging): | |
-r/--recon <filename> Reconstructed raw image YUV or Y4M output file name | |
--recon-depth <integer> Bit-depth of reconstructed raw image file. Defaults to input bit depth, or 8 if Y4M | |
--recon-y4m-exec <string> pipe reconstructed frames to Y4M viewer, ex:"ffplay -i pipe:0 -autoexit" | |
--lowpass-dct Use low-pass subband dct approximation. Default disabled | |
--[no-]frame-dup Enable Frame duplication. Default disabled | |
--dup-threshold <integer> PSNR threshold for Frame duplication. Default 70 | |
--[no-]mcstf Enable GOP based temporal filter. Default 0 | |
ABR-ladder settings | |
--abr-ladder <file> File containing config settings required for the generation of ABR-ladder | |
Executable return codes: | |
0 - encode successful | |
1 - unable to parse command line | |
2 - unable to open encoder | |
3 - unable to generate stream headers | |
4 - encoder abort | |
SEI Message Options | |
--film-grain <filename> File containing Film Grain Characteristics to be written as a SEI Message | |
Complete documentation may be found at http://x265.readthedocs.org/en/default/cli.html |
mkvpropedit --add-track-statistics-tags INPUT.mkv
Read more
Needed to write statistics for VP9 / Opus
mkvpropedit --tags all:"" --delete title INPUT.mkv
Delete all tags and title
ffmpeg -i INPUT.flac -c:a libopus -b:a 576K OUTPUT.opus
- 2CH = 160K
- 6CH = 432K
- 8CH = 576K
NTSC
-color_primaries smpte170m -colorspace smpte170m -color_trc smpte170m -color_range tv
PAL
-color_primaries bt470bg -colorspace bt470bg -color_trc gamma28 -color_range tv
NTSC HD
-color_primaries bt709 -color_trc bt709 -colorspace bt709 -color_range tv
ffmpeg -y -benchmark -init_hw_device opencl=GPU -filter_hw_device GPU -i SAMPLE.mkv -map_metadata -1 -vf "format=p010,hwupload,tonemap_opencl=tonemap=hable:tonemap=hable:primaries=bt709:transfer=bt709:matrix=bt709:range=tv:format=p010,hwdownload,format=p010" -c:v prores_ks -qscale:v 4 TonemapGPU.mov
ffmpeg -y -benchmark -i SAMPLE.mkv -map_metadata -1 -vf "zscale=transfer=linear,tonemap=hable,zscale=primaries=bt709:transfer=bt709:matrix=bt709:range=tv,format=yuv420p10" -c:v prores_ks -qscale:v 4 TonemapCPU.mov
ffmpeg -y -benchmark -i 0001.mov -map_metadata -1 -c:v libx264 -x264-params "ref=4:keyint=60:scenecut=0" -profile:v high -level:v 4.2 -preset veryslow -crf 12 -vf scale=1920:-1 -pix_fmt nv12 -color_primaries bt709 -color_trc bt709 -colorspace bt709 -color_range tv -an OUTPUT.mkv
Note: Level 4.2 is limited to a maximum of 4 reference frames.
https://silentaperture.gitlab.io/mdbook-guide/encoding/x264.html
ffmpeg -y -benchmark -i INPUT.mkv -c:v prores_ks -q:v 4 -vf "dejudder, fps=30000/1001, fieldmatch=order=tff:mode=pcn_ub:combmatch=full, bwdif=mode=0:deint=interlaced, decimate" -an OUTPUT.mkv
ffmpeg -y -benchmark -i INPUT.mkv -c:v h264_amf -quality balanced -qp_i 32 -qp_p 32 -g 120 -an OUTPUT_AVC_QP32.mkv
460 FPS - 152 MB - 8452 kb/s avg, 21934 kb/s Max
ffmpeg -y -benchmark -i INPUT.mkv -c:v hevc_amf -quality balanced -qp_i 30 -qp_p 30 -g 120 -an OUTPUT_HEVC_QP30.mkv
460 FPS - 155 MB - 8612 kb/s, 26722 kb/s Max
ffmpeg -y -benchmark -i INPUT.mkv -c:v libx264 -x264-params "keyint=120:scenecut=0:nal-hrd=none:filler=0:vbv-maxrate=16000:vbv-bufsize=16000:bitrate=8000:threads=24" -profile:v high -preset medium -an x264.mkv
127 FPS - 143 MB - 7946 kb/s, 18114 kb/s Max
For OBS Livestream
preset=medium vbr=8000
bframes=1 b-adapt=0 b-pyramid=0 rc-lookahead=60 vbv-maxrate=16000 vbv-bufsize=16000 scenecut=0 threads=16 nal-hrd=none filler=0
Maybe
bframes=3
b-adapt=2
lookahead-threads=4
me=umh
Always
b-pyramid=0
rc-lookahead=60
For OBS Local
preset=medium crf=23
bframes=1 b-adapt=0 b-pyramid=0 rc-lookahead=60 vbv-maxrate=40000 vbv-bufsize=80000 scenecut=0 threads=16
for very high quality and process further:
preset=medium crf=12
bframes=0 rc-lookahead=60 scenecut=0 threads=16 no-psy=1
For non-realtime, better veryslow preset:
preset=medium crf=19
b-adapt=2:b-pyramid=0:rc-lookahead=60:me=umh:merange=24:subme=9:trellis=2:threads=16
Maybe
subme=10
partitions=all
qcomp=0.75
lookahead-threads=4
Explanation
partitions=all=p4x4
direct=auto=temporal
Temporal is bad
ref=8:bframes=8
bframes=8 for anime, bframes=4 for live action
subme=11
Placebo
ffmpeg -y -benchmark -init_hw_device vulkan=GPU -hwaccel vulkan -hwaccel_output_format vulkan -extra_hw_frames 30 -i "C:\Users\Admin\Downloads\New folder\OPM.avs" -filter_hw_device GPU -vf "format=nv12,hwupload,libplacebo=w=iw/2:h=ih/2:downscaler=sinc,hwdownload,format=yuv420p" -c:v hevc_amf -qp_i 18 -qp_p 18 -g 240 -an TEST.mkv
ffmpeg -y -benchmark -init_hw_device vulkan -i "C:\Users\Admin\Downloads\New folder\OPM.avs" -vf "libplacebo=w=iw*2:h=ih*2:upscaler=sinc" -c:v libx264 -preset ultrafast -qp 0 -g 1 -an test1234.mkv
ffmpeg -y -benchmark -i INPUT.mkv -c:v libx264 -x264-params "ref=4:psy-rd=1,0.15:merange=32:threads=24:lookahead-threads=6:bframes=3:b-pyramid=none:keyint=48:scenecut=0:rc-lookahead=48:crf=19:qcomp=0.75:vbv-maxrate=5000:vbv-bufsize=10000:nal-hrd=none:filler=0:aq-strength=0.8" -preset veryslow -pix_fmt yuv420p -an H264.mkv
ffmpeg -y -benchmark -i Bleach02.avs -pix_fmt yuv422p10le -c:v prores_ks cut005_48.mkv
ffmpeg -y -benchmark -i cut03.mkv -pix_fmt yuv422p10le -c:v prores_ks -vf mpdecimate,setpts=N/24/TB -vsync vfr cut003.mkv
ffmpeg -y -f concat -i list.txt -c copy CUTS_48.mkv
ffmpeg -y -f concat -i list.txt -c:v prores_ks CUTS_TEST.mkv
ffmpeg -i cut003_48.mkv -vf fps=48000/1001 cut03\%04d.png
ffmpeg -y -r 48 -i cut03\%04d.png -c:v prores_ks -pix_fmt yuv422p10le cut03_FIXED_48.mkv
list.txt
file 'cut01_FIXED_48.mkv'
file 'cut02_FIXED_48.mkv'
file 'cut03_FIXED_48.mkv'
file 'cut04_FIXED_48.mkv'
file 'cut05_FIXED_48.mkv'
If you set TargetBitrate
before setting PeakBitrate
AMF tries to adjust peak bitrate
GPUOpen-LibrariesAndSDKs/AMF#488 (comment)
If you would like to have more control over bitrate accuracy, please consider using PEAK_CONSTRAINED_VBR
GPUOpen-LibrariesAndSDKs/AMF#489 (comment)
GPUOpen-LibrariesAndSDKs/AMF#439 (comment)
PAEngineType=
- Host/CPU (1)
- DX11 (3)
- OpenCL (4)
- Vulkan (10)
- DX12 (11)
GPUOpen-LibrariesAndSDKs/AMF#435
LTR requires MaxConsecutiveBPictures=0
https://visionular.ai/what-are-av1-golden-frames/
Golden Frames / Long Term Reference Frames
Golden frames are useful in boosting compression efficiency because not only are high quality and are long-term references, but they significantly improve the coding efficiency of the subsequent frames specially in scenes with low motion or repetitive elements, resulting in lower bit-rates without reducing video quality.
GPUOpen-LibrariesAndSDKs/AMF#500 (comment)
The main reason for adding low latency parameters is to force clocks to stay high and keep latency low.
LowLatencyInternal=true
NEVER use "Alternative Reference Frames"
ALT-REF (temporally filtered) frames
VERY blurry
Used by VP9 (2-pass) & VP10 (AV1)
https://gitlab.com/AOMediaCodec/SVT-AV1/-/blob/master/Docs/Parameters.md#av1-specific-options
While OBS currently overrides the rate control method to CBR for streaming
https://github.com/obsproject/obs-studio/pull/9352#discussion_r1515202908
🤡🤡🤡
Variance Based Adaptive Quantization
EnableVBAQ=false
Forces maximum Vclk (Video Encoder Clockspeed) for reduced frame-to-frame latency in the encoder.
LowLatencyInternal=true
Disables B-frames:
MaxConsecutiveBPictures=0
Sets amount of Long Term Reference Frames ( probably not needed with PALongTermReferenceEnable=true )
MaxOfLTRFrames=4
Requires PreAnalysis
Adaptive mini-GOP allows the encoder to decide whether or not to use B-frames, and if so, how many, depending on the complexity of the video content
AdaptiveMiniGOP=false
Number of B-Frames
BPicturesPattern=0
B-Frames as Reference
BReferenceEnable=false
InputQueueSize=32
Deprecated
Set encoder input queue size. For high-resolution sequence, recommend to set a smaller value to save storage. For low-resolution sequence, recommend to set a larger value to improve encoding speed.
PATemporalAQMode=1
1 = Uses shader resource to calculate the temporal correlation. Using a value of “1” generally improves the image quality, but at the cost of a decrease in frame rate when playing games simultaneously.
2 = Uses hardware resource to calculate the temporal correlation. Using a value of “2” generally improves the image quality, but at the cost of a decrease in encoding speed.
PALongTermReferenceEnable=true
PAPerceptualAQMode=1
1 = Content Adaptive Quantization (CAQ)
PACAQStrength=1
0 = Low
1 = Medium
2 = High
PAHighMotionQualityBoostMode
is not meant for realtime encoding
LowLatencyInternal=true
MaxConsecutiveBPictures=0 LowLatencyInternal=true EnableVBAQ=false EnablePreAnalysis=true PAEngineType=4 PASceneChangeDetectionEnable=false PAPerceptualAQMode=1 PATemporalAQMode=0 PALookAheadBufferDepth=40
Note: Bitrate * 1000
PeakBitrate=20000000 VBVBufferSize=80000000
LowLatencyInternal=true HevcDeBlockingFilter=false HevcEnableVBAQ=false HevcHighMotionQualityBoostEnable=true
Most AMF parameters explained:
https://github.com/GPUOpen-LibrariesAndSDKs/AMF/wiki/AMF-Encoder-Settings-and-Tuning-in-FFmpeg
AMD Display Library dithering:
https://github.com/GPUOpen-LibrariesAndSDKs/display-library/blame/29beb5a1217ab5805c5032284fdcdc56418bce36/include/adl_defines.h#L1013
MaxConsecutiveBPictures
supersedesBPicturesPattern
MaxConsecutiveBPictures=1 or greater
supersedesPALongTermReferenceEnable=true
PAPerceptualAQMode=1
supersedesEnableVBAQ=true
PATemporalAQMode=1 or 2
supersedesEnableVBAQ=true
andPAPerceptualAQMode=1
PAHighMotionQualityBoostMode=1
supersedesHighMotionQualityBoostEnable=true
x265
ctu=32
for 1920x1080no-sao=1
limit-sao=1
b-pyramid=0
aq-mode=3
mcstf=1
Motion-compensated spatio-temporal filtering. Give it a try
VP8
ffmpeg -y -benchmark - input.mkv -c:v libvpx -g 240 -cpu-used 0 -auto-alt-ref 0 -qmin 0 -qmax 50 -crf 5 -b:v 40M -an output.webm
z_ConvertFormat(colorspace_op="709:709:709:limited=>170m:709:709:limited")
ConvertBits(8, dither=1)
Maybe 470bg
instead of 170m
VP8 only supports Rec. 601 - ITU-R_BT.601
VP9
-crf 12
Set the quality/size tradeoff for constant-quality (no bitrate target) and constrained-quality (with maximum bitrate target) modes. Valid range is 0 to 63, higher numbers indicating lower quality and smaller output size. Only used if set; by default only the bitrate target is used.
-row-mt 1
-enable-tpl 1
-auto-alt-ref 0
-aq-mode X
1 = VARIANCE_AQ
2 = COMPLEXITY_AQ
5 = PERCEPTUAL_AQ
6 = PSNR_AQ
Key frame temporal filtering
--enable-keyframe-filtering=1
webmproject/libvpx@a5ea71f
Adjust temporal filter strength for better visual quality
webmproject/libvpx@b06a785
VP9 Configs
- https://github.com/webmproject/libvpx/blob/a5ea71f0919cf0670c832ddc36fec4c7d9b8ed84/vp9/vp9_cx_iface.c
- https://github.com/webmproject/libvpx/blob/a5ea71f0919cf0670c832ddc36fec4c7d9b8ed84/vpx/vp8cx.h
- https://github.com/webmproject/libvpx/blob/a5ea71f0919cf0670c832ddc36fec4c7d9b8ed84/vpxenc.c
x264
too many lookahead threads significantly degrades lookahead accuracy
https://code.videolan.org/videolan/x264/-/blob/master/encoder/encoder.c?ref_type=heads#L1294
x264 has a complex lookahead module designed to estimate the coding cost of frames that have not yet been
analyzed by the main encoder module. It uses these estimations to make a variety of decisions, such as adaptive B-frame
placement, explicit weighted prediction, and bit allocation for buffer-constrained ratecontrol. For performance reasons, it
operates on a half-resolution version of the frame and calculates SATD residuals only, doing no quantization or
reconstruction.
It is important to note that, in x264, the regular B-frame quantizer offsets (--pbratio) are disabled
when MBtree is on, since they serve the same role.
One might assume similarly that macroblock-tree can replace keyframe quantizer offsets. However, testing
suggested this was not the case
Benchmark Software Decoder
ffmpeg -benchmark -i H264.mkv -an -f null -
x264 Updated Presets
medium
--b-adapt 2 --b-pyramid 0 --lookahead-threads 4
slow
--ref 4 --rc-lookahead 60 --subme 8 --trellis 2
slower
--ref 5 --rc-lookahead 60 --subme 9 --trellis 2 --me umh
veryslow
--ref 6 --rc-lookahead 60 --subme 10 --trellis 2 --me umh --merange 24
Check encoder settings like this
ffmpeg -h encoder=libvpx-vp9
Say yes if asked
ffmpeg -y
Show encoding time in seconds
-benchmark
Write to logfile
-report
Hide ffmpeg (for piping)
-loglevel quiet
Or show warnings only
-loglevel warning