Skip to main content

downloadAndParseMedia()

Same as parseMedia(), but also downloads the media file to disk.

Meant to be used in Node.js and Bun.

Download a file
tsx
import {downloadAndParseMedia} from '@remotion/media-parser';
import {nodeWriter} from '@remotion/media-parser/node-writer';
 
await downloadAndParseMedia({
src: 'https://www.w3schools.com/html/mov_bbb.mp4',
writer: nodeWriter('output.mp4'),
});

You can obtain fields like tracks and duration by passing them to the fields object.

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'};
},
});

API

All of the same parameters for parseMedia() are available, plus:

writer

The writer to use to write the downloaded file to disk. Currently available:

  • nodeWriter from @remotion/media-parser/node-writer: Writes to disk using Node.js's fs module.

onError

A function that is called when an error occurs. It receives the error as an argument.
You must return one of the following:

  • {action: 'download'}: Continue downloading the file despite the error.
  • {action: 'fail'}: Abort the download, delete the file and throw the error immediately.

See also the example above.
The function may be async, parsing is paused until it resolves.

See also