使用pytube下载音频时为何生成同名Media重复文件夹?
问题原因与解决方案
核心原因
- 路径指向错误且误解Apple Music文件夹结构
你指定的路径/Users/martinreid/Music/Music/Media/Automatically Add to Music存在两个关键问题:
Media是Apple Music的包(Bundle),并非普通文件夹。macOS下这类包会显示为文件夹形式,但直接写入包内路径时,系统无法正确识别内部结构,会自动在同级目录创建同名的普通Media文件夹,导致重复生成。- 真正用于自动导入音乐的文件夹是
Automatically Add to Music.localized,它直接位于/Users/martinreid/Music/Music/目录下,而非Media内部。写入这个文件夹的文件会被Apple Music自动扫描并导入,而写入Media包内既不会触发自动导入,还会引发文件夹重复问题。
filename_prefix参数可能引发拼接异常
虽然路径拼写无误,但pytube的filename_prefix拼接逻辑在部分场景下可能和路径结合产生意外行为,不如直接合并前缀与文件名更稳妥。
解决方案
1. 修正目标路径
将music_folder改为正确的自动导入文件夹路径:
music_folder = "/Users/martinreid/Music/Music/Automatically Add to Music.localized"
你可以手动验证路径:打开Finder,按住Option键点击菜单栏的「前往」→「音乐」,进入Music文件夹即可看到Automatically Add to Music.localized。
2. 合并文件名前缀与文件名
取消filename_prefix参数,直接在filename中拼接前缀,避免潜在的拼接问题:
dl_loc = audio.download( output_path=music_folder, filename=f"{track_num}{song}", skip_existing=True )
3. 验证文件夹权限
确保当前用户对目标文件夹有读写权限:
- 右键目标文件夹→「显示简介」
- 在「共享与权限」面板中,确认当前用户权限为「读写」
完整修正后的代码
import pytube link = "https://www.youtube.com/watch?v=ya8N9FhMq5s" song = "Angel (Massive Attack Cover).mp4" track_num = "01 " music_folder = "/Users/martinreid/Music/Music/Automatically Add to Music.localized" yt = pytube.YouTube(link) audio = yt.streams.get_audio_only() dl_loc = audio.download( output_path=music_folder, filename=f"{track_num}{song}", skip_existing=True ) print("Download complete. File at: ", dl_loc)
内容的提问来源于stack exchange,提问作者Martin
相关产品推荐
相关产品推荐

