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 metadatatsx
import {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 longtsx
import {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 errortsx
import {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'};},});