| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- import {promises} from 'fs';
- import {join} from 'path';
- import {spawn} from 'child_process';
- function ffmpeg(buffer, args = [], ext = '', ext2 = '') {
- return new Promise(async (resolve, reject) => {
- try {
- const tmp = join(global.__dirname(import.meta.url), '../tmp', + new Date + '.' + ext);
- const out = tmp + '.' + ext2;
- await promises.writeFile(tmp, buffer);
- spawn('ffmpeg', [
- '-y',
- '-i', tmp,
- ...args,
- out,
- ])
- .on('error', reject)
- .on('close', async (code) => {
- try {
- await promises.unlink(tmp);
- if (code !== 0) return reject(code);
- resolve({
- data: await promises.readFile(out),
- filename: out,
- delete() {
- return promises.unlink(out);
- },
- });
- } catch (e) {
- reject(e);
- }
- });
- } catch (e) {
- reject(e);
- }
- });
- }
- /**
- * Convert Audio to Playable WhatsApp Audio
- * @param {Buffer} buffer Audio Buffer
- * @param {String} ext File Extension
- * @return {Promise<{data: Buffer, filename: String, delete: Function}>}
- */
- function toPTT(buffer, ext) {
- return ffmpeg(buffer, [
- '-vn',
- '-c:a', 'libopus',
- '-b:a', '128k',
- '-vbr', 'on',
- ], ext, 'ogg');
- }
- /**
- * Convert Audio to Playable WhatsApp PTT
- * @param {Buffer} buffer Audio Buffer
- * @param {String} ext File Extension
- * @return {Promise<{data: Buffer, filename: String, delete: Function}>}
- */
- function toAudio(buffer, ext) {
- return ffmpeg(buffer, [
- '-vn',
- '-c:a', 'libopus',
- '-b:a', '128k',
- '-vbr', 'on',
- '-compression_level', '10',
- ], ext, 'opus');
- }
- /**
- * Convert Audio to Playable WhatsApp Video
- * @param {Buffer} buffer Video Buffer
- * @param {String} ext File Extension
- * @return {Promise<{data: Buffer, filename: String, delete: Function}>}
- */
- function toVideo(buffer, ext) {
- return ffmpeg(buffer, [
- '-c:v', 'libx264',
- '-c:a', 'aac',
- '-ab', '128k',
- '-ar', '44100',
- '-crf', '32',
- '-preset', 'slow',
- ], ext, 'mp4');
- }
- export {
- toAudio,
- toPTT,
- toVideo,
- ffmpeg,
- };
|