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 metadatatsximport {downloadAndParseMedia } from '@remotion/media-parser';import {nodeWriter } from '@remotion/media-parser/node-writer';const {durationInSeconds ,tracks } = awaitdownloadAndParseMedia ({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 longtsximport {downloadAndParseMedia } from '@remotion/media-parser';import {nodeWriter } from '@remotion/media-parser/node-writer';const {durationInSeconds } = awaitdownloadAndParseMedia ({src : 'https://s3.amazonaws.com/bucket/uploaded-asset.mp4',writer :nodeWriter ('output.mp4'),onDurationInSeconds : (duration ) => {if (duration &&duration > 600) {throw newError ('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 errortsximport {downloadAndParseMedia } from '@remotion/media-parser';import {nodeWriter } from '@remotion/media-parser/node-writer';awaitdownloadAndParseMedia ({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'};},});