64

一些 关于使用 从 YouTube下载音频的帖子,但没有一个是具体的或太有帮助的。我想知道从 Python 脚本中执行此操作的最佳方法是什么。youtube-dl

例如,这是下载视频的 README 示例:

import youtube_dl

ydl_opts = {}
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
    ydl.download(['http://www.youtube.com/watch?v=BaW_jenozKc'])

显然,如果你只关心音频,你宁愿不下载整个视频......

youtube-dl源非常有用(即,不是很有帮助)。

有什么建议如何编写脚本吗?

4

4 回答 4

94

请继续阅读开发人员说明以获取修改后的示例:

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'])

如果可能/支持,这将下载音频文件。如果文件不是 mp3,则使用ffmpegavconv将下载的文件转换为 mp3 。有关更多信息,请参阅当前版本的 youtube-dl 中的formatpostprocessors文档条目。

于 2014-12-15T10:22:56.550 回答
16

使用postprocessors论据。可以在此处找到所有可用后处理器的列表。

如果您想传递库中未包含的附加ffmpeg或选项(如音频比特率 - in ),请添加为列表。avconvyoutube-dl-ar <BR>ffmpegpostprocessor_args

ffmpeg您也可以更喜欢avconv设置prefer_ffmpegTrue

并将原始和转换后的音频文件设置'keepvideo'True.

例如:

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'])

所有可用选项的列表都在文档中。你可以在这里阅读 ffmpeg 后处理器的代码。

一个不太复杂的例子是在他们的 GitHub README中。

于 2019-01-04T22:46:41.073 回答
3

我本来不打算回答这个问题,其实我是来给自己找答案的。在我的搜索中,这些答案都没有令人满意的效果。然而,我确实找到了一个非常适合我的替代方案,我觉得我应该分享:模块 pytube。

from pytube import YouTube
import os

yt = YouTube('YOUR LINK HERE')

video = yt.streams.filter(only_audio=True).first()

out_file = video.download(output_path=".")

base, ext = os.path.splitext(out_file)
new_file = base + '.mp3'
os.rename(out_file, new_file)
于 2021-09-29T22:22:00.870 回答
2

As youtube_dl is discontinued, you can use tube_dl

Usage :

pip install tube_dl
from tube_dl import Youtube

In your case, here's how to get only audio.

from tube_dl import Youtube
youtube('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

于 2020-12-06T10:55:07.373 回答