Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
MR414N-ID
GitHub Repository: MR414N-ID/botku2
Path: blob/master/lib/converter.js
1126 views
1
const fs = require('fs')
2
const path = require('path')
3
const { spawn } = require('child_process')
4
5
function ffmpeg(buffer, args = [], ext = '', ext2 = '') {
6
return new Promise(async (resolve, reject) => {
7
try {
8
let tmp = path.join(__dirname, '../src', + new Date + '.' + ext)
9
let out = tmp + '.' + ext2
10
await fs.promises.writeFile(tmp, buffer)
11
spawn('ffmpeg', [
12
'-y',
13
'-i', tmp,
14
...args,
15
out
16
])
17
.on('error', reject)
18
.on('close', async (code) => {
19
try {
20
await fs.promises.unlink(tmp)
21
if (code !== 0) return reject(code)
22
resolve(await fs.promises.readFile(out))
23
await fs.promises.unlink(out)
24
} catch (e) {
25
reject(e)
26
}
27
})
28
} catch (e) {
29
reject(e)
30
}
31
})
32
}
33
34
/**
35
* Convert Audio to Playable WhatsApp Audio
36
* @param {Buffer} buffer Audio Buffer
37
* @param {String} ext File Extension
38
*/
39
function toAudio(buffer, ext) {
40
return ffmpeg(buffer, [
41
'-vn',
42
'-ac', '2',
43
'-b:a', '128k',
44
'-ar', '44100',
45
'-f', 'mp3'
46
], ext, 'mp3')
47
}
48
49
/**
50
* Convert Audio to Playable WhatsApp PTT
51
* @param {Buffer} buffer Audio Buffer
52
* @param {String} ext File Extension
53
*/
54
function toPTT(buffer, ext) {
55
return ffmpeg(buffer, [
56
'-vn',
57
'-c:a', 'libopus',
58
'-b:a', '128k',
59
'-vbr', 'on',
60
'-compression_level', '10'
61
], ext, 'opus')
62
}
63
64
/**
65
* Convert Audio to Playable WhatsApp Video
66
* @param {Buffer} buffer Video Buffer
67
* @param {String} ext File Extension
68
*/
69
function toVideo(buffer, ext) {
70
return ffmpeg(buffer, [
71
'-c:v', 'libx264',
72
'-c:a', 'aac',
73
'-ab', '128k',
74
'-ar', '44100',
75
'-crf', '32',
76
'-preset', 'slow'
77
], ext, 'mp4')
78
}
79
80
module.exports = {
81
toAudio,
82
toPTT,
83
toVideo,
84
ffmpeg,
85
}
86
87