Skip to main content

Audio

Compositions handle audio in two ways: the sound of the video items themselves, and standalone audio items (music, voice-over). In both cases the audio plays in sync during preview and is mixed into an AAC track on export — you never have to touch audio buffers yourself.

Video item audio​

Video items are silent by default. Set audio to also play the file's own audio track, following the same time mapping as its frames:

const composition = {
duration: 10,
items: [
{
id: 'clip',
path: 'path/to/video.mp4',
compositionStartTime: 0,
startTime: 0,
duration: 10,
audio: { volume: 0.8 }, // or simply `audio: true`
},
],
};

Audio items​

An item with kind: 'audio' contributes only sound. The source can be an audio file or any video file (its audio track is used). Audio items never appear in the frames map passed to drawFrame.

{
id: 'music',
kind: 'audio',
path: 'path/to/music.m4a',
compositionStartTime: 0, // when it starts on the timeline
startTime: 12, // offset inside the source file
duration: 10,
volume: 0.3, // 0..1, defaults to 1
}

Overlapping audio (a video's soundtrack + background music, several music items…) is mixed together.

Looping a track over the composition​

Audio items don't loop by themselves. To cover a montage longer than the track, chain as many copies as needed:

for (let time = 0, i = 0; time < duration; time += track.duration, i++) {
items.push({
kind: 'audio',
id: `music-${i}`,
path: track.path,
compositionStartTime: time,
startTime: 0,
duration: Math.min(track.duration, duration - time),
volume: 0.8,
});
}

Export settings​

When the composition contains audio, the exported file gets an AAC track, configurable through the export options:

OptionDefault
audioBitRate128000Bit rate in bits per second.
audioSampleRate44100Sample rate in Hz.
audioChannelCount21 = mono, 2 = stereo.