ffmpeg-toolkit
Version:
A modern FFmpeg toolkit for Node.js
89 lines • 3.12 kB
JavaScript
export class ImageModule {
constructor(base) {
this.base = base;
}
getImageSettings(format) {
const settings = {
jpg: { format: 'image2', codec: 'mjpeg', options: ['-q:v', '2'] },
jpeg: { format: 'image2', codec: 'mjpeg', options: ['-q:v', '2'] },
png: {
format: 'image2',
codec: 'png',
options: ['-compression_level', '0'],
},
gif: { format: 'gif', codec: 'gif', options: [] },
bmp: { format: 'image2', codec: 'bmp', options: [] },
webp: { format: 'image2', codec: 'libwebp', options: ['-quality', '90'] },
tiff: {
format: 'image2',
codec: 'tiff',
options: ['-compression_algo', '1'],
},
ico: { format: 'image2', codec: 'bmp', options: [] },
};
return settings[format];
}
async convertImage(options) {
const { inputPath, pathOutput, outputFormat } = options;
const command = this.base.ffmpeg().input(inputPath);
const settings = this.getImageSettings(outputFormat);
command.toFormat(settings.format).videoCodec(settings.codec).outputOptions(settings.options);
return await this.base.process({
callback: () => command.output(pathOutput),
data: {
outputPath: pathOutput,
},
isDefaultOptions: false,
});
}
async resizeImage(options) {
const { inputPath, pathOutput, width, height } = options;
const command = this.base.ffmpeg().input(inputPath);
command.size(`${width}x${height}`);
return await this.base.process({
callback: () => command.output(pathOutput),
data: {
outputPath: pathOutput,
},
isDefaultOptions: false,
});
}
async extractThumbnail(options) {
const { inputPath, pathOutput, time } = options;
const command = this.base.ffmpeg().input(inputPath);
command.seekInput(time).outputOptions(['-vframes', '1', '-q:v', '2']);
return await this.base.process({
callback: () => command.output(pathOutput),
data: {
outputPath: pathOutput,
},
isDefaultOptions: false,
});
}
async imageToVideo(options) {
const { inputPath, pathOutput, duration } = options;
const command = this.base.ffmpeg().input(inputPath);
command
.loop(duration)
.outputOptions([
'-c:v',
'libx264',
'-t',
duration.toString(),
'-pix_fmt',
'yuv420p',
'-preset',
'medium',
'-movflags',
'+faststart',
]);
return await this.base.process({
callback: () => command.output(pathOutput),
data: {
outputPath: pathOutput,
},
isDefaultOptions: false,
});
}
}
//# sourceMappingURL=image.js.map