Video editing with Python
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]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_tools
temp_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=None
verbose_print()
-> no replacementcol
parameter in ColorClip()
-> use color
VideoClip.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]IndexError: list index out of range
when using concatenate_videoclips
[#646]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]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 #906
Merged pull requests:
Closed issues:
Moviepy now supports much better progress bars, using Proglog. Support for custom callbacks and more!
Fixed bugs:
Merged pull requests:
Closed issues:
with\_mask\(\)
#786
pcm_s24le
codec for .wav
files (#769)fullscreen
parameter to preview
(#773)
Merged pull requests:
fullscreen
parameter to preview
#773 (tburrows13)progress_bar
parameter added to write_images_sequence
VideoFileClip
objects now have a rotation
attributeValueError: operands could not be broadcast together with shapes
bug fixed (#334)
Requirements adjustments #530
Documentation build failures #525
Index is out of bounds - AudioFileClip #521
Youtube videos fail to load in documentation #536
unicodeDecoderError by running the setup.py during moviepy pip install #532
Should we push another version? #481
Add matplotlib example to the user guide? #421
Fails to list fx after freezing an app with moviepy #274
Documentation doesn't match ffmpeg presets #232
Fixed bugs:
Implemented enhancements:
Merged pull requests: