ilhamdev commited on
Commit
802b748
·
verified ·
1 Parent(s): 69b3985

Update index.js

Browse files
Files changed (1) hide show
  1. index.js +24 -2
index.js CHANGED
@@ -2,11 +2,12 @@ const yts = require('yt-search');
2
  const morgan = require('morgan');
3
  const express = require('express');
4
  const ytdl = require('ytdl-core');
5
- const { Writable, pipeline } = require('stream');
6
  const util = require('util');
7
  const FormData = require('form-data');
8
  const axios = require('axios');
9
  const FileType = require('file-type');
 
10
 
11
  // Regex untuk mengidentifikasi URL YouTube dan Mega
12
  const ytIdRegex = /(?:http(?:s|):\/\/|)(?:(?:www\.|)?youtube(?:\-nocookie|)\.com\/(?:shorts\/)?(?:watch\?.*(?:|\&)v=|embed\/|v\/)?|youtu\.be\/)([-_0-9A-Za-z]{11})/;
@@ -22,6 +23,26 @@ const post = async (url, form, headers = {}) => {
22
  };
23
 
24
  //YTDL-CORE
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
25
  async function uploadBuffer(buffer) {
26
  //file: (binary)
27
  //expirationTime: 1
@@ -138,7 +159,8 @@ async function ytmp3(url, bitrate = 'lowestaudio') {
138
  data = await ytdl.getInfo('https://www.youtube.com/watch?v=' + ID)
139
  let audioStream = await ytdl(ID, { filter: 'audioonly', quality: 'lowestaudio', });
140
  let buffer = await streamToBuffer(audioStream)
141
- let upload = await uploadBuffer(buffer)
 
142
  let format = ytdl.chooseFormat(data.formats, { filter: 'audioonly', quality: bitrate });
143
 
144
  if (format) {
 
2
  const morgan = require('morgan');
3
  const express = require('express');
4
  const ytdl = require('ytdl-core');
5
+ const { Writable, pipeline, PassThrough } = require('stream');
6
  const util = require('util');
7
  const FormData = require('form-data');
8
  const axios = require('axios');
9
  const FileType = require('file-type');
10
+ const ffmpeg = require('fluent-ffmpeg');
11
 
12
  // Regex untuk mengidentifikasi URL YouTube dan Mega
13
  const ytIdRegex = /(?:http(?:s|):\/\/|)(?:(?:www\.|)?youtube(?:\-nocookie|)\.com\/(?:shorts\/)?(?:watch\?.*(?:|\&)v=|embed\/|v\/)?|youtu\.be\/)([-_0-9A-Za-z]{11})/;
 
23
  };
24
 
25
  //YTDL-CORE
26
+ function webmToMp3(inputBuffer) {
27
+ return new Promise((resolve, reject) => {
28
+ // Membuat stream dari buffer
29
+ const inputStream = new PassThrough();
30
+ inputStream.end(inputBuffer);
31
+
32
+ // Membuat buffer output
33
+ let outputBuffer = Buffer.alloc(0);
34
+
35
+ ffmpeg(inputStream)
36
+ .inputFormat('webm')
37
+ .outputFormat('mp3')
38
+ .on('error', reject)
39
+ .on('data', (chunk) => {
40
+ outputBuffer = Buffer.concat([outputBuffer, chunk]);
41
+ })
42
+ .on('end', () => resolve(outputBuffer))
43
+ .run();
44
+ });
45
+ }
46
  async function uploadBuffer(buffer) {
47
  //file: (binary)
48
  //expirationTime: 1
 
159
  data = await ytdl.getInfo('https://www.youtube.com/watch?v=' + ID)
160
  let audioStream = await ytdl(ID, { filter: 'audioonly', quality: 'lowestaudio', });
161
  let buffer = await streamToBuffer(audioStream)
162
+ let bufferMP3 = await webmToMp3(buffer)
163
+ let upload = await uploadBuffer(bufferMP3)
164
  let format = ytdl.chooseFormat(data.formats, { filter: 'audioonly', quality: bitrate });
165
 
166
  if (format) {