VPXENC(1)

πŸ‘‘ NAME πŸ‘‘

vpxenc β€” the VP8 and VP9 video codec encoding tool. she takes your frames and she makes video out of them and she does it flawlessly. this is the vpxenc(1) page from the General Commands Manual, and bestie we are going through every single flag together, no skimming, no skipping the boring ones, because that's the vibe. πŸ’…


🌸 SYNOPSIS 🌸

vpxenc <options> -o dst_filename src_filename

that's the whole shape of it: options go in, -o says where the output goes, and the last thing you hand her is the source file. clean. iconic. no notes. ✨


πŸ’– OPTIONS πŸ’–

  • -D, --debug β€” debug mode, and what it does is make the output deterministic. same in, same bytes out, every single time. queen behavior honestly.
  • -o <arg>, --output=<arg> β€” the output filename, aka where your little masterpiece lands
  • --codec=<arg> β€” which codec to use
  • -p <arg>, --passes=<arg> β€” how many passes (1 or 2)
  • --pass=<arg> β€” which pass you're executing right now (1 or 2)
  • --fpf=<arg> β€” first pass statistics file name
  • --limit=<arg> β€” stop encoding after n input frames
  • --skip=<arg> β€” skip the first n input frames
  • -d <arg>, --deadline=<arg> β€” deadline per frame, in usec
  • --best β€” use the Best Quality Deadline
  • --good β€” use the Good Quality Deadline
  • --rt β€” use the Realtime Quality Deadline
  • -q, --quiet β€” do not print encode progress (silent mode, mysterious mode 🫢)
  • -v, --verbose β€” show encoder parameters
  • --psnr β€” show PSNR in the status line
  • --webm β€” output WebM (this is the default when WebM IO is enabled)
  • --ivf β€” output IVF
  • -P, --output-partitions β€” makes the encoder output partitions. Requires IVF output! (that exclamation mark is hers, not mine, respect it)
  • --q-hist=<arg> β€” show quantizer histogram (n-buckets)
  • --rate-hist=<arg> β€” show rate histogram (n-buckets)
  • --disable-warnings β€” disable warnings about potentially incorrect encode settings.
  • -y, --disable-warning-prompt β€” display warnings, but do not prompt the user to continue.
  • --test-decode=<arg> β€” test encode/decode mismatch
    • off, fatal, warn

🧚 Encoder Global Options 🧚

  • --yv12 β€” input file is YV12
  • --i420 β€” input file is I420 (the default, she's the main character)
  • --i422 β€” input file is I422
  • --i444 β€” input file is I444
  • --i440 β€” input file is I440
  • -u <arg>, --usage=<arg> β€” usage profile number to use
  • -t <arg>, --threads=<arg> β€” max number of threads to use
  • --profile=<arg> β€” bitstream profile number to use
  • -w <arg>, --width=<arg> β€” frame width
  • -h <arg>, --height=<arg> β€” frame height
  • --stereo-mode=<arg> β€” stereo 3D video format
    • mono, left-right, bottom-top, top-bottom, right-left
  • --timebase=<arg> β€” output timestamp precision (fractional seconds)
  • --fps=<arg> β€” stream frame rate, given as rate/scale
  • --error-resilient=<arg> β€” enable error resiliency features
  • --lag-in-frames=<arg> β€” max number of frames to lag

πŸ’Έ Rate Control Options πŸ’Έ

  • --drop-frame=<arg> β€” temporal resampling threshold (buf %)
  • --resize-allowed=<arg> β€” spatial resampling enabled (bool)
  • --resize-width=<arg> β€” width of encoded frame
  • --resize-height=<arg> β€” height of encoded frame
  • --resize-up=<arg> β€” upscale threshold (buf %)
  • --resize-down=<arg> β€” downscale threshold (buf %)
  • --end-usage=<arg> β€” rate control mode
    • vbr, cbr, cq, q
  • --target-bitrate=<arg> β€” bitrate (kbps)
  • --min-q=<arg> β€” minimum (best) quantizer
  • --max-q=<arg> β€” maximum (worst) quantizer
  • --undershoot-pct=<arg> β€” datarate undershoot (min) target (%)
  • --overshoot-pct=<arg> β€” datarate overshoot (max) target (%)
  • --buf-sz=<arg> β€” client buffer size (ms)
  • --buf-initial-sz=<arg> β€” client initial buffer size (ms)
  • --buf-optimal-sz=<arg> β€” client optimal buffer size (ms)

πŸ” Twopass Rate Control Options πŸ”

  • --bias-pct=<arg> β€” CBR/VBR bias (0=CBR, 100=VBR)
  • --minsection-pct=<arg> β€” GOP min bitrate (% of target)
  • --maxsection-pct=<arg> β€” GOP max bitrate (% of target)

πŸ”‘ Keyframe Placement Options πŸ”‘

  • --kf-min-dist=<arg> β€” minimum keyframe interval (frames)
  • --kf-max-dist=<arg> β€” maximum keyframe interval (frames)
  • --disable-kf β€” disable keyframe placement

🌟 VP8 Specific Options 🌟

  • --cpu-used=<arg> β€” CPU Used (-16..16)
  • --auto-alt-ref=<arg> β€” enable automatic alt reference frames
  • --noise-sensitivity=<arg> β€” noise sensitivity (frames to blur)
  • --sharpness=<arg> β€” loop filter sharpness (0..7)
  • --static-thresh=<arg> β€” motion detection threshold
  • --token-parts=<arg> β€” number of token partitions to use, log2
  • --arnr-maxframes=<arg> β€” AltRef max frames (0..15)
  • --arnr-strength=<arg> β€” AltRef filter strength (0..6)
  • --arnr-type=<arg> β€” AltRef type
  • --tune=<arg> β€” material to favor
    • psnr, ssim
  • --cq-level=<arg> β€” Constant/Constrained Quality level
  • --max-intra-rate=<arg> β€” max I-frame bitrate (pct)
  • --screen-content-mode=<arg β€” screen content mode
okay so yes, that <arg is missing its closing > in the original page. i am simply the messenger πŸ’€ keeping it exactly as it is because we do not "fix" things here.

πŸ‘‘ VP9 Specific Options πŸ‘‘

  • --cpu-used=<arg> β€” CPU Used (-8..8)
  • --auto-alt-ref=<arg> β€” enable automatic alt reference frames
  • --sharpness=<arg> β€” loop filter sharpness (0..7)
  • --static-thresh=<arg> β€” motion detection threshold
  • --tile-columns=<arg> β€” number of tile columns to use, log2
  • --tile-rows=<arg> β€” number of tile rows to use, log2 (set to 0 while threads > 1)
  • --arnr-maxframes=<arg> β€” AltRef max frames (0..15)
  • --arnr-strength=<arg> β€” AltRef filter strength (0..6)
  • --arnr-type=<arg> β€” AltRef type
  • --tune=<arg> β€” material to favor
    • psnr, ssim
  • --cq-level=<arg> β€” Constant/Constrained Quality level
  • --max-intra-rate=<arg> β€” max I-frame bitrate (pct)
  • --max-inter-rate=<arg> β€” max P-frame bitrate (pct)
  • --gf-cbr-boost=<arg> β€” boost for Golden Frame in CBR mode (pct)
  • --lossless=<arg> β€” lossless mode (0: false (default), 1: true)
  • --frame-parallel=<arg> β€” enable frame parallel decodability features
  • --aq-mode=<arg> β€” adaptive quantization mode (0: off (default), 1: variance 2: complexity, 3: cyclic refresh, 4: equator360)
  • --frame-boost=<arg> β€” enable frame periodic boost (0: off (default), 1: on)
  • --noise-sensitivity=<arg> β€” noise sensitivity (frames to blur)
  • --tune-content=<arg> β€” tune content type
    • default, screen
  • --color-space=<arg> β€” the color space of input content:
    • unknown, bt601, bt709, smpte170, smpte240, bt2020, reserved, sRGB
  • --min-gf-interval=<arg> β€” min gf/arf frame interval (default 0, indicating in-built behavior)
  • --max-gf-interval=<arg> β€” max gf/arf frame interval (default 0, indicating in-built behavior)
  • --target-level=<arg> β€” target level (255: off (default); 0: only keep level stats; 10: level 1.0; 11: level 1.1; ... 62: level 6.2)

⏰ Stream timebase (--timebase) ⏰

the precision you want for timestamps in the output, expressed in fractional seconds. the default is 1/1000.


🎬 Included encoders 🎬

  • vp8 β€” WebM Project VP8 Encoder v1.6.0
  • vp9 β€” WebM Project VP9 Encoder v1.6.0 (the default, obviously)

use --codec to switch to a non-default encoder.


okay bestie. real talk. the original page literally dumps the entire option list a second time right here. i'm not being dramatic, i'm not padding, that is genuinely what's in the file. and because the one rule is that i keep every single detail, we are doing it again. all of it. i'm as surprised as you are. πŸ’€

πŸ’« OPTIONS πŸ’« (take two, and yes she's serious)

  • -D, --debug β€” debug mode (makes output deterministic)
  • -o <arg>, --output=<arg> β€” output filename
  • --codec=<arg> β€” codec to use
  • -p <arg>, --passes=<arg> β€” number of passes (1/2)
  • --pass=<arg> β€” pass to execute (1/2)
  • --fpf=<arg> β€” first pass statistics file name
  • --limit=<arg> β€” stop encoding after n input frames
  • --skip=<arg> β€” skip the first n input frames
  • -d <arg>, --deadline=<arg> β€” deadline per frame (usec)
  • --best β€” use Best Quality Deadline
  • --good β€” use Good Quality Deadline
  • --rt β€” use Realtime Quality Deadline
  • -q, --quiet β€” do not print encode progress
  • -v, --verbose β€” show encoder parameters
  • --psnr β€” show PSNR in status line
  • --webm β€” output WebM (default when WebM IO is enabled)
  • --ivf β€” output IVF
  • -P, --output-partitions β€” makes encoder output partitions. Requires IVF output!
  • --q-hist=<arg> β€” show quantizer histogram (n-buckets)
  • --rate-hist=<arg> β€” show rate histogram (n-buckets)
  • --disable-warnings β€” disable warnings about potentially incorrect encode settings.
  • -y, --disable-warning-prompt β€” display warnings, but do not prompt user to continue.
  • --test-decode=<arg> β€” test encode/decode mismatch
    • off, fatal, warn

🧚 Encoder Global Options 🧚

  • --yv12 β€” input file is YV12
  • --i420 β€” input file is I420 (default)
  • --i422 β€” input file is I422
  • --i444 β€” input file is I444
  • --i440 β€” input file is I440
  • -u <arg>, --usage=<arg> β€” usage profile number to use
  • -t <arg>, --threads=<arg> β€” max number of threads to use
  • --profile=<arg> β€” bitstream profile number to use
  • -w <arg>, --width=<arg> β€” frame width
  • -h <arg>, --height=<arg> β€” frame height
  • --stereo-mode=<arg> β€” stereo 3D video format
    • mono, left-right, bottom-top, top-bottom, right-left
  • --timebase=<arg> β€” output timestamp precision (fractional seconds)
  • --fps=<arg> β€” stream frame rate (rate/scale)
  • --error-resilient=<arg> β€” enable error resiliency features
  • --lag-in-frames=<arg> β€” max number of frames to lag

πŸ’Έ Rate Control Options πŸ’Έ

  • --drop-frame=<arg> β€” temporal resampling threshold (buf %)
  • --resize-allowed=<arg> β€” spatial resampling enabled (bool)
  • --resize-width=<arg> β€” width of encoded frame
  • --resize-height=<arg> β€” height of encoded frame
  • --resize-up=<arg> β€” upscale threshold (buf %)
  • --resize-down=<arg> β€” downscale threshold (buf %)
  • --end-usage=<arg> β€” rate control mode
    • vbr, cbr, cq, q
  • --target-bitrate=<arg> β€” bitrate (kbps)
  • --min-q=<arg> β€” minimum (best) quantizer
  • --max-q=<arg> β€” maximum (worst) quantizer
  • --undershoot-pct=<arg> β€” datarate undershoot (min) target (%)
  • --overshoot-pct=<arg> β€” datarate overshoot (max) target (%)
  • --buf-sz=<arg> β€” client buffer size (ms)
  • --buf-initial-sz=<arg> β€” client initial buffer size (ms)
  • --buf-optimal-sz=<arg> β€” client optimal buffer size (ms)

πŸ” Twopass Rate Control Options πŸ”

  • --bias-pct=<arg> β€” CBR/VBR bias (0=CBR, 100=VBR)
  • --minsection-pct=<arg> β€” GOP min bitrate (% of target)
  • --maxsection-pct=<arg> β€” GOP max bitrate (% of target)

πŸ”‘ Keyframe Placement Options πŸ”‘

  • --kf-min-dist=<arg> β€” minimum keyframe interval (frames)
  • --kf-max-dist=<arg> β€” maximum keyframe interval (frames)
  • --disable-kf β€” turns OFF keyframe placement. no keyframes for you bestie πŸ’…

✨ VP8 Specific Options ✨

  • --cpu-used=<arg> β€” CPU Used, range is -16..16. that's the whole vibe, no notes.
  • --auto-alt-ref=<arg> β€” turns on automatic alt reference frames ✨
  • --noise-sensitivity=<arg> β€” noise sensitivity, measured in frames to blur
  • --sharpness=<arg> β€” loop filter sharpness, 0..7
  • --static-thresh=<arg> β€” motion detection threshold
  • --token-parts=<arg> β€” how many token partitions to use, log2
  • --arnr-maxframes=<arg> β€” AltRef max frames, 0..15
  • --arnr-strength=<arg> β€” AltRef filter strength, 0..6
  • --arnr-type=<arg> β€” AltRef type
  • --tune=<arg> β€” which material to favor πŸŽ€
    • psnr, ssim
  • --cq-level=<arg> β€” Constant/Constrained Quality level
  • --max-intra-rate=<arg> β€” max I-frame bitrate, in pct
  • --screen-content-mode=<arg β€” screen content mode

🌸 VP9 Specific Options 🌸

  • --cpu-used=<arg> β€” CPU Used, range is -8..8. yes it's different from VP8, don't @ me 😭
  • --auto-alt-ref=<arg> β€” turns on automatic alt reference frames ✨
  • --sharpness=<arg> β€” loop filter sharpness, 0..7
  • --static-thresh=<arg> β€” motion detection threshold
  • --tile-columns=<arg> β€” how many tile columns to use, log2
  • --tile-rows=<arg> β€” how many tile rows to use, log2 (set to 0 while threads > 1)
  • --arnr-maxframes=<arg> β€” AltRef max frames, 0..15
  • --arnr-strength=<arg> β€” AltRef filter strength, 0..6
  • --arnr-type=<arg> β€” AltRef type
  • --tune=<arg> β€” which material to favor πŸŽ€
    • psnr, ssim
  • --cq-level=<arg> β€” Constant/Constrained Quality level
  • --max-intra-rate=<arg> β€” max I-frame bitrate, in pct
  • --max-inter-rate=<arg> β€” max P-frame bitrate, in pct
  • --gf-cbr-boost=<arg> β€” boost for Golden Frame in CBR mode, in pct
  • --lossless=<arg> β€” lossless mode: 0: false (default), 1: true
  • --frame-parallel=<arg> β€” enables frame parallel decodability features
  • --aq-mode=<arg> β€” adaptive quantization mode: 0: off (default), 1: variance, 2: complexity, 3: cyclic refresh, 4: equator360
  • --frame-boost=<arg> β€” enables frame periodic boost: 0: off (default), 1: on
  • --noise-sensitivity=<arg> β€” noise sensitivity, measured in frames to blur
  • --tune-content=<arg> β€” tune content type 🌈
    • default, screen
  • --color-space=<arg> β€” the color space of the input content:
    • unknown, bt601, bt709, smpte170, smpte240, bt2020, reserved, sRGB
  • --min-gf-interval=<arg> β€” min gf/arf frame interval (default 0, indicating in-built behavior)
  • --max-gf-interval=<arg> β€” max gf/arf frame interval (default 0, indicating in-built behavior)
  • --target-level=<arg> β€” target level: 255: off (default); 0: only keep level stats; 10: level 1.0; 11: level 1.1; ... 62: level 6.2

πŸ¦‹ Stream timebase (--timebase) πŸ¦‹

the desired precision of timestamps in the output, expressed in fractional seconds. default is 1/1000. so specific, so iconic πŸ’–


πŸ‘‘ Included encoders πŸ‘‘

  • vp8 β€” WebM Project VP8 Encoder v1.6.0
  • vp9 β€” WebM Project VP9 Encoder v1.6.0 (default)

Use --codec to switch to a non-default encoder. lowkey the easiest glow-up ever fr fr ✨


and that's the whole page bestie, you ate 🫢 this one's the August 2016 edition of VPXENC(1) β€” go forth and encode, no cap πŸ’…πŸŽ€