![youtube-dl:下载播放列表时使用不同的输出格式](https://linux22.com/image/913697/youtube-dl%EF%BC%9A%E4%B8%8B%E8%BD%BD%E6%92%AD%E6%94%BE%E5%88%97%E8%A1%A8%E6%97%B6%E4%BD%BF%E7%94%A8%E4%B8%8D%E5%90%8C%E7%9A%84%E8%BE%93%E5%87%BA%E6%A0%BC%E5%BC%8F.png)
我使用 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
,其他人则更喜欢将函数直接放在后一个文件中,无论哪种方式,您都可以在每个新终端中定义它。