There's a few posts on downloading audio from YouTube using youtube-dl
, but none of them are concrete or too helpful. I'm wondering what the best way to do it from a Python script is.
For example, here's the README example for downloading videos:
import youtube_dl
ydl_opts = {}
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
ydl.download(['http://www.youtube.com/watch?v=BaW_jenozKc'])
Obviously if you just care about the audio, you'd rather not download the whole video...
The youtube-dl source is only so helpful (ie, not very).
Any suggestions how to script this?
Read on in the developer instructions for an amended example:
from __future__ import unicode_literals
import youtube_dl
ydl_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_literals
import youtube_dl
ydl_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.
来源:https://stackoverflow.com/questions/27473526/download-only-audio-from-youtube-video-using-youtube-dl-in-python-script