We are operating with semantic versioning.
Features:
- Support reusing the thread's current CUDA context via a
current_ctxflag onCudaContextandVideoFrame.from_dlpack, for interop with libraries like PyTorch that initialize CUDA first by :gh-user:`Yozer` (:pr:`2339`). VideoFrame.from_dlpackno longer requires restatingprimary_ctx/current_ctxwhen passing an explicitcuda_context; the flags are only validated when explicitly given by :gh-user:`WyattBlue`.
Breaking:
- Remove Python 3.10
Features:
- Support HW encoding via a
hwaccelparameter onOutputContainer.add_stream(e.g.h264_vaapi,h264_nvenc,h264_videotoolbox); software frames passed toencodeare uploaded to the device automatically by :gh-user:`WyattBlue` (:issue:`2156`). - Use FFmpeg 8.1.2 in the binary wheels by :gh-user:`WyattBlue`.
- Expose
sw_formatonVideoCodecContext, and allow configuring the software format of hardware encoders by :gh-user:`WyattBlue`. - Add
optionsparameter toAudioResamplerfor passinglibswresampleoptions (e.g.resampler,filter_size,cutoff) by :gh-user:`WyattBlue` (:issue:`2262`). - Support
yuv420p10leinVideoFrame.to_ndarrayandVideoFrame.from_ndarrayby :gh-user:`WyattBlue` (:issue:`1981`). - Add
atparameter toGraph.pushandGraph.vpushto push a frame to a single buffer source by index, for multi-input filters likeoverlayby :gh-user:`WyattBlue`. find_best_pix_fmt_of_listnow returns the loss as aPixFmtLossenum.IntFlaginstead of a plainintby :gh-user:`WyattBlue` (:issue:`2300`).- Add
Colorspace.BT2020by :gh-user:`mark-oshea`. BitStreamFilterContextnow accepts aCodecor a codec-namestrasin_streamto pin the input codec without a fullStreamby :gh-user:`WyattBlue`.
Fixes:
- Fix
VideoFrame.reformat(andto_ndarray/to_rgb/to_image) raisingOSErrorOperation not supportedon frames tagged with reserved or otherwise unsupportedcolor_primaries/color_trcvalues (e.g. VP9 and NVDEC output); a transfer/primaries conversion is now only performed when explicitly requested by :gh-user:`WyattBlue` (:issue:`2208`). - Fix
add_mux_streamproducing unwritable Matroska files by extracting codec extradata from the bitstream before the header is written by :gh-user:`WyattBlue` (:issue:`2198`). - Encode GPU frames (e.g. CUDA frames from DLPack) directly with
pix_fmt="cuda"by adopting the frame'shw_frames_ctxbefore opening the encoder by :gh-user:`WyattBlue` (:issue:`2199`). - Fix a crash when reading
VideoCodecContext.pix_fmtbefore it is set; it now returnsNoneby :gh-user:`CarlosRDomin`. - Preserve frame attributes (
pts,time_base, colorspace, etc.) when downloading hardware frames to system memory by :gh-user:`CarlosRDomin`.
Breaking:
- Remove the undertested
av.optionandav.descriptorAPIs, along with the relatedCodecandFilterdescriptor accessors.
Features:
- Use FFmpeg 8.1.1 in the binary wheels by :gh-user:`WyattBlue`.
- Build Linux ARMv7 binary wheels by :gh-user:`WyattBlue`.
- Expose
AVCodecContext.global_qualityby :gh-user:`WyattBlue` in (:pr:`2246`). - Expose
Stream.discardso demuxing and seeking can skip unwanted streams by :gh-user:`WyattBlue` (:issue:`2272`). - Add
Stream.set_display_matrix()andStream.set_display_rotation()to write the container display (rotation) matrix on output streams by :gh-user:`hmaarrfk` in (:pr:`2287`). - Add
Container.video_codec_idto force a specific video codec on a container by :gh-user:`WyattBlue` (:issue:`2243`).
Fixes:
- Add
cython.finalto leaf classes, ensuring that they are not subclassed by :gh-user:`WyattBlue`. - Warn that
CodecContext.decode()is not memory safe in some cases. - Fix memory leaks in
FFmpegError,AudioLayoutchannel layouts, andFrame.opaque, and break a reference cycle betweenFilterLinkandGraphby :gh-user:`lgeiger`. - Reduce excessive logging lock contention by :gh-user:`WyattBlue` (:issue:`2276`).
- Fix a crash when accessing
Streamfrom multiple threads under FFmpeg 8.1 by :gh-user:`WyattBlue` (:issue:`2247`). - Fix a crash during
InputContainerinitialization by :gh-user:`WyattBlue` (:issue:`2010`). - Fix
enumerate_input_devicesandenumerate_output_devicesraisingAttributeErrorby :gh-user:`WyattBlue` and :gh-user:`kazuki` (:issue:`2264`). - Map HTTP 429 to
HTTPTooManyRequestsErrorinstead ofUndefinedErrorby :gh-user:`WyattBlue` (:issue:`2267`). - Fix crash in
VideoFrame.to_ndarray()andto_image()on bottom-up frames with a negativeline_sizeby :gh-user:`WyattBlue` (:issue:`2213`). - Make
DispositionanIntFlagsoStream.dispositioncan be assigned without raisingTypeErrorby :gh-user:`HotariTobu`. - Assign parser-inferred
pts,dts, anddurationto packets fromCodecContext.parse()by :gh-user:`WyattBlue` (:issue:`1919`). - Copy
time_baseinadd_stream_from_template()by :gh-user:`daveisfera` in (:pr:`2249`). - Fix the remux examples dropping keyframes that demux with no DTS, which produced audio-only output by :gh-user:`WyattBlue` (:issue:`1917`).
- Fix subtitle UTF-8 handling by :gh-user:`jbree` in (:pr:`2271`).
- Fix several incorrect
mallocsize calculations by :gh-user:`WyattBlue`.
Fixes:
- A cdivision decorator for faster division.
- Adjust tests so they work with 8.1 by :gh-user:`strophy`.
- Make VideoFormat.components lazy by :gh-user:`WyattBlue`.
- Break reference cycle
StreamContainer.get()by :gh-user:`lgeiger`. - Expose threads in filter graph by :gh-user:`lgeiger`.
- Fix crash with container closing with GC by :gh-user:`WyattBlue`.
- Fix "Writing packets to data stream broken in av>=17" regression :issue:`2223` by :gh-user:`WyattBlue`.
- Remove
_send_packet_and_recvto simplifydecode()by :gh-user:`lgeiger`. - Reuse a
AVPacketread buffer when demuxing by :gh-user:`lgeiger` and :gh-user:`WyattBlue`. - Use
AVCodecContext.frame_numinstead of counting ourselves by :gh-user:`WyattBlue`. - Use
av_channel_layout_compare()forAudioLayout.__eq__()by :gh-user:`WyattBlue`.
Major:
- Limited API binary wheels are now built.
- 3.13t (free-threading) will be dropped because of storage limitations.
- When an FFmpeg C function indicates an error, raise av.ArgumentError instead of ValueError/av.ValueError. This helps disambiguate why an exception is being thrown.
- Save space by removing libaom (av1 encoder/decoder); dav1d, stvav1, and hardware, are available alternatives.
Features:
- Add
OutputContainer.add_mux_stream()for creating codec-context-free streams, enabling muxing of pre-encoded packets without an encoder, addressing :issue:`1970` by :gh-user:`WyattBlue`. - Use zero-copy for Packet init from buffer data by :gh-user:`WyattBlue` in (:pr:`2199`).
- Expose AVIndexEntry by :gh-user:`Queuecumber` in (:pr:`2136`).
- Preserving hardware memory during cuvid decoding, exporting/importing via dlpack by :gh-user:`WyattBlue` in (:pr:`2155`).
- Add enumerate_input_devices and enumerate_output_devices API by :gh-user:`WyattBlue` in (:pr:`2174`).
- Add
ColorTrcandColorPrimariesenums; addcolor_trcandcolor_primariesproperties toVideoFrame; adddst_color_trcanddst_color_primariesparameters toVideoFrame.reformat(), addressing :issue:`1968` by :gh-user:`WyattBlue` in (:pr:`2175`). - Add multithreaded reformatting and reduce Python overhead by replacing
sws_scalewithsws_scale_frame, skipping unnecessary reformats, and minimizing Python interactions by :gh-user:`lgeiger`. - Prevent data copy in
VideoFrame.to_ndarray()for padded frames by :gh-user:`lgeiger` in (:pr:`2190`).
Fixes:
- Fix :issue:`2149` by :gh-user:`WyattBlue` in (:pr:`2155`).
- Fix packet typing based on stream and specify InputContainer.demux based on incoming stream by :gh-user:`ntjohnson1` in (:pr:`2134`).
- Fix memory growth when remuxing with
add_stream_from_templateby skippingavcodec_open2for template-initialized codec contexts, addressing :issue:`2135` by :gh-user:`WyattBlue`. - Explicitly disable OpenSSL in source builds (
scripts/build-deps) to prevent accidental OpenSSL linkage that breaks FIPS-enabled systems, addressing :issue:`1972`. - Add missing
SWS_SPLINEinterpolation by :gh-user:`lgeiger` in (:pr:`2188`).
Features:
- Add support for Intel QSV codecs by :gh-user:`ladaapp`.
- Add AMD AMF hardware decoding by :gh-user:`ladaapp2`.
- Add subtitle encoding support by :gh-user:`skeskinen` in (:pr:`2050`).
- Add read/write access to PacketSideData by :gh-user:`skeskinen` in (:pr:`2051`).
- Add yuv422p support for video frame to_ndarray and from_ndarray by :gh-user:`wader` in (:pr:`2054`).
- Add binding for
avcodec_find_best_pix_fmt_of_list()by :gh-user:`ndeybach` in (:pr:`2058`).
Fixes:
- Fix #2036, #2053, #2057 by :gh-user:`WyattBlue`.
Fixes:
- Add new hwaccel enums by :gh-user:`WyattBlue` in (:pr:`2030`).
Major:
- Drop Python 3.9, Support Python 3.14.
- Drop support for i686 Linux.
Features:
- Add
Filter.Context.process_command()method by :gh-user:`caffeinism` in (:pr:`2000`). - Add packet side-data handling mechanism by :gh-user:`tikuma-lsuhsc` in (:pr:`2003`).
- Implemented set_chapters method by :gh-user:`DE-AI` in (:pr:`2004`).
- Declare free-threaded support and support 3.13t by :gh-user:`ngoldbaum` in (:pr:`2005`).
- Add writable and copyable attachment and data streams by :gh-user:`skeskinen` in (:pr:`2026`).
Fixes:
- Declare free-threaded support and support 3.13t by :gh-user:`ngoldbaum` in (:pr:`2005`).
- Allow
NoneinFilterContext.push()type stub by :gh-user:`velsinki` in (:pr:`2015`). - Fix typos
15.X Changelog <https://pyav.basswood.io/docs/15.1/development/changelog.html>