From 5dfc82508b23d197b359044ae8b227b786a7c332 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Tue, 28 Oct 2025 16:18:14 +0200 Subject: [PATCH] feat(youtube): add session cookie --- docker-compose.yml | 2 ++ src/download.rs | 27 +++++++++++++++++---------- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 609f192..9a2b6f1 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -9,9 +9,11 @@ services: TELOXIDE_TOKEN: ${TELOXIDE_TOKEN} IG_SESSION_COOKIE_PATH: /app/www.instagram.com_cookies.txt TIKTOK_SESSION_COOKIE_PATH: /app/www.tiktok.com_cookies.txt + YOUTUBE_SESSION_COOKIE_PATH: /app/www.youtube.com_cookies.txt RUST_LOG: ${RUST_LOG:-info} restart: unless-stopped volumes: - ./comments.txt:/app/comments.txt:ro - ${IG_SESSION_COOKIE_PATH:-/etc/secrets/www.instagram.com_cookies.txt}:/app/www.instagram.com_cookies.txt:rw - ${TIKTOK_SESSION_COOKIE_PATH:-/etc/secrets/www.tiktok.com_cookies.txt}:/app/www.tiktok.com_cookies.txt:rw + - ${YOUTUBE_SESSION_COOKIE_PATH:-/etc/secrets/www.youtube.com_cookies.txt}:/app/www.youtube.com_cookies.txt:rw diff --git a/src/download.rs b/src/download.rs index e9f0ddc..80207e8 100644 --- a/src/download.rs +++ b/src/download.rs @@ -110,7 +110,7 @@ async fn run_command_in_tempdir(cmd: &str, args: &[&str]) -> Result) -> Result { - let base_args = ["--extractor-args", "instagram:"]; + let base_args = ["-t", "mp4", "--extractor-args", "instagram:"]; let mut args = base_args .iter() .map(ToString::to_string) @@ -134,7 +134,7 @@ pub async fn download_instagram(url: impl Into) -> Result) -> Result { - let base_args = ["--extractor-args", "tiktok:"]; + let base_args = ["-t", "mp4", "--extractor-args", "tiktok:"]; let mut args = base_args .iter() .map(ToString::to_string) @@ -158,7 +158,7 @@ pub async fn download_tiktok(url: impl Into) -> Result { /// - Propagates `run_command_in_tempdir` errors. #[cfg(feature = "twitter")] pub async fn download_twitter(url: impl Into) -> Result { - let args = ["--extractor-args", "twitter:", &url.into()]; + let args = ["-t", "mp4", "--extractor-args", "twitter:", &url.into()]; run_command_in_tempdir("yt-dlp", &args).await } @@ -169,22 +169,29 @@ pub async fn download_twitter(url: impl Into) -> Result /// - Propagates `run_command_in_tempdir` errors. #[cfg(feature = "youtube")] pub async fn download_youtube(url: impl Into) -> Result { - let args = [ + let base_args = [ "--no-playlist", "-t", "mp4", "--restrict-filenames", "-o", "%(title)s.%(ext)s", - "--no-warnings", - "--quiet", - "-f", "--postprocessor-args", - "ffmpeg:-vf setsar=1 -c:v libx264 -crf 28 -preset ultrafast -maxrate 800k -bufsize 1600k -vf scale=854:480 -c:a aac -b:a 64k -movflags +faststart", - &url.into(), + "ffmpeg:-vf setsar=1 -c:v libx264 -crf 20 -preset veryfast -c:a aac -b:a 128k -movflags +faststart", ]; + let mut args = base_args + .iter() + .map(ToString::to_string) + .collect::>(); - run_command_in_tempdir("yt-dlp", &args).await + if let Ok(cookies_path) = env::var("YOUTUBE_SESSION_COOKIE_PATH") { + args.extend(["--cookies".into(), cookies_path]); + } + args.push(url.into()); + + let args_ref = args.iter().map(String::as_ref).collect::>(); + + run_command_in_tempdir("yt-dlp", &args_ref).await } /// Post-process a `DownloadResult`.