/** * Copyright (c) 2025 Remotion AG * For licensing, see: https://remotion.dev/docs/webcodecs#license */ import type { MediaParserAudioTrack, MediaParserInternalTypes, MediaParserLogLevel, MediaParserVideoTrack, Options, ParseMediaFields, ParseMediaOptions } from '@remotion/media-parser'; import type { ConvertMediaAudioCodec } from './get-available-audio-codecs'; import { type ConvertMediaContainer } from './get-available-containers'; import { type ConvertMediaVideoCodec } from './get-available-video-codecs'; import { type ConvertMediaOnAudioTrackHandler } from './on-audio-track-handler'; import { type ConvertMediaOnVideoTrackHandler } from './on-video-track-handler'; import type { ResizeOperation } from './resizing/mode'; import { type WebCodecsController } from './webcodecs-controller'; export type ConvertMediaProgress = { decodedVideoFrames: number; decodedAudioFrames: number; encodedVideoFrames: number; encodedAudioFrames: number; bytesWritten: number; millisecondsWritten: number; expectedOutputDurationInMs: number | null; overallProgress: number | null; }; export type ConvertMediaResult = { save: () => Promise; remove: () => Promise; finalState: ConvertMediaProgress; }; export type ConvertMediaOnProgress = (state: ConvertMediaProgress) => void; export type ConvertMediaOnVideoFrame = (options: { frame: VideoFrame; track: MediaParserVideoTrack; }) => Promise | VideoFrame; export type ConvertMediaOnAudioData = (options: { audioData: AudioData; track: MediaParserAudioTrack; }) => Promise | AudioData; export declare const convertMedia: >({ src, onVideoFrame, onAudioData, onProgress: onProgressDoNotCallDirectly, audioCodec, container, videoCodec, controller, onAudioTrack: userAudioResolver, onVideoTrack: userVideoResolver, reader, fields, logLevel, writer, progressIntervalInMs, rotate, resize, onAudioCodec, onContainer, onDimensions, onDurationInSeconds, onFps, onImages, onInternalStats, onIsHdr, onKeyframes, onLocation, onMetadata, onMimeType, onName, onNumberOfAudioChannels, onRotation, onSampleRate, onSize, onSlowAudioBitrate, onSlowDurationInSeconds, onSlowFps, onSlowKeyframes, onSlowNumberOfFrames, onSlowVideoBitrate, onSlowStructure, onTracks, onUnrotatedDimensions, onVideoCodec, onM3uStreams, selectM3uStream, selectM3uAssociatedPlaylists, expectedDurationInSeconds, expectedFrameRate, seekingHints, ...more }: { src: ParseMediaOptions["src"]; container: ConvertMediaContainer; onVideoFrame?: ConvertMediaOnVideoFrame; onAudioData?: ConvertMediaOnAudioData; onProgress?: ConvertMediaOnProgress; videoCodec?: ConvertMediaVideoCodec; audioCodec?: ConvertMediaAudioCodec; controller?: WebCodecsController; onAudioTrack?: ConvertMediaOnAudioTrackHandler; onVideoTrack?: ConvertMediaOnVideoTrackHandler; selectM3uStream?: ParseMediaOptions["selectM3uStream"]; selectM3uAssociatedPlaylists?: ParseMediaOptions["selectM3uAssociatedPlaylists"]; expectedDurationInSeconds?: number | null; expectedFrameRate?: number | null; reader?: ParseMediaOptions["reader"]; logLevel?: MediaParserLogLevel; writer?: MediaParserInternalTypes["WriterInterface"]; progressIntervalInMs?: number; rotate?: number; resize?: ResizeOperation; fields?: F; seekingHints?: ParseMediaOptions["seekingHints"]; } & MediaParserInternalTypes["ParseMediaCallbacks"]) => Promise;