Add title filter
This commit is contained in:
parent
ffdfa74abe
commit
770118152a
1 changed files with 32 additions and 10 deletions
|
|
@ -135,6 +135,7 @@ in
|
||||||
local custom_retries=""
|
local custom_retries=""
|
||||||
local min_duration=""
|
local min_duration=""
|
||||||
local max_duration=""
|
local max_duration=""
|
||||||
|
local title_filter=""
|
||||||
local url=""
|
local url=""
|
||||||
|
|
||||||
# Parse arguments
|
# Parse arguments
|
||||||
|
|
@ -160,6 +161,10 @@ in
|
||||||
max_duration="$2"
|
max_duration="$2"
|
||||||
shift 2
|
shift 2
|
||||||
;;
|
;;
|
||||||
|
--title)
|
||||||
|
title_filter="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
youtube|bilibili)
|
youtube|bilibili)
|
||||||
platform="$1"
|
platform="$1"
|
||||||
shift
|
shift
|
||||||
|
|
@ -186,11 +191,13 @@ in
|
||||||
echo " -r, --retries <number> Number of retry attempts (0 for no retries, default: 10)"
|
echo " -r, --retries <number> Number of retry attempts (0 for no retries, default: 10)"
|
||||||
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 ""
|
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 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
|
||||||
|
|
@ -213,8 +220,11 @@ in
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# Build duration filter
|
# Build match filter (duration and/or title)
|
||||||
local duration_filter=""
|
local match_filter=""
|
||||||
|
local filter_parts=()
|
||||||
|
|
||||||
|
# Duration filter
|
||||||
if [[ -n "$min_duration" ]] || [[ -n "$max_duration" ]]; then
|
if [[ -n "$min_duration" ]] || [[ -n "$max_duration" ]]; then
|
||||||
local min_sec=""
|
local min_sec=""
|
||||||
local max_sec=""
|
local max_sec=""
|
||||||
|
|
@ -222,14 +232,26 @@ in
|
||||||
[[ -n "$max_duration" ]] && max_sec=$((max_duration * 60))
|
[[ -n "$max_duration" ]] && max_sec=$((max_duration * 60))
|
||||||
|
|
||||||
if [[ -n "$min_sec" ]] && [[ -n "$max_sec" ]]; then
|
if [[ -n "$min_sec" ]] && [[ -n "$max_sec" ]]; then
|
||||||
duration_filter="--match-filter \"duration >= $min_sec & duration <= $max_sec\""
|
filter_parts+=("duration >= $min_sec & duration <= $max_sec")
|
||||||
elif [[ -n "$min_sec" ]]; then
|
elif [[ -n "$min_sec" ]]; then
|
||||||
duration_filter="--match-filter \"duration >= $min_sec\""
|
filter_parts+=("duration >= $min_sec")
|
||||||
elif [[ -n "$max_sec" ]]; then
|
elif [[ -n "$max_sec" ]]; then
|
||||||
duration_filter="--match-filter \"duration <= $max_sec\""
|
filter_parts+=("duration <= $max_sec")
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Title filter
|
||||||
|
if [[ -n "$title_filter" ]]; then
|
||||||
|
filter_parts+=("title ~= '(?i).*$title_filter.*'")
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Combine filters
|
||||||
|
if [[ ''${#filter_parts[@]} -gt 0 ]]; then
|
||||||
|
local combined_filter
|
||||||
|
combined_filter=$(IFS=" & "; echo "''${filter_parts[*]}")
|
||||||
|
match_filter="--match-filter \"$combined_filter\""
|
||||||
|
fi
|
||||||
|
|
||||||
# Build output template based on playlist mode
|
# Build output template based on playlist mode
|
||||||
local output_template
|
local output_template
|
||||||
if [[ "$playlist_mode" == true ]]; then
|
if [[ "$playlist_mode" == true ]]; then
|
||||||
|
|
@ -253,7 +275,7 @@ in
|
||||||
echo "Output directory: $DOWNLOAD_DIR/$platform_name"
|
echo "Output directory: $DOWNLOAD_DIR/$platform_name"
|
||||||
|
|
||||||
# Build command
|
# Build command
|
||||||
local cmd="yt-dlp $platform_flags $duration_filter"
|
local cmd="yt-dlp $platform_flags $match_filter"
|
||||||
if [[ "$playlist_mode" == true ]]; then
|
if [[ "$playlist_mode" == true ]]; then
|
||||||
cmd="$cmd --yes-playlist"
|
cmd="$cmd --yes-playlist"
|
||||||
fi
|
fi
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue