使用pytube下载的YouTube音频无法导入Reaper问题求助
问题原因与解决方法
核心原因
你用pytube下载的音频只是把文件名后缀改成了mp3,但实际编码格式是YouTube原生的Opus(封装在WebM容器里)。普通媒体播放器(VLC、Windows Media Player)会自动检测文件实际编码并兼容播放,但Reaper对音频格式的验证更严格,会拒绝这种“后缀与实际格式不匹配”的文件,这就是无法导入的根本原因。
你的代码里存在两个关键逻辑问题:
curr.streams.get_audio_only()获取的是YouTube提供的原始音频流(通常是webm/opus),并非MP3格式- 代码里的
curr.streams.filter(file_extension=ext)只是过滤了流,但并没有实际使用这个过滤后的结果,最后还是下载了原始的webm流,只是手动改了文件名后缀
解决步骤
1. 确保ffmpeg可用
先确认ffmpeg已经添加到系统环境变量PATH中,或者在代码里指定ffmpeg的完整路径。
2. 修改代码:下载原始流后转码为标准MP3
修改后的代码会先下载原始音频流,再调用ffmpeg将其转码为真正的MP3格式,这样Reaper就能正常识别导入:
from pytube import Playlist, YouTube from pathlib import Path import subprocess actual = Path.cwd() guerilla = Playlist("https://www.youtube.com/playlist?list=PL8ig_PduC0sKgSva6_tzdfZCkLp7jdAFF") ext = "mp3" filePath = actual / "music" # 先创建目录再使用 Path.mkdir(filePath, exist_ok=True) def checkAuthor(yt): if "-" not in yt.title: try: return yt.author.split(sep=" - ")[1] except IndexError: return yt.author else: return "" for index, music in enumerate(guerilla): curr = YouTube( music, use_oauth=True, allow_oauth_cache=True ) # 获取最高质量的音频流(原生是webm/opus) audio_stream = curr.streams.get_audio_only() # 临时文件名(保留原始后缀) temp_name = f"{index+1}_temp.{audio_stream.subtype}" temp_path = filePath / temp_name # 下载原始流到临时文件 audio_stream.download(filePath, temp_name, skip_existing=False) # 生成最终文件名 final_name = f"{index+1} {checkAuthor(curr)} - {curr.title}.{ext}" final_path = filePath / final_name # 调用ffmpeg转码为MP3 subprocess.run([ "ffmpeg", "-i", str(temp_path), # 输入文件 "-codec:a", "libmp3lame", # 使用MP3编码器 "-q:a", "2", # 质量参数(2是高质量,范围0-9) str(final_path) ], check=True) # 删除临时文件 temp_path.unlink()
3. 验证结果
转码后的MP3是标准格式,Reaper可以正常识别导入,同时也能保持在普通播放器的兼容性。
内容的提问来源于stack exchange,提问作者MonadoMaster0
相关产品推荐
相关产品推荐

