Edit Videos Using Code
Shotstack is a cloud based video editing API. Unlike traditional desktop video editing applications like Adobe Premiere or After Effects, Shotstack is purely code based - you create an edit using code. The API uses a REST architectural style using JSON to describe how the video should be edited.
Although code based, the API follows many of the principles of desktop editing software such as a timeline, tracks and clips. If you have used with Adobe Premiere, After Effects or even Flash some of these concepts should be familiar, all be it without a graphical user interface.
These core concepts and principles are described below:
Edit
An edit encompasses everything about the video that you want to create and is made of two components - the timeline
which describes the assets (videos, images and titles) that you want use and how they are arranged (edited) and the
output
format (gif or mp4) and resolution (HD, SD, mobile, etc..).
{
"timeline": {...}, // the main video edit description
"output": {...} // the output format and resolution
}
The Edit is the JSON payload that you POST to the render endpoint to create your video.
Timeline
The timeline represents the time that the video will play for, using seconds and starting from 0. A timeline is made up
of tracks
which are like layers that contain clips.
{
"timeline": {
"tracks": [{...}] // array of tracks
},
...
}
Tracks
Tracks are like layers within the timeline which span the entire length of the timeline, a track contains one or more
clips
Tracks can be visualized as layers that can be placed one on top of another. Clips on the top most track will
obscure those on tracks below it. This can be useful for when you want to layer a title over a video clip or you want to
fade between clips.
Tracks also help to logically organize different types of content, for example a title track which plays over the top of a video and a watermark track that plays over the top of everything.
Tracks are an array within the timeline, the first element is the top track and the last element is the bottom most track:
{
"timeline": {
"tracks": [
{
... // top track
},
{
... // bottom track
}
]
},
...
}
Clips
Clips are where you select the asset (video, image or title) you want to display within a track on the timeline, when it starts, how long it plays for and what effects, transitions and filters you want to apply.
Clips are placed on a track at a specific start
time, for example a clip with a start
time of 3 will appear in
the video after three seconds have played. Clips also have a length
which determines how long the clip will play for
in seconds.
You can choose to set the start
or length
property automatically by setting it to auto
or end
. See the
smart clips section for all options.
Each asset
type has a specific set of options and features but you must specify the type
of asset and also the
content
of the asset such a URL src
to a video or image file or for titles a text
string.
{
"timeline": {
"tracks": [
{
"clips": [
{
// place an image at the very start of the track/timeline that plays for 4 seconds.
"asset":{
"type": "image",
"src": "https://s3-ap-southeast-2.amazonaws.com/my-bucket/photo.jpg",
},
"start": 0,
"length": 4
},
{
// place a video that starts on the fourth second of the track/timeline ("start": 4) that has
// the first two seconds trimmed ("trim": 2) and plays for 6 seconds ("length": 6).
"asset":{
"type": "video",
"src": "https://s3-ap-southeast-2.amazonaws.com/my-bucket/footage.mp4",
"trim": 2
},
"start": 4,
"length": 6
}
]
},
]
},
...
}
Do not place clips on a track so that their start or end times overlap. This will result in the clips flickering because the API does not know which clip to display.
A clip can also have transitions, effects and filters applied to them. A clip may look something like this when more options are applied:
{
"asset":{
"type": "video",
"src": "https://s3-ap-southeast-2.amazonaws.com/my-bucket/footage.mp4",
"trim": 2,
"volume": 0.5
},
"start": 0,
"length": 4,
"transition": {
"in": "fade",
"out": "fade"
},
"filter": "boost",
"effect": "slideRight"
}
From these basic building blocks you should be able to assemble a sophisticated, reusable template to create videos. Assets can be replaced or clips added using loops, conditions and other coding constructs allowing you to build a range of video based applications.