| import * as fs from 'fs' |
| import * as path from 'path' |
| import ffmpeg from 'fluent-ffmpeg' |
| import { exec } from 'child_process' |
| import { addExif } from './sticker.js' |
|
|
| function convert(file, ext1, ext2, options = []) { |
| return new Promise(async (resolve, reject) => { |
| let temp = path.join(__dirname(import.meta.url), '../tmp', Date.now() + '.' + ext1), |
| out = temp + '.' + ext2; |
| await fs.promises.writeFile(temp, file); |
| ffmpeg(temp) |
| .on('start', (cmd) => { |
| console.log(cmd); |
| }) |
| .on('error', (e) => { |
| fs.unlinkSync(temp); |
| reject(e); |
| }) |
| .on('end', () => { |
| console.log("Finish"); |
| setTimeout(() => { |
| fs.unlinkSync(temp); |
| fs.unlinkSync(out); |
| }, 2000) |
| resolve(fs.readFileSync(out)); |
| }) |
| .addOutputOptions(options) |
| .toFormat(ext2) |
| .save(out); |
| }); |
| } |
|
|
| function convert2(file, ext1, ext2, options = []) { |
| return new Promise(async (resolve, reject) => { |
| let temp = path.join(__dirname(import.meta.url), '../tmp', Date.now() + '.' + ext1), |
| out = temp + '.' + ext2; |
| await fs.promises.writeFile(temp, file); |
| ffmpeg(temp) |
| .on('start', (cmd) => { |
| console.log(cmd); |
| }) |
| .on('error', (e) => { |
| fs.unlinkSync(temp); |
| reject(e); |
| }) |
| .on('end', () => { |
| console.log("Finish"); |
| setTimeout(() => { |
| fs.unlinkSync(temp); |
| fs.unlinkSync(out); |
| }, 2000) |
| resolve(fs.readFileSync(out)); |
| }) |
| .addOutputOptions(options) |
| .seekInput("00:00") |
| .setDuration("00:05") |
| .toFormat(ext2) |
| .save(out); |
| }); |
| } |
|
|
| async function sticker(file, opts) { |
| if (typeof opts.cmdType === "undefined") opts.cmdType = "1" |
| const cmd = { |
| 1: ["-fs 1M", "-vcodec", "libwebp", "-vf", `scale=512:512:flags=lanczos:force_original_aspect_ratio=decrease,format=rgba,pad=512:512:(ow-iw)/2:(oh-ih)/2:color=#00000000,setsar=1`], |
| 2: ["-fs 1M", "-vcodec", "libwebp"] |
| } |
| |
| |
| |
| |
| |
| |
| |
| if (opts.isImage) { |
| return convert(file, "jpg", "webp", cmd[parseInt(opts.cmdType)]); |
| } |
| if (opts.isVideo) { |
| return convert2(file, "mp4", "webp", cmd[parseInt(opts.cmdType)]); |
| } |
| } |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| export { |
| sticker |
| } |