不能像这里所说的那样用参数来实现这一点:用args设置下载存档路径
我想做两个类似的剧本。在上传器的文件夹中为每个视频下载视频和存档文件的人。以及另一个下载元数据的脚本。
我想在下载之前检查一下档案。
我希望能够多次并行地使用该函数,并将它们放在后台。
我想得到上传器的唯一方法是下载带有输出%(uploader)s
的元数据。
然后创建一个具有上传程序名称的文件夹,删除该文件,然后从创建的文件夹中再次下载具有正确名称的文件。
我已经定义了几个函数,这可能会对此有所帮助。
这是我试过的,但不起作用
# Video Playlist saving archive file to uploader's folder
ytp() {
# Dl opts=(
${opts[@]}
--skownload metadata
--skip-download
--write-info-json
)
# Get ten random characters
local rand=$( cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 10 | head -n 1 )
LOG_NAME=$( get_log_name "$(${paste[@]})" )
$yt_dl ${opts[@]} --output "%(uploader|Anon-%(id)s)s.%(ext)s" "$(${paste[@]})" >> "/tmp/$LOG_NAME" 2>&1
for f in *.info.json; do
local name="${f%.*}"
if [[ $name == Anon* ]]; then
name="Anon"
fi
mkdir -p "$name"
rm "$f"
cd "$name" || exit
# Download media
ytv
cd .. || exit
done
}
发布于 2022-11-21 10:58:15
如果使用sh/bash/zsh类型的shell,您可以这样做
touch temp_archive.txt; yt-dlp --write-info-json --download-archive temp_archive.txt -o "%(uploader)s/%(title)s-[%(id)s].%(ext)s" --exec after_video:'cat temp_archive.txt >> "%(uploader)s/archive.txt"; printf "" > temp_archive.txt' "URL"
在一项职能中:
opts=(
--continue
--no-overwrites
--no-post-overwrites
--verbose
--restrict-filenames
--retry-sleep fragment:exp=2:64
)
get_log_name() {
TIMESTAMP=$( date +%y%m%d%H%M%S )
NAME=${1//[^[:alnum:].-]/_}
echo "yt-dlp_${TIMESTAMP}_${NAME}.log"
}
deal_with_long_filename_playlist() {
LOG_NAME=$( get_log_name "$(${paste[@]})" )
if ! $yt_dl ${opts[@]} --output "%(uploader|Anon)s/%(upload_date>%Y-%m-%d|)s%(upload_date& |)s%(title)s-%(id)s.%(ext)s" "$(${paste[@]})" >> "/tmp/$LOG_NAME" 2>&1; then
$yt_dl ${opts[@]} --output "%(uploader|Anon)s/%(upload_date>%Y-%m-%d|)s%(upload_date& |)s%(webpage_url_domain)s-%(id)s.%(ext)s" "$(${paste[@]})" >> "/tmp/$LOG_NAME" 2>&1
fi
rm temp_archive.txt
}
# Video Playlist saving archive file to uploader's folder
ytvp() {
local opts=(
${opts[@]}
--format '(bv+(wa[abr>=64]/ba))/b'
--format-sort res:720,tbr~2000
--download-archive temp_archive.txt
--exec after_video:'cat temp_archive.txt >> "%(uploader)s/archive.txt"; printf "" > temp_archive.txt'
)
deal_with_long_filename_playlist &
}
# Video playlist with metadata
ytvpm() {
local opts=(
${opts[@]}
--format '(bv+(wa[abr>=64]/ba))/b'
--format-sort res:720,tbr~2000
--download-archive temp_archive.txt
--exec after_video:'cat temp_archive.txt >> "%(uploader)s/archive.txt"; printf "" > temp_archive.txt'
--write-info-json
--write-comments
--write-thumbnail
)
deal_with_long_filename_playlist &
}
https://unix.stackexchange.com/questions/723764
复制相似问题