I saw Mike over at Initial Charge link to Listenbox Turns YouTube Channels Into Podcasts. This is a neat idea and something I’ve been doing sparingly with longer-form Youtube content that is mainly audio.
However, I don’t need to pay a subscription for another thing in my life I’ll use on occasion. So I tweaked my Youtube-dl setup to pull audio from Youtube videos instead of the video itself.
First, I have to thank Jason for his youtube-dl setup which I replicated in a container on my server at home. He’s updated his configuration to support M1 Macs and some fancy iPhone shortcuts.
I have mine running on Ubuntu sitting in a container in proxmox in my office.
I’ve created a small shell script called music.sh
. The contents are below, which I’ll explain.
# YTDL-Music Playlist - Audio Only - Goes to Music folder
/usr/local/bin/youtube-dl \
--extract-audio --audio-format mp3 --embed-thumbnail --ignore-errors \
-o "/mnt/Youtube/Music/%(title)s.%(ext)s" \
--download-archive /var/www/video/music.txt \
https://www.youtube.com/playlist?list=PL9C818BCBDA822A24
The first line is a comment reminding me of what this is and does.
/usr/local/bin/youtube-dl
– The location where I have youtube-dl installed.
--extract-audio
– Downloads only the audio and discards the video.
--audio-format mp3
– Sets the format to MP3 for compatability.
--embed-thumbnail
– Embeds the thumbnail from the Youtube video. Sometimes useful, sometime not. But it’s nice to have some kind of artwork on the file.
--ignore-errors
` – Skips errors like if a video is removed or not able to be downloaded for some reason.
-o "/mnt/Youtube/Music/%(title)s.%(ext)s"
– The -o
stands for output and tells youtube-dl where to save the file. In my case, I have it saved to my NAS mounted through NFS at /mnt/Youtube/Music.
The title and extension are pulled right from an example output. I don’t know what the lowercase s
means. I just used it because the examples showed it.
--download-archive /var/www/video/music.txt
– I write a log of everything I download so if I delete it after watching it, it doesn’t get pulled back down every single time. The file logs the youtube ID as opposed to the title or something human-readable but it’s better than nothing.
Finally, the URL links to the Youtube playlist where I want to download from. This makes triggering the downloads as simple as adding a file to that playlist and letting youtube-dl do the rest.
How does youtube-dl know to check the list for new videos? I have a cron job set to run the script every 10 minutes. So anything newly added to the playlist will get downloaded.
*/10 * * * * sh /var/www/video/music.sh
Once I download the audio, it gets picked up by Plex. Plex is set to watch that folder and add new content it finds to the library as audio. So I can download music, podcasts uploaded to Youtube, or technical shows where the content is largely audio.
It works well other than the hiccups any self-hosted setup can run into and it costs my nothing additional since I’m already paid for the computer and pay for the electricity/internet anyway at home.