Video concatenation
Last updated: Sep-06-2026
Use Cloudinary's video concatenation options to join videos together, combine videos with images, join audio files, or concatenate private and authenticated assets. For transition effects between concatenated assets, see Video transition effects.
video asset type in Cloudinary, because an audio file is essentially a video file without a visual element. Many of the transformations described on this page work on audio files as well, and you can combine audio and video assets in the same URL. For a summary of which transformations apply to audio, see Which video transformations apply to audio.Before you start
Whether concatenating videos together, concatenating videos with images, joining audio files, with or without transitions, there are a few important points to note:
- Assets spliced together or concatenated with a custom transition must be the same width and height (this doesn't apply when both assets are audio files, because they have no dimensions). You can use size transformation parameters to ensure that both assets match in size (
wandh). If using a transition video, this is automatically scaled to the same size. - Replace any forward slashes with colons in the public ID of the concatenated asset or the transition video.
- There is slightly different syntax for concatenating authenticated or private assets.
- You can't use object aware cropping in layers (assets concatenated with the overlay parameter). This includes when specifying an object as a gravity option for the zoompan effect.
Concatenate videos together
To concatenate videos, use the overlay video parameter (l_video: in URLs) to specify the name of another uploaded video and then add the splice flag (fl_splice in URLs), which instructs Cloudinary to concatenate the video with the base video rather than treating it as a layer over it.
You can also concatenate videos with custom transitions using the transition effect (e_transition in URLs).
For example, to concatenate the video named fashion_walk onto the end of the video named meadow_walk, with both videos set to a width of 300 pixels and a height of 200 pixels:
By default, Cloudinary splices the video onto the end of the base video. To splice the video onto the beginning, add the start_offset parameter and set it to 0 (so_0 in URLs). For example, to concatenate the video named fashion_walk onto the beginning of the video named meadow_walk, with both videos set to a width of 300 pixels and a height of 200 pixels:
To concatenate only a section of a video to the end of another video, use the offset parameters (see Trimming videos for more information on the parameters and their possible values) together with the layer_apply flag (fl_layer_apply in URLs). For example, to splice the first 5 seconds of the video named fashion_walk to the end of the video named meadow_walk, with both videos set to a width of 300 pixels and a height of 200 pixels.
The layer_apply flag in the above example instructs Cloudinary to apply the so_0 parameter in the layer component as a regular start offset transformation parameter applied to the layer, and not in its special concatenate-to-beginning usage for fl_splice. To use so_0 with fl_splice for concatenating to the beginning, in a case where fl_layer_apply is also used, specify so_0 in the fl_layer_apply component, for example: /l_...../fl_layer_apply,so_0.
Concatenate videos with images
Cloudinary also supports the concatenation of videos with images by using the following combination of parameters:
-
overlay(l: in URLs) to specify the name of an uploaded image. -
spliceflag (fl_splicein URLs) to indicate that Cloudinary should concatenate the image onto the base video and not add it as an overlay. -
durationparameter (duin URLs) to specify the amount of time in seconds to display the image. -
start_offset(optional) set to 0 (so_0in URLs) to concatenate the image at the beginning of the video instead of at the end. -
layer_applyflag (fl_layer_apply) to indicate that Cloudinary should apply the above parameters to the image (with the overlay parameter) and not the base video.
For example, to concatenate the image named red-sweater to the start of the video named meadow_walk for a duration of 3 seconds (Cloudinary scales the image to a width of 300 pixels and a height of 200 pixels, resizes the video to those dimensions, and pads the video for the extra space):
Concatenate audio files
Join audio files using the audio overlay parameter (l_audio: in URLs) together with the splice flag (fl_splice in URLs). Audio files have no dimensions, so you don't need to match sizes first.
For example, here are two piano tracks from the fourth movement of Franck's Violin Sonata, docs/franck/audio/piano_low and docs/franck/audio/piano_high:
To play the higher track after the lower one, specify the lower track as the base asset and splice the higher track onto the end of it:
As with videos, add so_0 to the layer_apply component to splice the track onto the beginning instead:
You can also trim the track you're joining, using the offset parameters in the layer component. For example, to splice only the first 5 seconds of the higher track onto the end of the lower one:
To join more than two files, add an audio overlay component for each additional file, with its own fl_splice and fl_layer_apply.
Video tutorial: Concatenate videos using the Node.js SDK
Watch this video tutorial to learn how to concatenate two videos using the Node.js SDK:
This video is brought to you by Cloudinary's video player - embed your own!
Use the controls to set the playback speed, navigate to chapters of interest and select subtitles in your preferred language.
Tutorial contents
Concatenating authenticated or private assets
Similar to specifying authenticated or private assets in overlays, when concatenating authenticated or private assets, you need to modify the syntax accordingly:
Images:
- For private images:
l_private:<public_id of image> - For authenticated images:
l_authenticated:<public_id of image>
Videos:
- For private videos:
l_video:private:<public_id of video> - For authenticated videos:
l_video:authenticated:<public_id of video>
Audio assets:
- For private audio assets:
l_audio:private:<public_id of audio asset> - For authenticated audio assets:
l_audio:authenticated:<public_id of audio asset>