A simple tool to generate Podcast-like RSS feeds from youtube (or other
youtube-dl supported services) channels, using
youtube-dl
.
Install package with requirements:
pip install ydl-podcast[youtube-dl]
pip install ydl-podcast[yt-dlp]
Edit the config.yaml file to list your podcast sources and configure them, as well as edit general configuration.
The available settings are the following.
output_dir
: local directory where the downloaded media will be stored, and the podcast xml files generated.url_root
: root url for the static files (used in the generation of the XML to point to the media files.subscriptions
: a list of feeds to subscribe to.youtube-dl-module
: Alternative youtube-dl python module. By default, this uses youtube-dl, but can leverage forks such as yt-dlp.
name NAME
: Name of the podcast source. Used as the podcast title, and media directory name.url URL
: source url for the youtube (or other) channel.
audio_only True/False
: ifTrue
, audio will be extracted from downloaded videos to create an audio podcast.retention_days N
: only download elements newer thanN
days, and automatically delete elements older.download_last N
: only download the latestN
videos.initialize True/False
: ifTrue
, then downloads everything on the first run, no matter thedownload_last
orretention_days
specified.output_dir
: local directory where the downloaded media will be stored, and the podcast xml files generated.url_root
: root url for the static files (used in the generation of the XML to point to the media files.format
: file format to force youtube-dl to use (eg mp4, webm, mp3 for audio only…)best
: force best quality (only useful when specifying a format).ydl_options
: list of raw youtube-dl options to use. For experienced users, since this will likely yield issues if not understood.nfo_files
: generates nfo files for subscriptions and downloaded episodes (simulates a "tvshow" nfo for the subscription and "tvshow episode" for each video). This helps plex, kodi, jellyfin import correct metadata. Does NOT supportaudio_only
feeds at this point.skip_download
: Don't perform download, just generate the Atom feed from the existing files. Mandatoryurl
parameter can be skipped ifskip_download
is set totrue
download_as_playlist
: Pass the url to the downloader directly, without processing the metadata of each item in the playlist. This is helpful with generic urls, and a few specific extractors.
Using cron or your favorite scheduler, run:
ydl-podcast [-c configfile.yaml]
You can then use your favorite web server to serve the files (a good idea is to
exclude the *.json
and *.part
files from being served as the first might
leak information, and the second is unnecessary.
eg with nginx:
root /var/www/static/podcasts/;
location ~ (\.json$|\.part$) {
return 403;
}
usage: ydl-podcast [-h] [-v] [-c CONFIG] [-j JSON_CONFIG] [-f FILTER] [-e EXCLUDE]
options:
-h, --help show this help message and exit
-v, --version Show version and exit
-c CONFIG, --config CONFIG
Configuration file
-j JSON_CONFIG, --json-config JSON_CONFIG
Configuration string in JSON format
-f FILTER, --filter FILTER
Filter subscriptions
-e EXCLUDE, --exclude EXCLUDE
Exclude subscriptions