NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #1889 most downloaded on PyPI
Video editing with Python
Last release 1 years ago
21 May 2025
Ships unpredictably
gaps range from 4 weeks to 4.1 years
Some releases are documented
notes for 18 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
13 years old
89 releases · first in 2013
handle removed Pillow API by @Zulko in #2443
chore: skip metadata which not satisfied with "key:value" by @asd55667 in #2311
Fixes and requirements tweaks
Full Changelog: v2.1.2...v2.2
One column per quarter.
Transparency compositing and rendering have been completely fixed in this release. If you've experienced issues with transparency in the past, please
Transparency compositing and rendering have been completely fixed in this release. If you've experienced issues with transparency in the past, please try this update.
CompositeVideoClip to properly handle transparency.stroke_width from float 0.5 to int 1.-.Upgrade now to take advantage of these fixes!
Compositing and rendering of video with transparency was bugged for a long long time (probably since start of the project), if you had encountered any issue with transparency in the past we strongly suggest you to try this new release.
- crashed file savingMake FFMPEG_VideoReader more robust to missing information. by @Breakthrough in #2253
FFMPEG_VideoReader more robust to missing information. by @Breakthrough in #2253Full Changelog: v2.1.0...v2.1.1
More api changes by @Zulko in #2255
last_read is always set. by @Breakthrough in #2257Full Changelog: v2.0.0...v2.1.0
Remove deprecated functions and parameters by @mgaitan in #1115
First release to PyPI in 4 years, so here is an unfiltered list of contributions
ColorClip.rotate() by @tburrows13 in #1139pos and lastread; FFMPEG_AudioReader.close_proc() -> close() by @tburrows13 in #1220Note truncated.
There are still no major breaking changes compared to v1.0.3. Expect them to come in the next dev update. Any new changes made to the master branch wi…
There are still no major breaking changes compared to v1.0.3. Expect them to come in the next dev update.
Any new changes made to the master branch will now be instantly reflected at https://moviepy.readthedocs.io, which is where documentation for all versions will be in the future. [#1328]
Install with pip install moviepy --pre --upgrade.
pix_fmt parameter in VideoFileClip, VideoClip.write_videofile(), VideoClip.write_gif() that allows passing a custom pix_fmt parameter such as "bgr24" to FFmpeg [#1237]change_duration parameter in Clip.set_fps() that allows changing the video speed to match the new fps [#1329]ffmpeg_parse_infos() and VideoFileClip now have optional decode_file parameter that ensures that the detected duration is correct, but may take a long time to run [#1063, #1222]ffmpeg_parse_infos() and VideoFileClip now use fps metadata instead of tbr to detect a video's fps value [#1222]FFMPEG_AudioReader.close_proc() -> FFMPEG_AudioReader.close() for consistency with FFMPEG_VideoReader [#1220]ffmpeg_tools.ffmpeg_extract_subclip creating clips with incorrect duration metadata [#1317]OSError: MoviePy error: failed to read the first frame of video file... would occasionally occur for no reason [#1220]UnicodeDecodeError crash when file metadata contained non-UTF8 characters [#959]All previously deprecated methods and parameters have been removed [ #1115 ]
This development version introduces many bug-fixes and changes. Please note that there may be large backwards-incompatible changes between dev versions!
The online documentation has not been updated to reflect the changes in the v2.0.0 branch, so for help on how to use the new features please refer to the docstrings in the source code.
Install with pip install moviepy --pre --upgrade.
config_defaults.py and MoviePy still cannot autodetect the binaries, you will need to switch to the new method using enviroment variables. [#1109]==. This checks whether every frame of the two clips are identical.env file [#1109]encoding parameter in SubtitlesClip [#1043]ffmpeg_stabilize_video() function in ffmpeg_toolstemp_audiofile_path parameter in VideoClip.write_videofile() to specify where the temporary audiofile should be created [#1144]VideoClip.set_layer() to specify the layer of the clip for use when creating a CompositeVideoClip [#1176]ffmpeg_parse_infos additionally returns "video_bitrate" and "audio_bitrate" values [#930]VideoFileClip or AudioFileClip through videoclip.reader.bitrate and audioclip.reader.bitrate [#930]vfx.scroll arguments w and h have had their order swapped. The correct order is now w, h but it is preferable to explicitly use keyword arguments. in the output file name of ffmpeg_extract_subclip() when targetname is not specified [#939]config_defaults.py is no longer possible [#1109]config.get_setting() and config.change_settings() functions [#1109]AudioClip.to_audiofile() -> use AudioClip.write_audiofile()VideoClip.to_videofile() -> use VideoClip.write_videofile()VideoClip.to_images_sequence() -> use VideoClip.write_images_sequence()concatenate() -> use concatenate_videoclips()verbose parameter in AudioClip.write_audiofile(), ffmpeg_audiowriter(), VideoFileClip(), VideoClip.write_videofile(), VideoClip.write_images_sequence(), ffmpeg_write_video(), write_gif(), write_gif_with_tempfiles(), write_gif_with_image_io() -> Instead of verbose=False, use logger=Noneverbose_print() -> no replacementcol parameter in ColorClip() -> use colorVideoClip.write_videofile() with write_logfile=True, errors would not be properly reported [#890]TextClip.list("color") now returns a list of bytes, not strings [#1119]TextClip.search("colorname", "color") does not crash with a TypeError [#1119]vfx.even_size previously created clips with odd sizes [#1124]IndexError in vfx.freeze, vfx.time_mirror and vfx.time_symmetrize [#1124]rotate() with a ColorClip no longer crashes [#1139]AudioFileClip would not generate audio identical to the original file [#1108]TypeError when using filename instead of txt parameter in TextClip [#1201]resize with a non-constant newsize to a clip with a mask would remove the mask [#1200]color_gradient() would crash with ValueError: The truth value of an array with more than one element is ambiguous [#1212]Bonus release to fix critical error when working with audio: AttributeError: 'NoneType' object has no attribute 'stdout' #1185
Note that this is likely to be the last release before v2.0, which will drop support for Python versions 2.7, 3.4 & 3.5 and will introduce other backw
Note that this is likely to be the last release before v2.0, which will drop support for Python versions 2.7, 3.4 & 3.5 and will introduce other backwards-incompatible changes.
Notable bug fixes:
slide_out effect works [#795]Fixed bugs:
Merged pull requests:
Closed issues:
ModuleNotFound: No module named 'imageio\_ffmpeg', or imageio v2.5.0 is breaking ffmpeg detection in config #906Update maintainer list in the README \#1022 (tburrows13)
<details><summary>Merged pull requests</summary><p>
Merged pull requests:
<details><summary>Closed issues</summary><p>
Closed issues:
Moviepy now supports much better progress bars, using Proglog. Support for custom callbacks and more!
Moviepy now supports much better progress bars, using Proglog. Support for custom callbacks and more!
<details><summary>Merged pull requests</summary><p>
<details><summary>Closed issues</summary><p>
Blink fx uses deprecated\(?\) method with\_mask\(\) \#786
<details><summary>Merged pull requests</summary><p>
Fixed bugs:
Merged pull requests:
<details><summary>Closed issues</summary><p>
Closed issues:
with\_mask\(\) #786Fixed bugs:
Closed issues:
with\_mask\(\) #786Merged pull requests:
Added pcm_s24le codec for .wav files
pcm_s24le codec for .wav files (#769)fullscreen parameter to preview (#773)<details><summary>Merged pull requests</summary><p>
Merged pull requests:
fullscreen parameter to preview #773 (tburrows13)<details><summary>Closed issues</summary><p>
Closed issues:
Removed support for Python 3.3 (#688, #713)
<details><summary>Merged pull requests</summary><p>
Fixed bugs:
Implemented enhancements:
Merged pull requests:
</p></details>
<details><summary>Closed issues</summary><p>
Modify setup.py handling \#531 (mbeacom)
progress_bar parameter added to write_images_sequenceVideoFileClip objects now have a rotation attributeValueError: operands could not be broadcast together with shapes bug fixed (#334)<details><summary>Merged pull requests</summary><p>
<details><summary>Closed issues</summary><p>
Requirements adjustments #530 <br />
Documentation build failures #525 <br />
Index is out of bounds - AudioFileClip #521 <br />
Youtube videos fail to load in documentation #536 <br />
unicodeDecoderError by running the setup.py during moviepy pip install #532 <br />
Should we push another version? #481
Add matplotlib example to the user guide? #421 <br />
Fails to list fx after freezing an app with moviepy #274 <br />
Documentation doesn't match ffmpeg presets #232 <br />
Implemented enhancements:
Closed issues:
Merged pull requests:
fix deprecation message \#302 (mgaitan)
<details><summary>Merged pull requests</summary><p>
Colorclip changed col>color #424 (Gloin1313) <br />progress\_bar option to write\_audiofile\(\) to complement #380 #458 (Gloin1313) <br /><details><summary>Closed issues</summary><p>
Nothing published for this version
This release includes a few Python 3 compatibility fixes and bug fixes.
This release includes a few Python 3 compatibility fixes and bug fixes.
on_color function docstring has wrong parameterself.filename as a VideoFileClip attributeImplemented enhancements:
self.filename as a VideoFileClip attribute #405 (tburrows13)Closed issues:
Merged pull requests:
Added Maintainers list to README.
Implemented enhancements:
Closed issues:
tostring\(\) in favour of tobytes\(\) #241Merged pull requests:
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
This is the first release of a trilogy that will include "The Dark MoviePy" and "The Dark MoviePy Rises". At this point I am not sure what releases ar
This is the first release of a trilogy that will include "The Dark MoviePy" and "The Dark MoviePy Rises". At this point I am not sure what releases are for.
So let's say this release celebrates that MoviePy is quite stable around different platforms and Python 2/3, or people stopped reporting bugs.
Major ideas for the next release:
It's going to be fun !
Closed issues:
error: string: When trying to import from moviepy #9Merged pull requests:
* This Changelog was automatically generated by github_changelog_generator
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →