使用ffmpeg-python转换MKV为MP4时报FileNotFoundError错误
报错原因
这个报错是两个问题叠加导致的:
- 你通过包管理工具安装的
ffmpeg-python只是Python调用FFmpeg的封装库,本身不包含FFmpeg核心的可执行程序ffmpeg.exe,系统找不到可执行文件就会抛出WinError 2。 - 脚本的文件遍历逻辑有bug:
os.walk会递归遍历目标目录下所有子文件夹,但你拼接文件路径时固定用了根目录start_dir,只要MKV文件存放在子目录中,拼接出的路径就是无效的,同样会触发找不到文件的错误。
修复方案
1. 配置FFmpeg可执行程序
你需要先安装官方的FFmpeg二进制程序,二选一配置即可:
- 方案一:下载Windows版FFmpeg压缩包,解压后找到bin目录下的
ffmpeg.exe,直接放到你的Python脚本所在的文件夹,不需要额外配置。 - 方案二:把
ffmpeg.exe所在的bin目录路径添加到系统环境变量PATH中,重启IDE/终端后生效。
验证方法:新开终端执行
ffmpeg -version,能正常输出版本信息就说明配置成功。
如果不想全局配置,也可以后续在代码里直接指定ffmpeg.exe的绝对路径。
2. 修复脚本路径bug
把遍历逻辑里的路径拼接参数从start_dir改成os.walk返回的当前路径path,确保子目录下的文件能被正确找到。
修复后的完整代码如下:
import os import ffmpeg start_dir = r'C:\Users\Videos_2' def convert_to_mp4(mkv_file): name, ext = os.path.splitext(mkv_file) out_name = name + ".mp4" # 若未配置环境变量,可取消下面注释,把路径替换为你本地ffmpeg.exe的绝对路径 # ffmpeg.input(mkv_file).output(out_name, format='mp4', acodec='aac', ar=16000, audio_bitrate=96000).run(cmd=r'C:\your\path\to\ffmpeg.exe') ffmpeg.input(mkv_file).output(out_name, format='mp4', acodec='aac', ar=16000, audio_bitrate=96000).run() print("Finished converting {}".format(mkv_file)) for path, folder, files in os.walk(start_dir): for file in files: if file.endswith('.mkv'): print("Found file: %s" % file) # 替换start_dir为当前遍历到的path,修复子目录文件路径错误 convert_to_mp4(os.path.join(path, file))
优化建议
如果不需要重新编码视频流,可以在output参数中添加vcodec='copy',直接拷贝视频流,转换速度会快几十倍,注意该方式要求原MKV内的视频编码兼容MP4容器格式。
内容的提问来源于stack exchange,提问作者Justin
相关产品推荐
相关产品推荐

