-
-
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 | |
| --------------------------------------------------------------------------------------------------------- | |
| 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 | |
| } | |
| } | |
| } | |
| } |
| C:\Users\ULTRA\Downloads\ffmpeg>x264 --fullhelp | |
| x264 core:165 r3222 b35605a | |
| 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] | |
| --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, 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, 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, | |
| x2bgr10le, x2bgr10be, p210be, p210le, p410be, | |
| p410le, p216be, p216le, p416be, p416le, vuya, | |
| rgbaf16be, rgbaf16le, vuyx, p012le, p012be, | |
| y212be, y212le, xv30be, xv30le, xv36be, xv36le, | |
| rgbf32be, rgbf32le, rgbaf32be, rgbaf32le, | |
| p212be, p212le, p412be, p412le, gbrap14be, | |
| gbrap14le, d3d12, ayuv, uyva, vyu444, v30xbe, | |
| v30xle, rgbf16be, rgbf16le, rgba128be, | |
| rgba128le, rgb96be, rgb96le, y216be, y216le, | |
| xv48be, xv48le, gbrpf16be, gbrpf16le, | |
| gbrapf16be, gbrapf16le, grayf16be, grayf16le, | |
| amf, gray32be, gray32le, yaf32be, yaf32le, | |
| yaf16be, yaf16le, gbrap32be, gbrap32le | |
| --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 | |
| --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 | |
| Filtering: | |
| --vf, --video-filter <filter0>/<filter1>/... Apply video filtering to the input file | |
| Filter options may be specified in <filter>:<option>=<value> format. | |
| Available filters: | |
| crop:left,top,right,bottom | |
| removes pixels from the edges of the frame | |
| resize:[width,height][,sar][,fittobox][,csp][,method] | |
| resizes frames based on the given criteria: | |
| - resolution only: resizes and adapts sar to avoid stretching | |
| - sar only: sets the sar and resizes to avoid stretching | |
| - resolution and sar: resizes to given resolution and sets the sar | |
| - fittobox: resizes the video based on the desired constraints | |
| - width, height, both | |
| - fittobox and sar: same as above except with specified sar | |
| - csp: convert to the given csp. syntax: [name][:depth] | |
| - valid csp names [keep current]: i400, i420, yv12, nv12, nv21, i422, yv16, nv16, yuyv, uyvy, i444, yv24, bgr, bgra, rgb | |
| - depth: 8 or 16 bits per pixel [keep current] | |
| note: not all depths are supported by all csps. | |
| - method: use resizer method ["bicubic"] | |
| - fastbilinear, bilinear, bicubic, experimental, point, | |
| - area, bicublin, gauss, sinc, lanczos, spline | |
| select_every:step,offset1[,...] | |
| apply a selection pattern to input frames | |
| step: the number of frames in the pattern | |
| offsets: the offset into the step to select a frame | |
| see: http://avisynth.nl/index.php/Select#SelectEvery |
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
MaxConsecutiveBPicturessupersedesBPicturesPatternMaxConsecutiveBPictures=1 or greatersupersedesPALongTermReferenceEnable=truePAPerceptualAQMode=1supersedesEnableVBAQ=truePATemporalAQMode=1 or 2supersedesEnableVBAQ=trueandPAPerceptualAQMode=1PAHighMotionQualityBoostMode=1supersedesHighMotionQualityBoostEnable=true
x265
ctu=32for 1920x1080no-sao=1limit-sao=1b-pyramid=0aq-mode=3mcstf=1Motion-compensated spatio-temporal filtering. Give it a try
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 -
Important AMD encoder settings
PASceneChangeDetectionEnable=false PALookAheadBufferDepth=41 MaxNumRefFrames=4
PASceneChangeDetectionEnable=false(default=true) - adaptive I-frames, Scenecut, requires LookaheadAdaptiveMiniGOP=true(default=true) - adaptive B-frames, B-adapt, requires LookaheadBReferenceEnable=true(default=true) - Use B-frames as Reference frames
MaxNumRefFrames=4 =4 for High 4.2 Profile (1920x1080@60)
Important NVenc settings
AVC
lookaheadDepth=32 useBFramesAsRef=1
HEVC
lookaheadLevel=3 lookaheadDepth=32
Note: NV_ENC_LOOKAHEAD_LEVEL_0 has the highest performance,
while NV_ENC_LOOKAHEAD_LEVEL_3 has the highest quality. It increases bitrate significantly and should not be used.
useBFramesAsRef=
=1 Any B-frame can be a reference frame
=2 Halved - Uses the following logic:
4 B-frames = 2 reference frames
3 B-frames = 1 reference frame
2 B-frames = 1 reference frame
1 B-frame = 1 reference frame <-- untested, but should be logical to clamp to 1
Show all supported encoders in FFMPEG:
ffmpeg -encoders
Show all encoder options:
ffmpeg -h encoder=hevc_nvenc
Lossless: NVenc
ffmpeg -y -benchmark -i INPUT.mkv -c:v hevc_nvenc -tune lossless -pix_fmt p010le -an OUTPUT.mkv
Almost Lossless: Apple ProRes 422 High Quality
ffmpeg -y -benchmark -i INPUT.mkv -c:v prores_ks -q:v 0 -profile:v 3 -bits_per_mb 1024 -vendor apl0 -pix_fmt yuv422p10le 1024.mov
Note:-bits_per_mb can go up to 8192. Higher = less lossy.
Lossless: UT Video
ffmpeg -y -benchmark -i INPUT.mkv -c:v utvideo -color_primaries bt709 -color_trc bt709 -colorspace bt709 -color_range tv OUTPUT.mkv
AV1 Basically lossless settings:
ffmpeg -y -benchmark -i INPUT.mkv -c:v libsvtav1 -svtav1-params "enable-tf=0:mbr=10M:tile-columns=2:tile-rows=0" -g 240 -qp 14 -preset 4 -pix_fmt yuv420p10le SVT_AV1.mkv
Libaom AV1 settings:
ffmpeg -y -benchmark -i TEST.mkv -c:v libaom-av1 -pix_fmt yuv420p10le -g 240 -cpu-used 4 -auto-alt-ref 0 -aq-mode 0 -tile-columns 2 -tile-rows 0 -row-mt 1 -crf 16 -pass 1 libaom-pass1.webm
ffmpeg -y -benchmark -i TEST.mkv -c:v libaom-av1 -pix_fmt yuv420p10le -g 240 -cpu-used 4 -auto-alt-ref 0 -aq-mode 0 -tile-columns 2 -tile-rows 0 -row-mt 1 -crf 16 -pass 2 libaom-pass2.webm
High Quality Example:
NVEncC64.exe --codec hevc --cqp 18 --preset p7 --output-depth 10 --lookahead 32 --ref 8 --split-enc forced_2 --colormatrix bt709 --colorprim bt709 --transfer bt709 --colorrange limited -i INPUT.mkv -o OUTPUT.mkv
190 FPS with 2560x1440 input from the RTX 5070 Ti
Lossless:
NVEncC64.exe --lossless --colormatrix bt709 --colorprim bt709 --transfer bt709 --colorrange limited -i INPUT.mkv -o OUTPUT_Lossless-avc.mkv
ffmpeg -y -benchmark -i TEST.mkv -c:v libx264 -x264-params "ref=8:keyint=240:bframes=3:b-adapt=2:rc-lookahead=60:aq-mode=3:me=umh:merange=24:subme=9:trellis=2:lookahead-threads=2:threads=16" -crf 14 -pix_fmt yuv420p10le AVC_14.mkv
...