frameflow
Version:
Audio/Video stream processing library for JavaScript world
126 lines (125 loc) • 4.27 kB
TypeScript
import { Filter, FilterArgs } from "./filters";
import { LoadArgs } from './loader';
import { FFWorker } from "./message";
import { Chunk, Exporter } from "./streamIO";
import { Flags } from './types/flags';
import { AudioStreamMetadata, BufferData, SourceNode, SourceType, StreamMetadata, StreamRef, TargetNode, VideoStreamMetadata } from "./types/graph";
interface SourceArgs {
frameRate?: number;
}
export declare class TrackGroup {
streams: StreamRef[];
constructor(streams: StreamRef[]);
/**
* TrackGroup -> TrackGroup
* @argument mediaType filter condition
*/
filter(mediaType: 'video' | 'audio'): TrackGroup;
/**
* TrackGroup -> Track[]
* @argument mediaType filter condition
*/
tracks(): Track[];
trim(args: FilterArgs<'trim'>): FilterTrackGroup;
loop(args: number): FilterTrackGroup;
setVolume(args: FilterArgs<'volume'>): FilterTrackGroup;
setDataFormat(args: FilterArgs<'format'>): FilterTrackGroup;
export(args?: ExportArgs): Promise<Target>;
/**
* @param filename target filename (currently only in Node.js)
*/
exportTo(dest: string, args?: ExportArgs): Promise<void>;
exportTo(dest: typeof ArrayBuffer, args?: ExportArgs): Promise<BufferData>;
exportTo(dest: typeof Blob, args?: ExportArgs): Promise<Blob>;
exportTo(dest: HTMLVideoElement, args?: ExportArgs): Promise<void>;
}
export declare class Track extends TrackGroup {
constructor(stream: StreamRef);
get metadata(): StreamMetadata;
}
declare class SourceTrackGroup extends TrackGroup {
node: SourceNode;
constructor(streams: StreamMetadata[], data: SourceNode['data']);
get metadata(): {
tracks: StreamMetadata[];
formatName: string;
duration: number;
bitRate: number;
};
get duration(): number;
}
declare class FilterTrackGroup extends TrackGroup {
/**
*
* @param inStreams single filter input
* @param inStreamsArr multiple filter inputs
*/
constructor(filter: Filter, inStreams: StreamRef[] | null, inStreamsArr?: StreamRef[][]);
get metadata(): void;
}
export declare class Target {
#private;
constructor(node: TargetNode, exporter: Exporter, args: ExportArgs);
get end(): boolean;
get format(): string;
/**
* @returns Each next iteration, return one chunk (Chunk ).
* Only when done==true then return undefined
*/
next(): Promise<Chunk | undefined>;
[Symbol.asyncIterator](): {
next(): Promise<{
value: Chunk | undefined;
done: boolean;
}>;
return(): Promise<{
value: Chunk | undefined;
done: boolean;
}>;
};
close(): Promise<void>;
}
interface ExportArgs {
url?: string;
format?: string;
audio?: Partial<AudioStreamMetadata>;
video?: Partial<VideoStreamMetadata>;
progress?: (pg: number) => void;
worker?: Promise<FFWorker>;
}
declare const _default: {
setFlags: (flags: Flags) => void;
/**
* Create source (`SourceTrackGroup`) in one function.
* @param src ReadableStream<Uint8Array | Buffer> | string | URL | Request | Blob | Buffer | Uint8Array
* @param options unused temporarily
* @returns SourceTrackGroup can be used further.
*/
source: (src: SourceType, options?: SourceArgs) => Promise<SourceTrackGroup>;
/**
* Convert array of Track or TrackGroup into one TrackGroup.
* This is convenient when we need to apply operations on multiple tracks.
* Track[] -> TrackGroup
*/
group: (trackArr: (TrackGroup | Track)[]) => TrackGroup;
/**
* Multiple audio tracks merge into one audio track.
*/
merge: (trackArr: (TrackGroup | Track)[]) => FilterTrackGroup;
/**
* Concat multiple tracks along timeline.
* @param trackArr
* @returns
*/
concat: (trackArr: (TrackGroup | Track)[]) => FilterTrackGroup;
/**
* Preload of wasm binary file and loaded worker.
*
* This function can be called multiple times, but only fetch once.
* So don't worry about repetitive calls.
*
* @returns FFWorker if param 'newWorker' is true
*/
load: (args?: LoadArgs) => Promise<FFWorker>;
};
export default _default;