记录docker搭建YouTube订阅同步podsync容器遇到的一些坑
🪧🪧✉️✉️You can touch me with Telegram:@Hsi Ho.
podsync容器
GitHub项目地址:https://github.com/mxpv/podsync
podsync 容器,简单来说就是一个集成了youtube-dl的podcast服务容器,可以把YouTube的频道或者列表视频,按照预定好的时间频率不断刷新然后下载下来,然后生成泛播客订阅。

如上图,即是podsync生成的苏通河牛通YouTube channel的rss订阅文件,其中红框框起来的item,就是一期视频。整个rss文件包括了频道信息,youtuber的简介信息,每一期视频标题跟简介。而且已经将每一期的视频下载到了服务器的本地上,因此只需要服务器可以连接到YouTube网站,其他设备连接到这台服务器则不需要要求网络“畅通”。
当然,这个容器还是可以完成一些其他的需求,比如没有开通YouTube premium,想要后台播放功能,这个也算是一种曲线救国。
我自己的初衷
我自己最开始是为了解决因为Apple TV缺少国区app store,没有优爱腾,尤其是B站,想着是不是可以找到一个工具直接将B站关注的up主的更新的视频下载到群晖NAS上,然后使用PLEX等媒体库软件直接播放。在搜索工具下就找到了podsync这个镜像。虽然没有解决B站的问题,但是倒算是解决了Apple TV网络翻墙不便,不好使用YouTube看视频的问题。
还有一个,也算是可以做到了无感的收集以及批量下载YouTube的视频,省去了自己使用youtube-dl工具一个一个下载YouTube视频。
podsync 容器安装
这个网上有个挺好的教程,可以参考知乎上这篇:利用EMBY,在NAS上打造个人Youtube流媒体中心 。不过需要注意一点,Emby的podcast插件使用需要会员订阅,并不免费;而Emby的平替Jellyfin,插件库里没有podcast插件(目前2021/05/30 为止是这样)。而Plex,移除了插件功能,自身提供的podcast服务不支持泛播客url的订阅。
倒是苹果自家的Podcast app,非常好的支持泛播客,与podsync搭配完美,国内开发者的moonFM播客app,虽然同样支持泛播客订阅,但美中不足,目前为止还无法做到视频播放,只能“听个响”。
一些可能会踩到的坑
虽然上面提到的 利用EMBY,在NAS上打造个人Youtube流媒体中心 已经挺完善了,但是还是留下了一个很严重的坑。
默认的配置,以及 利用EMBY,在NAS上打造个人Youtube流媒体中心 里都没有设置 bind_address 的值,所以在后面由podsync生成的xml文件中,指向视频的链接都会是默认的 http://localhost:port/xx/xxxxx.mp4 ,在其他设备上基本是不可能播放的。还有默认的配置不会生成opml文件,如果在配置文件里关注了很多channel,想要在其他设备的app中导入这些订阅就太麻烦了。
视频链接 localhost 问题
解决 http://localhost:port/xx/xxxxx.mp4 问题时,试过修改 bind_address = http://nasIP:port ,遇到了podsync容器停止运行的问题,大概是我太菜了,去开发者的 GitHub issues 搜索了一下,解决方案也很简单,注释掉 bind_address 这一行,另外添加 hostname = "http://nasIP:port" 。如下图:

解决 podcast 封面模糊
生成的xml 会有两处图片,一个是订阅封面,一个是每集视频的预览封面。每集的预览封面还好,如果是默认设置下,订阅封面还是很模糊的。podsync也给出了自定义设置,可以修改订阅封面图片为自定义图片,设置图片显示质量。例如:

[feeds.eSir]
# eSir 为最终生成的RSS文件夹的名称,可以修改,不可为中文
url = "https://www.youtube.com/channel/UCOhkliOps3IS48ly-MgPC2A" # 引号内填写Youtube频道/组织/用户/播放列表的链接,比如此处我填写的观视频地址
page_size = 15 # 每次更新多少个视频 (请记住这可能会耗尽API令牌,好像是每天一万个)
update_period = "15m" # 更新的频率,例如: "60m", "4h", "2h45m",会按照频率定期更新新的视频
quality = "high" # 或者 "low",此处为清晰度选择
format = "video" # 或者 "audio",如果选择audio将只下载音频
opml = true # 是否在生成的opml文件中包含该订阅,默认不设置时为false
clean = { keep_last = 150 } # 保留最近的多少个视频/音频文件
custom = { cover_art = "https://a.b.com/img/youtube/eSir.jpg", cover_art_quality = "high" } # 自定义设置项,cover_art 为自定义订阅封面图片,cover_art_quality 为封面图片显示质量,值为 "high" 或 "low" 。
没有生成opml订阅文件
默认的配置文件订阅设置并不会生成rss订阅的 opml 文件,想要把一堆订阅添加到 podcast app 异常麻烦,参考上面的代码,在订阅设置里添加 opml = true 即可在生成的 opml 文件里包含该feed订阅。

其他设置
参考开发者 GitHub 的文档:
custom.cover_art_quality use "high" or "low" to special cover image quality from channel cover default is equal with "quality" and disable when custom.cover_art was set.
custom = { title = "Level1News", description = "News sections of Level1Techs, in a podcast feed!", author = "Level1Tech", cover_art = "{IMAGE_URL}", cover_art_quality = "high", category = "TV", subcategories = ["Documentary", "Tech News"], explicit = true, lang = "en" } # Optional feed customizations
max_height = 720 # Optional maximal height of video, example: 720, 1080, 1440, 2160, ...
cron_schedule = "@every 12h" # Optional cron expression format. If set then overwrite 'update_period'. See details below
filters = { title = "regex for title here", not_title = "regex for negative title match", description = "...", not_description = "..." } # Optional Golang regexp format. If set, then only download matching episodes.
opml = true|false # Optional inclusion of the feed in the OPML file (default value: false)
clean = { keep_last = 10 } # Keep last 10 episodes (order desc by PubDate)
youtube_dl_args = [ "--write-sub", "--embed-subs", "--sub-lang", "en,en-US,en-GB" ] # Optional extra arguments passed to youtube-dl when downloading videos from this feed. This example would embed available English closed captions in the videos. Note that setting '--audio-format' for audio format feeds, or '--format' or '--output' for any format may cause unexpected behaviour. You should only use this if you know what you are doing, and have read up on youtube-dl's options!
还没有解决的一些问题
- 在 NAS docker中安装这个容器,配置倒是蛮好设置的,但是网络就烦了些,需要让整个 NAS 科学上网。貌似podsync没法在配置文件里单独设置代理。
- 其次,podsync容器里默认安装了youtube-dl,youtube-dl的下载参数配置不是该怎么去设置,可以使下载的文件名为YouTube的 视频标题-YouTuber-xxxxxxx.mp4 这种格式。并且生成的xml文件里的视频/音频链接也同样修改过来。
- 不知道YouTube是否有random的视频list或者suggest的list。
- 还是想要一个类似的工具可以下载国内视频平台的视频。
You can touch me with Telegram:@Hsi Ho.