add latest days filter to yt-dlp

This commit is contained in:
Yan Lin 2025-11-20 19:28:46 +01:00
parent 6a641c81d5
commit 286639b24c
2 changed files with 12 additions and 1 deletions

View file

@ -34,6 +34,8 @@
"dlv youtube -n 3 -r 1 --min 1 --max 180 'https://www.youtube.com/@LetsGameItOut/videos'" "dlv youtube -n 3 -r 1 --min 1 --max 180 'https://www.youtube.com/@LetsGameItOut/videos'"
"dlv bilibili -n 3 -r 1 --title '' 'https://space.bilibili.com/15810/upload/video'" # Mr.Quin "dlv bilibili -n 3 -r 1 --title '' 'https://space.bilibili.com/15810/upload/video'" # Mr.Quin
"dlv bilibili -n 3 -r 1 -p 'https://space.bilibili.com/8012266/lists/3844977?type=season'" # PGN "dlv bilibili -n 3 -r 1 -p 'https://space.bilibili.com/8012266/lists/3844977?type=season'" # PGN
"dlv bilibili --days 7 -r 1 -p 'https://space.bilibili.com/781973/lists/1035653?type=season'" # 兰柚梓
"dlv bilibili --days 7 -r 1 -p 'https://space.bilibili.com/387087193/lists/518549?type=season'" # 平安Draymond
]; ];
}; };

View file

@ -175,6 +175,7 @@ in
local min_duration="" local min_duration=""
local max_duration="" local max_duration=""
local title_filter="" local title_filter=""
local days_filter=""
local url="" local url=""
# Parse arguments # Parse arguments
@ -204,6 +205,10 @@ in
title_filter="$2" title_filter="$2"
shift 2 shift 2
;; ;;
--days|--within-days)
days_filter="$2"
shift 2
;;
youtube|bilibili) youtube|bilibili)
platform="$1" platform="$1"
shift shift
@ -231,12 +236,14 @@ in
echo " --min <minutes> Minimum video duration in minutes" echo " --min <minutes> Minimum video duration in minutes"
echo " --max <minutes> Maximum video duration in minutes" echo " --max <minutes> Maximum video duration in minutes"
echo " --title <string> Filter videos by title (case-insensitive)" echo " --title <string> Filter videos by title (case-insensitive)"
echo " --days <number> Download videos uploaded within N days"
echo "" echo ""
echo "Examples:" echo "Examples:"
echo " dlv youtube <url> - Download single YouTube video" echo " dlv youtube <url> - Download single YouTube video"
echo " dlv youtube -p <url> - Download YouTube playlist" echo " dlv youtube -p <url> - Download YouTube playlist"
echo " dlv youtube --min 5 --max 30 <url> - Download videos between 5-30 minutes" echo " dlv youtube --min 5 --max 30 <url> - Download videos between 5-30 minutes"
echo " dlv youtube --title \"tutorial\" <url> - Download videos with 'tutorial' in title" echo " dlv youtube --title \"tutorial\" <url> - Download videos with 'tutorial' in title"
echo " dlv youtube --days 7 -p <url> - Download playlist videos from last 7 days"
echo " dlv bilibili -p -n 10 <url> - Download first 10 videos from playlist" echo " dlv bilibili -p -n 10 <url> - Download first 10 videos from playlist"
return 1 return 1
fi fi
@ -319,6 +326,7 @@ in
cmd="$cmd --yes-playlist" cmd="$cmd --yes-playlist"
fi fi
[[ -n "$max_downloads" ]] && cmd="$cmd --playlist-end '$max_downloads'" [[ -n "$max_downloads" ]] && cmd="$cmd --playlist-end '$max_downloads'"
[[ -n "$days_filter" ]] && cmd="$cmd --dateafter 'today-''${days_filter}days'"
[[ -n "$temp_cookies" ]] && cmd="$cmd --cookies '$temp_cookies'" || cmd="$cmd --no-cookies" [[ -n "$temp_cookies" ]] && cmd="$cmd --cookies '$temp_cookies'" || cmd="$cmd --no-cookies"
cmd="$cmd --download-archive '$archive_file' -o '$output_template' '$url'" cmd="$cmd --download-archive '$archive_file' -o '$output_template' '$url'"
@ -330,11 +338,12 @@ in
# Add filter info if any # Add filter info if any
local filter_info="" local filter_info=""
if [[ -n "$min_duration" ]] || [[ -n "$max_duration" ]] || [[ -n "$title_filter" ]]; then if [[ -n "$min_duration" ]] || [[ -n "$max_duration" ]] || [[ -n "$title_filter" ]] || [[ -n "$days_filter" ]]; then
filter_info=" (Filters:" filter_info=" (Filters:"
[[ -n "$min_duration" ]] && filter_info="$filter_info min ''${min_duration}m" [[ -n "$min_duration" ]] && filter_info="$filter_info min ''${min_duration}m"
[[ -n "$max_duration" ]] && filter_info="$filter_info max ''${max_duration}m" [[ -n "$max_duration" ]] && filter_info="$filter_info max ''${max_duration}m"
[[ -n "$title_filter" ]] && filter_info="$filter_info title: \"$title_filter\"" [[ -n "$title_filter" ]] && filter_info="$filter_info title: \"$title_filter\""
[[ -n "$days_filter" ]] && filter_info="$filter_info within ''${days_filter} days"
filter_info="$filter_info)" filter_info="$filter_info)"
fi fi
[[ -n "$max_downloads" ]] && filter_info="''${filter_info} [max ''${max_downloads} videos]" [[ -n "$max_downloads" ]] && filter_info="''${filter_info} [max ''${max_downloads} videos]"