使用pytube下载mp3格式的视频

Muh*_*han 12 audio file-format youtube-api python-3.x pytube

我一直在使用 pytube 在 python 中下载 youtube 视频。到目前为止,我已经能够以 mp4 格式下载。

yt = pytube.YouTube("https://www.youtube.com/watch?v=WH7xsW5Os10")

vids= yt.streams.all()
for i in range(len(vids)):
    print(i,'. ',vids[i])

vnum = int(input("Enter vid num: "))
vids[vnum].download(r"C:\YTDownloads")
print('done')
Run Code Online (Sandbox Code Playgroud)

我设法下载了“音频”版本,但它是.mp4格式的。我确实尝试将扩展名重命名为.mp3,并播放了音频,但应用程序(Windows Media Player)停止响应并开始滞后。

如何直接以音频文件.mp3格式下载视频?请提供一些代码,因为我是使用此模块的新手。

scr*_*rpy 8

如何将视频直接下载为 .mp3 格式的音频文件?

恐怕你不能。可直接下载的唯一文件是在 下列出的文件yt.streams.all()

但是,将下载的音频文件从 转换.mp4.mp3格式很简单。例如,如果您安装了ffmpeg,则从终端运行此命令即可解决问题(假设您位于下载目录中):

$ ffmpeg -i downloaded_filename.mp4 new_filename.mp3
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用 Python 的subprocess模块以编程方式执行 ffmpeg 命令:

import os
import subprocess

import pytube

yt = pytube.YouTube("https://www.youtube.com/watch?v=WH7xsW5Os10")

vids= yt.streams.all()
for i in range(len(vids)):
    print(i,'. ',vids[i])

vnum = int(input("Enter vid num: "))

parent_dir = r"C:\YTDownloads"
vids[vnum].download(parent_dir)

new_filename = input("Enter filename (including extension): "))  # e.g. new_filename.mp3

default_filename = vids[vnum].default_filename  # get default name using pytube API
subprocess.run([
    'ffmpeg',
    '-i', os.path.join(parent_dir, default_filename),
    os.path.join(parent_dir, new_filename)
])

print('done')
Run Code Online (Sandbox Code Playgroud)

编辑:删除了subprocess.call. 使用subprocess.run(除非您使用的是 Python 3.4 或更低版本)

  • 是否可以将音频从 pytube 传输到 ffmpeg,以便下载和转换可以并行进行? (2认同)

The*_*KID 8

我假设您使用的是 Python 3 和pytube 9.x,您可以使用过滤方法来“过滤”您感兴趣的文件扩展名。

例如,如果您想下载 mp4 视频文件格式,它将如下所示:

pytube.YouTube("url here").streams.filter(file_extension="mp4").first()
Run Code Online (Sandbox Code Playgroud)

如果你想提取音频,它将如下所示:

pytube.YouTube("url here").streams.filter(only_audio=True).all()
Run Code Online (Sandbox Code Playgroud)

希望对登陆此页面的任何人有所帮助;而不是进行不必要的转换。