Organization of MoviePy’s code — MoviePy 1.0.1 documentation

# Organization of MoviePy’s code

This reviews the folders and files in moviepy’s code. It’s very easy:

At the root of the project you have everything required for the packaging and installation of moviepy (README, setup.py, LICENCE) etc. Then you the `docs/` folder with the source code of the documentation, a folder for some Example Scripts, and the main folder `moviepy/` for the source code of the library itself.

The folder `moviepy/` the classes and modules relative to the video and the audio are clearly separated into two subfolders `video/` and `audio/`. In `moviepy/` you will find all the classes, functions and decorations which are useful to both submodules `audio` and `video`:

- `Clip.py` defines the base object for `AudioClip` and `VideoClip` and the simple methods that can be used by both, like `clip.subclip`, `clip.set_duration`, etc.

- Files `config.py` and `config_defaults.py` store the default paths to the external programs FFMPEG and ImageMagick.

- `decorators.py` provides very useful decorators that automatize some tasks, like the fact that some effects, when applied to a clip, should also be applied to it’s mask, or to its audio track.

- `tools.py` provides misc. functions that are useful everywhere in the library, like a standardized call to subprocess, a time converter, a standardized way to print messages in the console, etc.

- `editor.py` is a helper module to easily load and initiate many functionalities of moviepy (see How to be efficient with MoviePy for more details)

The submodules `moviepy.audio` and `moviepy.video` are organized approximately the same way: at their root they implement base classes (respectively `AudioClip` and `VideoClip`) and they have the following submodules:

- `io` contains everything required to read files, write files, preview the clip or use a graphical interface of any sort. It contains the objects that speak to FFMEG and ImageMagick, the classes AudioFileClip and VideoFileClip, the functions used to preview a clip with pygame or to embed a video in HTML5 (for instance in the IPython Notebook).

- `fx` contains a collection of effects and filters (like turning a video black and white, correcting luminosity, zooming or creating a scrolling effect). To add an effect to MoviePy, you simply add a new file `my_effect.py` to this folder, and in the file you define the function `my_effect(clip, *other_parameters)`.

- `compositing` contains functions and classes to compose videoclips (CompositeVideoClip, concatenate_videoclips, clips_array)

- `tools` contains advanced tools that are not effects but can help edit clips or generate new clips (tracking, subtitles, etc.)