Bug-fix release. Two separate defects made the 4.4 packages unusable for common
work: parse() could not find its cache data at all, and VideoStream.scale()
raised on every call in v7/v8/v9. Both are fixed here, so all thirteen packages
are republished.
Fixed
VideoStream.scale()raised on every call in v7, v8 and v9. FFmpeg 7
started printing scale's input pad and its dynamic-IO marker together, with
the marker nested under the pad; the help parser treated them as mutually
exclusive and discarded the pad. The generated binding then declared
typings_input=()while still passing the stream it was called on, so
input(...).video.scale(w=..., h=...)raised
FFMpegValueError: Expected 0 inputs, got 1. The same bad typing broke
parse()for any command line usingscaleand emitted a bogus zero-input
ffmpeg.sources.scale().scalewas the only filter affected; v5 and v6
predate the upstream changeparse()raisedFileNotFoundErroron every install.
pip install typed-ffmpeg[parse]installsffmpeg-data-v9, butffmpeg-core
4.4 only looked forffmpeg_data_v8down tov5. This reproduced solely on a
wheel install — a checkout readspackages/core'scache/list, which is not
shipped — which is why the test suite never caught it. The lookup now
discovers installedffmpeg-data-v*packages by name, so a new FFmpeg major
needs no change to it- A data package that was installed but did not carry the requested entry
shadowed an older one that did; the lookup now walks every installed data
package newest-first instead of committing to the newest scripts/create-stubs.pylistedbase.py,utils/snapshot.pyand
utils/view.pyasffmpeg_corere-exports. Neither exists as a usable
module, and the script writes unconditionally, so running it replaced working
code with broken stubs in every version package- Dispatching a single FFmpeg version to
ci-codegen-versions.ymlregenerated
all of them: the image map lived inmatrix.includekeyed onffmpeg-version,
which is also a matrix key, so the non-matching entries were appended as extra
jobs rather than merged uv.lockcarried twogriffelibentries after the mkdocstrings-python bump,
whichuvrejects outright;mkdocs.ymlpassed amkdocstringshandler
option that never existed and became a hard error in 2.0; the removed
fix-encoding-pragmahook was still configured, failing every pre-commit run;
and the filter-doc HTML fallback stopped matching after ffmpeg.org regenerated
its pages with a newer texinfo
Added
- Regression coverage for the above: the shared suite now asserts that no filter
reached by a stream method declares zero inputs. The only previous test
touching.scale()was skipped unless graphviz was installed, so the most
common filter in the library had no effective coverage docs/version-differences.mdgains an FFmpeg 8 → 9 section, verified
againstallfilters.c/allcodecs.c/allformats.conrelease/9.0.
Three entries misattributed to 8.0 in the 7 → 8 section are corrected
Changed
- The FFmpeg version list is now derived from
packages/v*rather than
enumerated, in thescripts/helpers (via the newscripts/_versions.py),
.gitattributes, the ruff configuration and the codegen workflow's apply
step.scripts/regenerate-monorepo.shhad silently skipped v9 for the whole
FFmpeg 9 rollout, and.gitattributesleft v9's generated bindings counted in
the language statistics - The TestPyPI smoke test installs the
typed-ffmpegmeta-package instead of a
pinned version package, so it exercises the chain the release actually ships ci-monorepo-testcovers v9 on Python 3.12, andci-monorepo-lintruns its
circular-import check against v9- Dependency updates: typer, ty, mypy, ruff, mkdocstrings-python,
mkdocs-literate-nav, mkdocs-gen-files, griffe-inherited-docstrings