Update index.js
Browse files
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) {
|