download only audio from youtube video using youtube-dl in python script
Read on in the developer instructions for an amended example:
from __future__ import unicode_literalsimport youtube_dlydl_opts = { 'format': 'bestaudio/best', 'postprocessors': [{ 'key': 'FFmpegExtractAudio', 'preferredcodec': 'mp3', 'preferredquality': '192', }],}with youtube_dl.YoutubeDL(ydl_opts) as ydl: ydl.download(['http://www.youtube.com/watch?v=BaW_jenozKc'])
This will download an audio file if possible/supported. If the file is not mp3 already, the downloaded file be converted to mp3 using ffmpeg or avconv. For more information, refer to the format
and postprocessors
documentation entries in a current version of youtube-dl.
Use postprocessors
argument. The list of all the available postprocessors can be found here.
If you want to pass additional ffmpeg
or avconv
options, which are not included in youtube-dl
library (like audio bitrate - -ar <BR>
in ffmpeg
), add postprocessor_args
as a list.
You can also prefer ffmpeg
over avconv
setting prefer_ffmpeg
to True
.
And to keep both original and converted audio file set 'keepvideo'
to True
.
For example:
from __future__ import unicode_literalsimport youtube_dlydl_opts = { 'format': 'bestaudio/best', 'postprocessors': [{ 'key': 'FFmpegExtractAudio', 'preferredcodec': 'wav', 'preferredquality': '192' }], 'postprocessor_args': [ '-ar', '16000' ], 'prefer_ffmpeg': True, 'keepvideo': True}with youtube_dl.YoutubeDL(ydl_opts) as ydl: ydl.download(['http://www.youtube.com/watch?v=BaW_jenozKc'])
The list of all the available options is in the documentation. You can read ffmpeg posprocessor's code here.
And a less complex example is in their GitHub README.
As youtube_dl is discontinued, you can use tube_dl
Usage :
pip install tube_dlfrom tube_dl import Youtube
In your case, here's how to get only audio.
from tube_dl import Youtubeyoutube('Your URL').formats.filter(only_audio=True)[0]**.download(convert='mp3')
** Instead of 0, you can use your favourite quality.Just type:
print(youtube('Your URL').formats.filter(only_audio=True))
This will print all the audios supported. Then specify index of your choice and download
EDIT:
filter
is deprecated, use filter_by
instead