ilhamdev commited on
Commit
ba94397
·
verified ·
1 Parent(s): afb8705

Update index.js

Browse files
Files changed (1) hide show
  1. index.js +40 -1
index.js CHANGED
@@ -195,6 +195,39 @@ async function fby2mate(url) {
195
  return e;
196
  }
197
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
198
  async function convertMp4ToAudio(inputBuffer) {
199
  return new Promise((resolve, reject) => {
200
  const inputStream = new Readable();
@@ -259,13 +292,19 @@ async function ytAPI(url) {
259
  const ID = ytdl.getVideoID(url)
260
  let videoStream = await ytdl(ID, { filter: 'audioandvideo', quality: 'highestvideo' });
261
  let audioStream = await ytdl(ID, {filter: "audioandvideo", quality:"lowest"})
 
 
 
 
 
 
262
  let buffermp4 = await streamToBuffer(videoStream)
263
  let buffermp3 = await streamToBuffer(audioStream)
264
  buffermp3 = await convertMp4ToAudio(buffermp3)
265
  buffermp4 = await fileDitch(buffermp4)
266
  buffermp3 = await fileDitch(buffermp3)
267
  return {
268
- mp4_url: buffermp4,
269
  mp3_url: buffermp3,
270
  }
271
  } catch (err) {
 
195
  return e;
196
  }
197
  }
198
+ async function mergeVideoAndAudio(videoBuffer, audioBuffer) {
199
+ return new Promise((resolve, reject) => {
200
+ const videoStream = new Readable();
201
+ videoStream.push(videoBuffer);
202
+ videoStream.push(null);
203
+
204
+ const audioStream = new Readable();
205
+ audioStream.push(audioBuffer);
206
+ audioStream.push(null);
207
+
208
+ const outputBuffer = [];
209
+ const outputStream = new Writable({
210
+ write(chunk, encoding, callback) {
211
+ outputBuffer.push(chunk);
212
+ callback();
213
+ }
214
+ });
215
+
216
+ ffmpeg()
217
+ .input(videoStream)
218
+ .input(audioStream)
219
+ .outputFormat('mp4')
220
+ .on('end', () => {
221
+ console.log('Merging finished!');
222
+ resolve(Buffer.concat(outputBuffer));
223
+ })
224
+ .on('error', (err) => {
225
+ console.error('Error during merging:', err);
226
+ reject(err);
227
+ })
228
+ .pipe(outputStream);
229
+ });
230
+ }
231
  async function convertMp4ToAudio(inputBuffer) {
232
  return new Promise((resolve, reject) => {
233
  const inputStream = new Readable();
 
292
  const ID = ytdl.getVideoID(url)
293
  let videoStream = await ytdl(ID, { filter: 'audioandvideo', quality: 'highestvideo' });
294
  let audioStream = await ytdl(ID, {filter: "audioandvideo", quality:"lowest"})
295
+ let video = await ytdl(ID, { filter: 'videoonly', quality: 'highestvideo' })
296
+ let audio = await ytdl(ID, { filter: 'audioonly', quality: 'lowestaudio' })
297
+ video = await streamToBuffer(video)
298
+ audio = await streamToBuffer(audio)
299
+ let buffmerge = await mergeVideoAndAudio(video, audio)
300
+ buffmerge = await fileDitch(buffmerge)
301
  let buffermp4 = await streamToBuffer(videoStream)
302
  let buffermp3 = await streamToBuffer(audioStream)
303
  buffermp3 = await convertMp4ToAudio(buffermp3)
304
  buffermp4 = await fileDitch(buffermp4)
305
  buffermp3 = await fileDitch(buffermp3)
306
  return {
307
+ mp4_url: buffmerge ? buffmerge : buffermp4,
308
  mp3_url: buffermp3,
309
  }
310
  } catch (err) {