Can I directly download audio from a YouTube video instead of first downloading audio+video and then extracting the audio?
3 Answers
Here is a recent article in webupd8.org that explains how to use youtube-dl
to directly download audio instead of first downloading video+audio and then extracting audio using -x
. Unfortunately, the search facility that Maythux asked for here isn't offered. But it is still worth a look:
Video Downloader youtube-dl
Gets Support For Separate Audio And Video YouTube DASH Streams
Basically, download the latest version of youtube-dl from source or from the ppa offered in the link above but not from the Software Center.
Then, if you already have the video link ...
Run, as example:
youtube-dl -F 'http://www.youtube.com/watch?v=HRIF4_WzU1w'
This will list the various download formats available for this url (audio and video).
$ youtube-dl -F 'http://www.youtube.com/watch?v=HRIF4_WzU1w'
[youtube] Setting language
[youtube] HRIF4_WzU1w: Downloading webpage
[youtube] HRIF4_WzU1w: Downloading video info webpage
[youtube] HRIF4_WzU1w: Extracting video information
[info] Available formats for HRIF4_WzU1w:
format code extension resolution note
171 webm audio only DASH webm audio , audio@ 48k (worst)
140 m4a audio only DASH audio , audio@128k
160 mp4 192p DASH video
133 mp4 240p DASH video
134 mp4 360p DASH video
135 mp4 480p DASH video
17 3gp 176x144
36 3gp 320x240
5 flv 400x240
43 webm 640x360
18 mp4 640x360 (best)
Now, choose desired audio format. I went for 140
Run:
youtube-dl -f 140 'http://www.youtube.com/watch?v=HRIF4_WzU1w'
$ youtube-dl -f 140 'http://www.youtube.com/watch?v=HRIF4_WzU1w'
[youtube] Setting language
[youtube] HRIF4_WzU1w: Downloading webpage
[youtube] HRIF4_WzU1w: Downloading video info webpage
[youtube] HRIF4_WzU1w: Extracting video information
[download] Destination: Martin Luther King - I Have a Dream on August 28, 1963 [Sous-titres & Subtitles] [FULL SPEECH]-HRIF4_WzU1w.m4a
[download] 100% of 15.19MiB in 00:04
That's it.
-
6Some audio players do not support DASH audio. For m4a, I had to demux it to make it a 'regular' m4a using ffmpeg. For example:
ffmpeg -i input.m4a -vn -c:a copy output.m4a
– SunNov 7, 2014 at 8:14 -
13@sunk818 and just a public announcement that:
youtube-dl 2015.01.23.4 and newer will automatically correct the header of the m4a file if ffmpeg is present on the system.
So, ifffmpeg
is installed beforeyoutube-dl
is called now it will automatically fix the DASH container and you won't need to run sunk818's fix.– tsujpApr 21, 2015 at 16:15 -
39
youtube-dl -f bestaudio http://...
if you don't want to select best audio manually. Nov 19, 2015 at 13:27 -
16be careful with
-f bestaudio
as best audio could be .webm and not .m4a Use -f m4a if you want best m4a quality audio.– SunApr 13, 2016 at 23:31 -
27
From @xiota's comment, to download the best audio in m4a format:
$ youtube-dl -f 'bestaudio[ext=m4a]' 'http://youtu.be/hTvJoYnpeRQ'
I've missed it on the first reading, so I've decided to post the comment as an answer to make it more visible.
-
1This gives 2 errors, one for format not available and the other for failing to parse the url, Oct 24, 2018 at 19:08
-
1
-
1No it doesn't. WARNING: The url doesn't specify the protocol, trying with http ... Warning: Could not send HEAD request to http://'youtu.be/hTvJoYnpeRQ'. If I fix the url by removing the ' characters, then it gives ERROR: requested format not available. Nov 21, 2018 at 21:42
-
1@AtteJuvonen try to copy the command as is If it is still failing for you, provide your OS, youtube-dl version.– jfsNov 22, 2018 at 4:33
-
14@AtteJuvonen the site is "Ask Ubuntu". I tested the command on Ubuntu. Ubuntu is different from Windows. The command in the answer expects a bash-like shell. On Windows, for
cmd.exe
you could try to replace single quotes with doubles quotes (there could be other Windows related issues).– jfsNov 23, 2018 at 16:34
This alias let me easily download any audio with better filenames:
$ alias | grep audio
alias yt-dl-audio='yt-dlp --ignore-errors --output "%(title)s.%(ext)s" --extract-audio --audio-format mp3'
I switched from youtube-dl to yt-dlp. Works faster and includes things like --split-chapters
. Most things are equivalent.
About audio quality: From the documentation: "By default yt-dlp/youtube-dl tries to download the best available quality, i.e., if you want the best quality you don't need to pass any special options, yt-dlp will guess it for you by default.". So there's no need for --audio-quality 0
or -f bestaudio
.
About Updates: Download last version of yt-dlp. Avoid repo, PPA version or pip/pipx so you can upgrade with yt-dlp -U
(necessary quite often).
To install it right away for all UNIX users (Linux, OS X, etc.), type:
sudo curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp sudo chmod a+rx /usr/local/bin/yt-dlp # Make executable
Albums (or compilations, mashups, etc.): You can split the file into chunks/tracks with mp3split
. To generate the playlist timestamps (like the ones found on YouTube comments) and track count:
ffmpeg -i input.mp3 -af silencedetect=n=-40dB:d=2.7 -f null - |& awk '/silence_end/ {print $4,$5}' | awk '{S=$2;printf "%d:%02d:%02d\n",S/(60*60),S%(60*60)/60,S%60}' | tee >(wc -l) # Play with tolerance (n/noise threshold level) and duration on silencedetect. More: `ffmpeg -h filter=silencedetect`.
Please leave a comment if you found a better approach, maybe something using MusicBrainz.
Common problems
- Error 403? Add
--rm-cache-dir
. - Stuck at "Downloading webpage"? Add
--force-ipv4
.
Alternatives and other notes
ytmdl: A simple script to get songs from YouTube in mp3 format with all tags from iTunes.
To download in batch from a plain text, here.
MP3 Tagging: I’m still trying to find a reliable CLI tool to fix and tag all the generated mp3:
- Beets (maybe with tracker cheatsheet and gnome-music?)
- lltag
- foobar2000
mps-youtube
. Correct? This question is about usingyoutube-dl
and not about usingmps-youtube
. I always try my answers myself before posting. If I don't, I will make it clear that it is only a suggestion :)youtube-dl
to do this, but I can't answer this question because people have marked this as a duplicate.