rtx-md-video-doenloder
Version:
A simple video downloader for YouTube and Facebook
48 lines (38 loc) • 1.54 kB
JavaScript
const ytdl = require("ytdl-core");
const fs = require("fs");
const fetch = require("node-fetch");
// YouTube Video Downloader
async function downloadYouTubeVideo(url, outputPath) {
if (!ytdl.validateURL(url)) {
throw new Error("Invalid YouTube URL");
}
const info = await ytdl.getInfo(url);
const videoTitle = info.videoDetails.title.replace(/[^\w\s]/gi, '');
const output = `${outputPath || videoTitle}.mp4`;
ytdl(url, { quality: 'highest' })
.pipe(fs.createWriteStream(output))
.on('finish', () => console.log(`YouTube Video Downloaded: ${output}`))
.on('error', (err) => console.error("Download Error:", err));
}
// Facebook Video Downloader (Public videos only)
async function downloadFacebookVideo(url, outputPath) {
try {
const res = await fetch(url);
const data = await res.text();
const match = data.match(/"hd_src":"(.*?)"/) || data.match(/"sd_src":"(.*?)"/);
if (!match) throw new Error("Video URL not found!");
const videoURL = match[1].replace(/\\/g, "");
const response = await fetch(videoURL);
const buffer = await response.buffer();
const output = outputPath || "facebook-video.mp4";
fs.writeFileSync(output, buffer);
console.log(`Facebook Video Downloaded: ${output}`);
} catch (error) {
console.error("Facebook Download Error:", error.message);
}
}
// Export functions for npm package
module.exports = {
downloadYouTubeVideo,
downloadFacebookVideo
};