所以我想做的是将使用 pytube 下载 YouTube 视频获得的 mp4 文件转换为使用 moviepy 的 mp3 文件。但是,这些 mp4 文件不包含任何在 ffmpeg_reader 中引发
KeyError: 'video_fps'
的帧。
是否可以使用 moviepy 来做到这一点,还是我需要使用不同的工具?我想我也可以只下载带有视频的 mp4 文件,但这会浪费资源,尤其是对于大型播放列表。
这是我使用的代码:
from moviepy.video.io.VideoFileClip import VideoFileClip
import pytube
def downloadPlaylist(url):
playlist = pytube.Playlist(url)
for video in playlist.videos:
filename = video.streams.get_audio_only().download()
clip = VideoFileClip(filename)
clip.audio.write_audiofile(filename[:-4] + ".mp3")
clip.close()
所以只需将
VideoFileClip(filename)
更改为 AudioFileClip(filename)
就是解决方案:
clip = AudioFileClip(filename)
clip.write_audiofile(filename[:-4] + ".mp3")
clip.close()
避免使用
.get_audio_only()
尝试使用 .get_by_itag
或类似的东西下载整个视频。
获得整个视频后为我工作。
您可以使用 ffmpeg-python 包,它是调用 ffmpeg 的包装器。例如(使用
pip install ffmpeg-python
安装后),执行:
import ffmpeg
import pytube
def downloadPlaylist(url):
playlist = pytube.Playlist(url)
for video in playlist.videos:
filename = video.streams.get_audio_only().download()
_ = (
ffmpeg
.input(filename)
.output(filename[:-4] + ".mp3")
.run()
)