UNPKG

ffmpeg-toolkit

Version:

A modern FFmpeg toolkit for Node.js

89 lines 3.12 kB
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