Python处理YouTube播放列表:MP4转MP3时FFmpeg报错问题
问题分析
报错显示ffmpeg执行音频转换命令时退出码1,核心原因有三点:
- 调用ffmpeg时使用相对路径,但音频文件实际下载到了指定的
downloadDirectory目录,ffmpeg找不到目标文件 - 视频标题包含
//这类特殊字符,导致ffmpeg解析文件名时出错 - 未指定音频编码格式,触发ffmpeg默认编码的兼容性问题
解决方案
针对上述问题,修改MP3函数如下:
def MP3(): import os # 清理文件名中的非法字符,避免ffmpeg解析出错 def clean_filename(filename): invalid_chars = '<>:"/\\|?*' for char in invalid_chars: filename = filename.replace(char, '_') return filename for video in playlist.videos: audio = video.streams.get_audio_only() # 获取音频文件下载后的完整路径(pytube会自动替换部分非法字符) downloaded_file = audio.download(downloadDirectory) # 清理标题中的剩余非法字符 cleaned_title = clean_filename(video.title) # 构建输出文件的完整路径 output_path = os.path.join(downloadDirectory, f"{cleaned_title}.mp3") print(f"转换文件: {downloaded_file} -> {output_path}") # 调用ffmpeg时使用完整路径,并指定MP3标准编码 ff = ffmpy.FFmpeg( executable='C:/ffmpeg/bin/ffmpeg.exe', inputs={downloaded_file: None}, outputs={output_path: '-c:a libmp3lame'} ) ff.run()
修改说明
- 路径匹配:直接使用
audio.download()返回的完整路径作为ffmpeg输入,确保ffmpeg准确定位到下载的音频文件 - 文件名清理:替换标题中的
<>:\"/\\|?*等非法字符,避免特殊字符干扰ffmpeg的文件名解析 - 编码指定:添加
-c:a libmp3lame参数,强制使用MP3标准编码,解决默认编码的兼容性问题
内容的提问来源于stack exchange,提问作者Jack142
相关产品推荐
相关产品推荐

