We are operating with semantic versioning.
Update FFmpeg to 4.4.1 for the binary wheels.
Fix framerate when writing video with FFmpeg 4.4 (#876).
Re-implement AudioResampler with aformat and buffersink (#761). AudioResampler.resample() now returns a list of frames.
Remove deprecated methods: AudioFrame.to_nd_array, VideoFrame.to_nd_array and Stream.seek.
Provide binary wheels for macOS/arm64 and Linux/aarch64.
Simplify setup.py, require Cython.
Update the installation instructions in favor of PyPI.
Fix VideoFrame.to_image with height & width (#878).
Fix setting Stream time_base (#784).
Replace deprecated av_init_packet with av_packet_alloc (#872).
Validate pixel format in VideoCodecContext.pix_fmt setter (#815).
Fix AudioFrame ndarray conversion endianness (#833).
Improve time_base support with filters (#765).
Allow flushing filters by sending None (#886).
Avoid unnecessary vsnprintf() calls in log_callback() (#877).
Make Frame.from_ndarray raise ValueError instead of AssertionError.
Update FFmpeg to 4.3.2 for the binary wheels.
Provide binary wheels for Python 3.10 (#820).
Stop providing binary wheels for end-of-life Python 3.6.
Fix args order in Frame.__repr__ (#749).
Fix documentation to remove unavailable QUIET log level (#719).
Expose codec_context.codec_tag (#741).
Add example for encoding with a custom PTS (#725).
Use av_packet_rescale_ts in Packet._rebase_time() (#737).
Do not hardcode errno values in test suite (#729).
Use av_guess_format for output container format (#691).
Fix documentation code block indentation (#783).
Fix link to Conda installation instructions (#782).
Export AudioStream from av.audio (#775).
Fix setting CodecContext.extradata (#801).
Update FFmpeg to 4.3.1 for the binary wheels.
Enable additional FFmpeg features in the binary wheels.
Use os.fsencode for both input and output file names (#600).
Drop support for Python 2 and Python 3.4.
Provide binary wheels for Linux, Mac and Windows.
Remove shims for obsolete FFmpeg versions (#588).
Add yuvj420p format for
Add support for palette formats in
Fix Python 3.8 deprecation warning related to abstract base classes (#616).
Remove ICC profiles from logos (#622).
Drop support for FFmpeg < 4.0. (#559)
Introduce per-error exceptions, and mirror the builtin exception hierarchy. It is recommended to examine your error handling code, as common FFmpeg errors will result in ValueError baseclasses now. (#563)
Data stream’s encode and decode return empty lists instead of none allowing common API use patterns with data streams.
InputContainer.seek()as non-time seeking doesn’t seem to actually be supported by any FFmpeg formats.
Users can disable the logging system to avoid lockups in sub-interpreters. (#545)
VideoFrame.reformat()can specify interpolation.
Expose many sets of flags.
av.open()to be used as a context manager.
Fix compatibility with PyPy, the full test suite now passes. (#130)
Ensure audio output gets flushes when using a FIFO. (#511)
Make Python I/O buffer size configurable. (#512)
Do not install the scratchpad package.
Fix more compiler warnings.
av.datasetsfor sample data that is pulled from either FFmpeg’s FATE suite, or our documentation server.
streamargument to specify the
Avoid infinite look in
Correctly handle Python I/O with no
Assert building against compatible FFmpeg. (#401)
Lock down Cython lanaguage level to avoid build warnings. (#443)
Incremental improvements to docs and tests.
Examples directory will now always be runnable as-is, and embeded in the docs (in a copy-pastable form).
Drop support for FFmpeg < 3.2.
VideoFrame.to_qimagemethod, as it is too tied to PyQt4. (#424)
Make all video frames created by PyAV use 8-byte alignment. (#425)
Fix manipulations on video frames whose width does not match the line stride. (#423)
Consistently decode dictionary contents. (#414)
Always use send/recv en/decoding mechanism. This removes the
countparameter, which was not used in the send/recv pipeline. (#413)
Remove various deprecated iterators. (#412)
Fix a memory leak when using Python I/O. (#317)
OutputContainer.mux_one()call av_interleaved_write_frame with the GIL released.
Remove the “reflection” mechanism, and rely on FFmpeg version we build against to decide which methods to call. (#416)
Fix many more
Below here we used
x to signal a major change (i.e. backwards
incompatibilities) and incremented
y as a minor change (i.e. backwards
Once we wanted more subtlety and felt we had matured enough, we jumped
past the implications of
v1.0.0 straight to
(as if we had not been stuck in
v0.x.y all along).
VideoFrame.reformat()can throw exceptions when requested colorspace transforms aren’t possible.
Wrapping the stream object used to overwrite the
VideoFrame.ptrin favour of
Packet.update_bufferin favour of
Plane.update_from_string()in favour of
Fixed Windows build, which broke in v0.5.1.
Compiler checks are not cached by default. This behaviour is retained if you
source scripts/activate.shto develop PyAV. (#256)
PYAV_DEBUG_BUILD=1to force a verbose reflection (mainly for being installed via
pip, which is why this is worth a release).
Dropped support for Libav in general. (#110)
No longer uses libavresample.
CodecContexthas taken over encoding/decoding, and can work in isolation of streams/containers.
Stream.encodereturns a list of packets, instead of a single packet.
ValueErrorif input frames inconsistant
time_baseuse has been revisited across the codebase, and may not be converted bettween
CodecContext.time_baseat the same times in the transcoding pipeline.
CodecContext.ratehas been removed, but proxied to
AudioCodecContext.sample_rate. The definition is effectively inverted from the old one (i.e. for 24fps it used to be
1/24and is now
rate) will be
Noneif they are invalid.
Stream.seekwill raise TypeError if given a float, when previously they converted it from seconds.
ptsand other attributes are writeable.
Optionexposes much more of the API (but not get/set). (#243)
Expose metadata encoding controls. (#250)
Expose basics of avfilter via
AudioFrame.to_nd_arrayto match same on
Update Windows build process.
Further improvements to the logging system. (#128)
Repeating log messages will be skipped, much like ffmpeg’s does by default
Python IO can write
Improve build system to use Python’s C compiler for function detection; build system is much more robust
Continuous integration on Windows via AppVeyor. (by @vidartf)
Packet.decode_one()to skip packet flushing for codecs that would otherwise error
StreamContainerfor easier selection of streams
Add buffer protocol support to Packet
Fix usage of changed Pillow API
VideoFrame is suspected to leak memory in narrow cases on Linux. (#128)
There was an issue with the PyPI distribution in which it required Cython to be installed.
Agressively releases GIL
Add experimental Windows build. (#84)
Several new Stream/Packet/Frame attributes
Cythonization in setup.py; mostly a development issue.
Fix for av.InputContainer.size over 2**31.
Python 3 compatibility!
Build process fails if missing libraries.
Fix linking of libavdevices.
This version has an issue linking in libavdevices, and very likely will not work for you.
It sure has been a long time since this was released, and there was a lot of arbitrary changes that come with us wrapping an API as we are discovering it. Changes include, but are not limited to:
Exposing planes and buffers.
Descriptors for channel layouts, video and audio formats, etc..
Many many more properties on all of the objects.
Device support (e.g. webcams).
FIRST PUBLIC RELEASE!
Audio FIFOs and resampling.