UNPKG

rtx-md-video-doenloder

Version:

A simple video downloader for YouTube and Facebook

48 lines (38 loc) 1.54 kB
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 };