我使用 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
,其他人则更喜欢将函数直接放在后一个文件中,无论哪种方式,您都可以在每个新终端中定义它。