Editly is a framework for declarative NLE (non-linear video editing) using Node.js and ffmpeg. It allows you to **easily and programmatically** create a video from set of videos, images and titles, with smooth transitions between.
Editly is a tool and framework for declarative NLE (non-linear video editing) using Node.js and ffmpeg. It allows you to **easily and programmatically** create a video from set of clips, images and titles, with smooth transitions between.
Also provides a simple command line for quickly assembling a video.
There is a simple command line for quickly assembling a video from a set of clips or images, or you can use it from Javascript!
Inspired by [ffmpeg-concat](https://github.com/transitive-bullshit/ffmpeg-concat). The problem with that project is that it uses an extreme amount of disk space, especially for HD/4K videos. This projects solves that by doing **streaming** editing, so it doesn't store any temporary files.
Inspired by [ffmpeg-concat](https://github.com/transitive-bullshit/ffmpeg-concat). The problem with that project is that it is quite slow and uses an extreme amount of disk space, especially for HD/4K videos. This projects solves that by doing **streaming** editing, so it doesn't store any temporary files.
This GIF/youtube was created with this command: "editly [commonFeatures.json5](https://github.com/mifi/editly/blob/master/examples/commonFeatures.json5)
https://youtu.be/LNeclLkxUEY
## Requirements
## Requirements
- [Node.js installed](https://nodejs.org/en/) (Recommended to use newest stable version)
- [Node.js installed](https://nodejs.org/en/) (Recommended to use newest stable version)
- Should work on Windows, MacOS and Linux. The command line utility needs at least Node.js v12.16.2 ([see issue](https://github.com/sindresorhus/meow/issues/144)). See also https://github.com/stackgl/headless-gl#system-dependencies
- Should work on Windows, MacOS and Linux. Needs at least Node.js v12.16.2 on MacOS ([see issue](https://github.com/sindresorhus/meow/issues/144)). See also https://github.com/stackgl/headless-gl#system-dependencies
Make sure you have `ffmpeg` and `ffprobe` installed and available in `PATH`
Make sure you have `ffmpeg` and `ffprobe` installed and available in `PATH`
@ -17,11 +23,12 @@ Make sure you have `ffmpeg` and `ffprobe` installed and available in `PATH`
`npm i -g editly`
`npm i -g editly`
## CLI video editor
## Usage: Command line video editor
Run `editly --help` for usage
Run `editly --help` for usage
Create a simple randomized video edit from videos, images and text
Create a simple randomized video edit from videos, images and text with an audio track:
```sh
```sh
editly \
editly \
title:'My video' \
title:'My video' \
@ -32,13 +39,12 @@ editly \
img2.jpg \
img2.jpg \
title:'THE END' \
title:'THE END' \
--audio-file-path /path/to/music.mp3 \
--audio-file-path /path/to/music.mp3 \
--font-path /path/to/my-favorite-font.ttf
```
```
Or create a GIF (or MP4) from a JSON edit spec
Or create a GIF (or MP4) from a JSON or JSON5 edit spec*(JSON5 is just a more friendly JSON format)*:
```
editly --json my-editly.json --out output.gif
```sh
editly my-editly.json5 --out output.gif
```
```
For examples of how to make an JSON edit spec, see https://github.com/mifi/editly/tree/master/examples
For examples of how to make an JSON edit spec, see https://github.com/mifi/editly/tree/master/examples
@ -47,7 +53,6 @@ By default it will use the **width**, **height** and **frame rate** from the **f
**TIP:** Run with `--fast` or `fast: true` first to improve speed while testing
**TIP:** Run with `--fast` or `fast: true` first to improve speed while testing
## Javascript library
## Javascript library
```js
```js
@ -58,11 +63,22 @@ await editly(editSpec)
.catch(console.error);
.catch(console.error);
```
```
## Use cases
- Create a slideshow from a set of pictures with text overlay
- Create a fast paced video trailer with clips
- Create a tutorial video
- Simply convert a video to a GIF
See [examples](https://github.com/mifi/editly/tree/master/examples)
## Features
## Features
- Custom Canvas/Fabric.js rendering
- Can output the same video to multiple sizes, like Instagram post, Instagram story 9:16, YouTube 16:9, or any dimensions you like
- TODO add more
- Supports any size like 4K video and DSLR photos
- Can output to any dimensions, like Instagram post, Instagram story 9:16, YouTube 16:9, or any other dimensions you like. Content will be scaled and letterboxed automatically, even if aspect ratio is not correct.
- Automatically converts frame rate
- Accepts custom HTML5 Canvas / Fabric.js Javascript code for custom screens or dynamic overlays