Python批量处理视频的核心是调用FFmpeg命令行工具,利用pathlib扫描文件、subprocess执行命令、字典管理参数,并通过并发执行与错误捕获提升效率与稳定性。

用Python批量处理视频,核心是调用FFmpeg命令行工具,再用os、subprocess、pathlib等标准库控制流程——不写GUI、不依赖复杂框架,轻量高效。
准备环境:装好FFmpeg并加入系统PATH
FFmpeg是实际干活的引擎,Python只负责“发号施令”。Windows用户下载官网静态版(ffmpeg.org),解压后把bin目录路径加进系统环境变量PATH;macOS用brew install ffmpeg;Linux用apt或yum安装。终端输入ffmpeg -version能返回版本号,就说明准备好了。
批量扫描视频文件:用pathlib比os.listdir更清晰
推荐用pathlib.Path遍历,支持通配符、自动忽略隐藏文件,代码可读性高:
- from pathlib import Path
- videos = list(Path("input_dir").glob("**/*.mp4")) + list(Path("input_dir").glob("**/*.mov"))
- 按修改时间排序:videos.sort(key=lambda x: x.stat().st_mtime)
构造转码命令:灵活控制分辨率、码率与封装格式
别硬编码一堆字符串拼接,用f-string+字典组装命令更安全:
立即学习“Python免费学习笔记(深入)”;
- 定义参数:opts = {"crf": 23, "preset": "fast", "scale": "1280:-2", "acodec": "aac"}
- 命令模板:cmd = f'ffmpeg -i "{src}" -vf "scale={opts["scale"]}" -c:v libx264 -crf {opts["crf"]} -preset {opts["preset"]} -c:a {opts["acodec"]} -y "{dst}"'
- 关键细节:-y跳过确认;scale=1280:-2保持宽高比;crf值越小画质越高(18~28常用)
并发执行与错误处理:用subprocess.run替代os.system
避免卡死、捕获失败原因:
- 用subprocess.run(cmd, shell=True, capture_output=True, text=True, timeout=600)
- 检查result.returncode == 0判断是否成功
- 失败时打印result.stderr,快速定位是路径错、编码器不支持还是权限问题
- 如需并发处理多个视频,可用concurrent.futures.ThreadPoolExecutor(I/O密集型够用)或ProcessPoolExecutor(CPU吃紧时)
基本上就这些。不复杂但容易忽略的是路径空格和中文字符——统一用双引号包裹文件路径,基本就稳了。










