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.