yt-dlp ve ffmpeg kullanarak typescript ile video indirme methodu

programming, typescript, yt-dlp, code

npm i fluent-ffmpeg yt-dlp-wrap
import ffmpeg from "fluent-ffmpeg"
import fs from "node:fs"
import YTDlpWrap from "yt-dlp-wrap"

const ffmpegPath = require("@ffmpeg-installer/ffmpeg").path
ffmpeg.setFfmpegPath(ffmpegPath) // to extract audio

export async function downloadVideoViaYtDlp(params: {
	url: string
	dirpath: string
	ytDlpPath: string
	download?: boolean
	login?: { username: string; password: string }
	cookieFilePath?: string
}): Promise<string> {
	const { url, dirpath, ytDlpPath, download = false } = params
	fs.mkdirSync(dirpath, { recursive: true })

	if (!fs.existsSync(ytDlpPath)) {
		if (!download) throw Error("yt-dlp not found and download is disabled")
		await YTDlpWrap.downloadFromGithub(ytDlpPath)
	}

	const cookieArg = []
	if (params.cookieFilePath) cookieArg.push("--cookies", params.cookieFilePath)
	else if (params.login)
		cookieArg.push("-u", params.login.username, "-p", params.login.password)

	const ytDlp = new YTDlpWrap(ytDlpPath)
	const info = await ytDlp.getVideoInfo([url, ...cookieArg])
	const filename = `${dirpath}/${info.filename}`
	if (fs.existsSync(filename)) {
		console.log(`Video already downloaded: "${filename}"`)
		return filename
	}

	await ytDlp.execPromise([
		url,
		"-f",
		"bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best",
		"--output",
		filename,
		...cookieArg,
	])
	return filename
}

Last updated

© 2024 ~ Yunus Emre Ak ~ yEmreAk