youtube-dl:下载播放列表时使用不同的输出格式

youtube-dl:下载播放列表时使用不同的输出格式

我使用 youtube-dl 主要是为了下载频道或播放列表。但是,如果是播放列表,我不希望使用与频道相同的输出模板。有办法实现这一点吗?

# If it is a channel, use this:
-o ./Downloads/Channels/%(uploader)s_%(channel_id)s/%(upload_date)s_%(title)s_%(display_id)s.%(ext)s
# If it is a playlist, use this:
-o ./Downloads/Playlists/%(playlist_title)s_%(playlist_id)s/[%(playlist_index)s] %(upload_date)s_%(title)s_%(display_id)s.%(ext)s

答案1

Youtube 的频道网址包含/channel/在其中,我只需测试这个字符串并使用一个小函数相应地设置选项:

yt() {
  for i in "$@"; do
    if [[ "$i" =~ .*/channel/.* ]]; then
      opt="channel"
    else
      opt="playlist"
    fi
  echo youtube-dl -o "$opt" "$i"
  done
}

这定义了一个函数yt,它循环遍历其参数,如果参数包含字符串“/channel/”,则将opt变量设置为该参数,如果不包含,则使用选项和参数运行。使用频道和播放列表列表运行它以查看其执行情况:"channel""playlist"echo youtube-dl

$ yt channel test something_with_/channel/_here
youtube-dl -o playlist channel
youtube-dl -o playlist test
youtube-dl -o channel something_with_/channel/_here

"channel"用频道的选项字符串(不带前导-o!)和播放列表的选项字符串替换"playlist",用真实的 URL 测试该函数现在是否打印正确的命令,最后删除该echo命令以使其真正运行youtube-dl

我将bash函数保存在单独的文件中~/.bash_functions并将其作为我的源~/.bashrc,其他人则更喜欢将函数直接放在后一个文件中,无论哪种方式,您都可以在每个新终端中定义它。

相关内容