@omnimedia/omnitool
Version:
open source video processing tools
47 lines • 1.51 kB
JavaScript
import { ALL_FORMATS, Input } from "mediabunny";
import { loadDecoderSource } from "../../driver/utils/load-decoder-source.js";
export class Media {
datafile;
duration = 0;
isImage = false;
hasVideo = false;
hasAudio = false;
constructor(datafile) {
this.datafile = datafile;
}
static async analyze(datafile) {
const media = new this(datafile);
if (this.#isImage(datafile)) {
media.isImage = true;
return media;
}
const duration = (await this.duration(datafile.url)) * 1000;
media.duration = duration;
const { video, audio } = await this.#has(datafile.url);
media.hasAudio = audio;
media.hasVideo = video;
return media;
}
static #isImage(datafile) {
return datafile.blob.type.startsWith("image/");
}
static async duration(source) {
const input = new Input({
formats: ALL_FORMATS,
source: await loadDecoderSource(source)
});
const duration = await input.computeDuration();
return Number(duration.toFixed(5)); // fix weird floating points
}
static async #has(source) {
const input = new Input({
formats: ALL_FORMATS,
source: await loadDecoderSource(source)
});
return {
audio: !!(await input.getPrimaryAudioTrack()),
video: !!(await input.getPrimaryVideoTrack())
};
}
}
//# sourceMappingURL=media.js.map