Update index.js
Browse files
index.js
CHANGED
|
@@ -2,7 +2,7 @@ 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, Readable } = require('stream');
|
| 6 |
const util = require('util');
|
| 7 |
const axios = require('axios');
|
| 8 |
const FormData = require('form-data')
|
|
@@ -194,6 +194,34 @@ async function fby2mate(url) {
|
|
| 194 |
return e;
|
| 195 |
}
|
| 196 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 197 |
async function streamToBuffer(stream) {
|
| 198 |
const chunks = [];
|
| 199 |
const captureChunks = new Writable({
|
|
@@ -232,8 +260,9 @@ async function ytAPI(url) {
|
|
| 232 |
let audioStream = await ytdl(ID, {filter: "audioonly", quality:"lowestaudio"})
|
| 233 |
let buffermp4 = await streamToBuffer(videoStream)
|
| 234 |
let buffermp3 = await streamToBuffer(audioStream)
|
|
|
|
| 235 |
buffermp4 = await fileDitch(buffermp4)
|
| 236 |
-
buffermp3 = await fileDitch(
|
| 237 |
return {
|
| 238 |
mp4_url: buffermp4,
|
| 239 |
mp3_url: buffermp3,
|
|
|
|
| 2 |
const morgan = require('morgan');
|
| 3 |
const express = require('express');
|
| 4 |
const ytdl = require('ytdl-core');
|
| 5 |
+
const { Writable, pipeline, Readable, PassThrough } = require('stream');
|
| 6 |
const util = require('util');
|
| 7 |
const axios = require('axios');
|
| 8 |
const FormData = require('form-data')
|
|
|
|
| 194 |
return e;
|
| 195 |
}
|
| 196 |
}
|
| 197 |
+
function bufferToStream(buffer) {
|
| 198 |
+
const stream = new Readable();
|
| 199 |
+
stream.push(buffer);
|
| 200 |
+
stream.push(null); // Menandakan akhir dari stream
|
| 201 |
+
return stream;
|
| 202 |
+
}
|
| 203 |
+
function convertWebmToMp3(webmBuffer) {
|
| 204 |
+
return new Promise((resolve, reject) => {
|
| 205 |
+
const inputStream = bufferToStream(webmBuffer);
|
| 206 |
+
const outputStream = new PassThrough();
|
| 207 |
+
const chunks = [];
|
| 208 |
+
|
| 209 |
+
ffmpeg(inputStream)
|
| 210 |
+
.inputFormat('webm')
|
| 211 |
+
.audioCodec('libmp3lame')
|
| 212 |
+
.format('mp3')
|
| 213 |
+
.on('data', (chunk) => {
|
| 214 |
+
chunks.push(chunk);
|
| 215 |
+
})
|
| 216 |
+
.on('end', () => {
|
| 217 |
+
resolve(Buffer.concat(chunks));
|
| 218 |
+
})
|
| 219 |
+
.on('error', (err) => {
|
| 220 |
+
reject(err);
|
| 221 |
+
})
|
| 222 |
+
.pipe(outputStream, { end: true });
|
| 223 |
+
});
|
| 224 |
+
}
|
| 225 |
async function streamToBuffer(stream) {
|
| 226 |
const chunks = [];
|
| 227 |
const captureChunks = new Writable({
|
|
|
|
| 260 |
let audioStream = await ytdl(ID, {filter: "audioonly", quality:"lowestaudio"})
|
| 261 |
let buffermp4 = await streamToBuffer(videoStream)
|
| 262 |
let buffermp3 = await streamToBuffer(audioStream)
|
| 263 |
+
let konvert = await convertWebmToMp3(buffermp3)
|
| 264 |
buffermp4 = await fileDitch(buffermp4)
|
| 265 |
+
buffermp3 = await fileDitch(konvert)
|
| 266 |
return {
|
| 267 |
mp4_url: buffermp4,
|
| 268 |
mp3_url: buffermp3,
|