48 comments

[ 2.5 ms ] story [ 117 ms ] thread
yt-audio has added features like custom CLI arguments (users can setup their own CLI arguments to manage playlists/audios), save each audio/playlist to a separate directory, added option to keep track of downloaded titles without archive file, and more ...
youtube-dl is the only thing that makes the modern web actually usable.

I ended up writing a bot that runs on a docker scheduled task and looks at trello. I can drop a youtube link on the board and it will grab the audio.

Great for when I hear a song somewhere that I want to add to my phone later.

How are you managing this integration? IFTTT?
It's just python running in a docker container in a scheduled task on ECS once an hour. I built it to test the pattern for work.

I use a trello integration library, shell out for youtube-dl, run a normalizer on anything it pulls, boto3 the files to s3 and then call SNS to text me it's done. I pick the files up later.

When youtube-dl updates (which it does, regularly) I just redeploy as it's tagged for latest in the requirements file. I could add this update step to the container or pull a copy from s3 that I maintain, but I'm not a big fan of pulling in code at runtime.

Trello is acting as an SQS queue, RabbitMQ queue, or redis set. If something fails the code will dump the error text into the card and retry indefinitely till I fix it.

This entire setup costs me < $1 a month. I think my route53 domains cost more.

YouTube-dl demolishes 100 pain points of using the modern web

This wrapper gets rid of the only pain point in using YouTube-dl which was having to google every time you wanted just the audio.

Great work

Off the top of my head, isnt that just the -x flag?
It's a bit more than that. Eg: One can configure their own CLI arguments to keep track of particular playlist(s).

$ yt-audio --your-arg1 --your-arg2

This will sync playlist/audios configured against these arguments.

Sorry, no doubt your app does more than -x. I just meant for extracting audio alone.
I have a file under ~/bin called youtube-mp3 which has this one-liner:

    exec $HOME/d/youtube-dl/youtube-dl -t -x --audio-format=mp3 "$@"
(Edit: I'm sure this script does a lot more, but making ytdl download only the audio is fairly simple. Note the above command converts the file to mp3 which some people may not want to do because it's lossy.)
What is -t?
It (used to) cause youtube-dl to name downloaded videos after the title. Apparently it was needed in older versions of youtube-dl but is now ignored.
I’m not near a computer but I was persuaded I have used youtube-dl -f mp3 https://... before.
Well, if you use just -x alone, it will not attempt to get the format you ask for. So you will probably end up with a m4a (mp4 container with just AAC audio) or ogg (vorbis/i think opus?) depending on whether the best quality is encoded in h264, WebM/VP8 or WebM/VP9. Which may not be what you want.

OTOH, if you specify a format directly without -x, it may not extract the audio alone. For example if you wanted M4A, you'd specify -x on top of specifying the format explicitly.

edit: as krick points out though, it doesn’t seem videos generally have an mp3 format, at least on YouTube.

I don't think -f mp3 would ever work, -f is for choosing file format to download. So -f mp3 would work only if there is a source with codename mp3, which I don't think I've ever seen. You may be using -f bestaudio -x or something along the lines of it.
I also use --audio-quality 0 because it can be between 0 (best) and 9 (worst) and the default is 5.
Do you literally google it? Why not make an `alias` once, or `man youtube-dl`, or `youtube-dl --help | grep audio`?
its not a single command it's an actual ting you have to do manually.

you need to check what sources are available then manually input the number for just the audio stream of that specific video

Will this get into brew?
Haven't used brew before. I'll look into it when I'll get some free time.
Typo in the readme: yt-audo

I'd make a PR but I'm not near a computer right now. This is great. I have a couple audio files I need to pull for my kid and this is gonna save me a couple steps. Thank you!

Cannot understand what exactly is that. I have used a simple alias called (unsurprisingly) yt-audio for years, which is youtube-dl with appropriate flags (-x, --audio-quality, --download-archive, -o, etc.), and this seems to be exactly that, only written in python for some reason.
It adds a few more functionalities like setting up custom arguments, option to keep track of downloaded titles without archive file, and a few more. It just tries to make audio/playlist management easy. As mentioned, it is a youtube-dl wrapper. So under the hood it uses classic youtube-dl arguments.
Is there any reason these features couldn't be pushed upstream into youtube-dl proper?
Can you share this? I've been meaning to do something very similar for the longest while and haven't got around to it.
Just read the man page and make an alias? That's just lazy on your part
For the record, if you only use youtube-dl for the purposes of downloading audio (like me), then you can keep a config file in $HOME/.config/youtube-dl/config with default arguments so you don't have to look them up each time. For example, here's a sample from my config:

    # extract audio only
    -x
    # stick to mp3
    --audio-format mp3
    # get rid of the annoying URL stuff at the end
    -o "%(title)s.%(ext)s"
A minor extension of the idea here and of the GP - I have aliased 'yt' and 'ytm' to target two different config files in the same folder path you gave.
Anyone else write a a lot of ripper scripts like youtube-dl but never share them for fear of starting an arms race with the content provider? It's easy to rip most .ts/XHR video streams with a bash loop.
(comment deleted)
Yes :( I even removed mine from github after reading about people losing their gmail over unrelated google account problems.
Precisely why I never shared any of the backend code for ss-plex.
Im going to claim to be the first person to democratise the downloading of videos for later watching from websites. I created this for google video, because at the time they had lots of car videos i was interested in, but it had plugins for youtube and other content providers i used.

http://gvdownloader.sourceforge.net/

And yes, it was about a month after publishing that the arms race started with google. It was exciting at first, but then they started getting dirty, excluding me from search results and using whatever muscle they could to stop people finding the app.

(here is a link the hockeystick download graph, it got picked up by various other distribution networks in between) https://sourceforge.net/projects/gvdownloader/files/stats/ti...

I wrote it because bandwith was really expensive and slow back then. It was an experiment to solidify some programming concepts i was learning at the time, and also my first foray into browser plugin development.

OT but does ytdl violate YouTube's tos? I'd guess so as it skips the ads. Can it be used commercially, say?
How does simply opening a website bind you to any contract?
It isn't backed by the force of the US judicial system, but when YouTube says a person's Google account will be banned for commercial usage, I trust them.
YouTube (and youtube-dl) does not require you to be logged in.

And anyway I don't see how downloading a video is "commercial usage".

(comment deleted)
Nice, I have script that does speech to text using google cloud and I wanted an easy way to get text out of youtube videos so this will help.
Can you please share the code? Thx!
> MP3 works fine. M4a does not work.

Doesn't make much sense then. YouTube doesn't have MP3 so MP3 means unnecessary transcoding i.e. quality and time loss.

Why would anybody convert to MP3 today having AAC and OPUS originals? OPUS provides unprecedented quality at all bitrates (better than AAC and MP3), AAC also provides great quality&compression (better than MP3) and plays everywhere.

Well, the audio quality is already reduced on upload - and much more than mp3 transcoding would.
Among other options, YouTube offers 160 kbps OPUS (which, AFAIK, can be expected to be perceptually lossless and better than 320 kbps MP3). Would they waste bandwidth on streaming it this high if the actual quality they store is worse than that?

As far as I know every transcoding reduces it further. Even transcoding from 128 kbps AAC to 320 kbps MP3 will make the quality slightly worse.

When using file's metadata method for tracking downloaded records, m4a file extension is not supported. Metadata method relies on 'purl' metadata tag. And m4a format has no purl tag, so it does not work.

One can use archive file method instead.

This limitation has nothing to do with yt-audio's capability of downloading m4a format. M4a limitation only applies to metadata method of tracking downloaded tracks.

Why rely on tags if there is the ID appended to the file name and the file name is the title of the video? Youtube-dl names the files it downloads this way by default, just leave it as it is and you can identify the files easily.