Skip to main content

Download and Parse Videos or Audio simultaneously

warning

Unstable API: This package is experimental. The API may change in the future.
The API for getting video metadata is stable and may be used in production.

@remotion/media-parser allows you to download a remote video to disk, and while the media is downloading, retrieve metadata from it as soon as it is available.

Here is an example using the downloadAndParseMedia() API:

Download a file and get metadata
tsx
import {downloadAndParseMedia} from '@remotion/media-parser';
import {nodeWriter} from '@remotion/media-parser/node-writer';
 
const {durationInSeconds, tracks} = await downloadAndParseMedia({
src: 'https://s3.amazonaws.com/bucket/uploaded-asset.mp4',
writer: nodeWriter('output.mp4'),
fields: {
durationInSeconds: true,
tracks: true,
},
});
// If here was reached, file is downloaded!
console.log(durationInSeconds);
console.log(tracks);

You can use callback functions to retrieve information as soon as it is available.
Throw an error to stop the download.

Stop the download if the video is too long
tsx
import {downloadAndParseMedia} from '@remotion/media-parser';
import {nodeWriter} from '@remotion/media-parser/node-writer';
 
const {durationInSeconds} = await downloadAndParseMedia({
src: 'https://s3.amazonaws.com/bucket/uploaded-asset.mp4',
writer: nodeWriter('output.mp4'),
onDurationInSeconds: (duration) => {
if (duration && duration > 600) {
throw new Error('Video is too long');
}
},
});

If an error occurs (including one you've thrown yourself), you can decide what to do using onError.

Continue download despite error
tsx
import {downloadAndParseMedia} from '@remotion/media-parser';
import {nodeWriter} from '@remotion/media-parser/node-writer';
 
await downloadAndParseMedia({
src: 'https://s3.amazonaws.com/bucket/uploaded-asset.mp4',
writer: nodeWriter('output.mp4'),
onError: (error) => {
// Force the file to be downloaded despite parsing error.
// Note: At the end, the error will be thrown nonetheless.
return {action: 'download'};
 
// Default behavior:
// Abort the download, delete the file and throw the error immediately.
// return {action: 'fail'};
},
});

See also