ydl-podcast
A simple tool to generate Podcast-like RSS feeds from youtube (or other
youtube-dl supported services) channels, using
youtube-dl.
Setup
Install package with requirements:
Youtube-dl:
pip install ydl-podcast[youtube-dl]
yt-dlp:
pip install ydl-podcast[yt-dlp]
Configuration
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.
General settings
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.
Feed settings
Mandatory
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.
Optional
audio_only True/False: ifTrue, audio will be extracted from downloaded videos to create an audio podcast.retention_days N: only download elements newer thanNdays, and automatically delete elements older.download_last N: only download the latestNvideos.initialize True/False: ifTrue, then downloads everything on the first run, no matter thedownload_lastorretention_daysspecified.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_onlyfeeds at this point.skip_download: Don't perform download, just generate the Atom feed from the existing files. Mandatoryurlparameter can be skipped ifskip_downloadis set totruedownload_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.
Usage
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;
}
Command line arguments
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
Metadata
Release files for ydl-podcast 1.21.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ydl_podcast-1.21.0.tar.gz | 10.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ydl_podcast-1.21.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 23.1 kB
Release files / ydl_podcast-1.21.0.tar.gz
| Download URL | ydl_podcast-1.21.0.tar.gz |
|---|---|
| Size | 10.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
778056bc920046afda8d69fdda92a096e1ff2681d8316c25b86b2248a5b20eaf
|
|
BLAKE2b-256 checksum How to use checksums |
fdbb63e2e0d4cafb0dcb1b99b66d12b2222a70bd90f69b7de4dac2f6fd66caee
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.7 {"installer":{"name":"uv","version":"0.12.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Alpine Linux","version":"3.23.5","id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / ydl_podcast-1.21.0-py3-none-any.whl
| Download URL | ydl_podcast-1.21.0-py3-none-any.whl |
|---|---|
| Size | 12.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
32c6d5d18ab309fe9b29c5f1f7d6ca6a39cbaf5c3a62d565ccd4ebebc3ee97f1
|
|
BLAKE2b-256 checksum How to use checksums |
13b21e15858aa4ef04ee10323bdb4205c7739d419087ac4f9b2f05e2968a6933
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.7 {"installer":{"name":"uv","version":"0.12.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Alpine Linux","version":"3.23.5","id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|