github kajisho5/ffmpeg-skill v2.6.0

latest release: v2.7.0
3 hours ago

Automated release: version and notes generated from pull requests merged since 2.5.1.

  • feat: opt-in Apple VideoToolbox encoding. --hw/--no-hw on every re-encoding tool and export.py (two booleans in the contract and MCP: hw, no_hw); FFMPEG_SKILL_HW=1 makes it the default for everything but export.py's delivery presets (an export under it says so in hw, requested: false); render.py/batch.py --hw make it explicit for every stage, and waveform.py passes its choice to the caption/title stage that writes its file. h264/hevc (HDR Main10 with the source's tags and HDR10 side data)/prores; AV1 stays on SVT-AV1; an export.py preset keeps its own format on the GPU (an h264/h265 preset stays 8-bit BT.709, prores keeps the source's tags). CRF maps to -q:v by SSIM against x264/x265 medium (tests/bench_vt.py): SDR H.264 18/23/28 → 75/64/53, SDR HEVC → 78/68/58, and HDR its own curve, 63/55/47, because its CPU line is x265 Main10 at CRF+2; matched quality costs 1.1–2.9× the CPU bytes on SDR and 1.9–3.5× on HDR. BT.709 tags go through h264_metadata/hevc_metadata, so FFmpeg ≥7.1 never converts an untagged source. Apple Silicon only (the hardware, also under a Rosetta Python). Only a job VideoToolbox itself refuses (the encoder could not open, or its compression session failed, in FFmpeg 5.1 to master's wordings) is re-encoded on the CPU, with the odd-dimension retry a CPU run gets; any other failure fails once, names its encoder and carries encoder/hw. Every result names its encoder; hw says what was asked and what ran (requested, source, used — null under --dry-run — fallback, notes); a GPU encode adds a top-level notes line that its quality is not CRF-equivalent, and one chosen by FFMPEG_SKILL_HW=1 notes the size cost and --no-hw. render.py carries its stages' and an executed plan's hw, batch.py its items' (each results row names its encoder), and both caches key on the GPU setting. doctor --json gains hw. Built by @rymalia in #304, including the VideoToolbox quality bench (tests/bench_vt.py) and its fitted curves.
  • fix: a --dry-run that needs the encoder list (--codec av1/prores, --hw) reads it from ffprobe -encoders and no longer runs ffmpeg -encoders, keeping the promise that a writing tool's dry run runs no ffmpeg; a real run keeps reading ffmpeg -encoders, the build that encodes (on a mixed install, a Homebrew ffprobe next to a static ffmpeg, ffprobe's list is another build's).
  • fix(batch): a cache entry whose output a later run rewrote (another recipe for the same file) is dropped, so switching back re-processes the item instead of serving the other run's file as cached.
  • fix(waveform): commands lists the title/caption stages' command lines too, as render.py's does, so it holds every ffmpeg command the run planned or ran.
  • feat: opt-in Apple VideoToolbox encoding (--hw) (#311)

What's Changed

  • feat: opt-in Apple VideoToolbox encoding (--hw) by @kajisho5 in #311

Full Changelog: v2.5.1...v2.6.0

Don't miss a new ffmpeg-skill release

NewReleases is sending notifications on new releases.