首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >下载youtube-dl播放列表。将包括存档文件在内的所有数据保存到每个视频的上传器文件夹中

下载youtube-dl播放列表。将包括存档文件在内的所有数据保存到每个视频的上传器文件夹中
EN

Unix & Linux用户
提问于 2022-11-05 12:25:02
回答 1查看 786关注 0票数 1

不能像这里所说的那样用参数来实现这一点:用args设置下载存档路径

我想做两个类似的剧本。在上传器的文件夹中为每个视频下载视频和存档文件的人。以及另一个下载元数据的脚本。

我想在下载之前检查一下档案。

我希望能够多次并行地使用该函数,并将它们放在后台。

我想得到上传器的唯一方法是下载带有输出%(uploader)s的元数据。

然后创建一个具有上传程序名称的文件夹,删除该文件,然后从创建的文件夹中再次下载具有正确名称的文件。

我已经定义了几个函数,这可能会对此有所帮助。

这是我试过的,但不起作用

代码语言:javascript
运行
复制
# 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
}
EN

回答 1

Unix & Linux用户

发布于 2022-11-21 10:58:15

如果使用sh/bash/zsh类型的shell,您可以这样做

代码语言:javascript
运行
复制
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"

在一项职能中:

代码语言:javascript
运行
复制
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 &
}
票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/723764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档