批量视频转码工具 — Python + Tkinter 图形界面,底层驱动 ffmpeg。
在本地批量转码视频后再上传,输出参数对齐腾讯云点播(Tencent Cloud VOD)的转码模板, 使云端流水线可以直接接收文件,从而免去服务端转码费用。界面面向非技术用户,ffmpeg 全程在 后台驱动,不对用户暴露。
两种输出格式,均为 H.264 / MP4 / AAC,默认同时产出。定义在 src/presets.py。
| 预设 id | 码率 | 帧率 | 缩放 |
|---|---|---|---|
STD-H264-MP4-1080P |
2500 Kbps | 25 | 短边 = 1080,保持宽高比 |
STD-H264-MP4-720P |
1800 Kbps | 25 | 短边 = 720,保持宽高比 |
缩放规则(“等比例缩放 x N”):保持宽高比,将短边缩放到目标值,强制输出为偶数尺寸
(H.264 要求,通过 ffmpeg 的 -2 实现),并且绝不放大(短边不超过源视频短边)。
横屏 / 竖屏由 if(gt(iw,ih),...) 表达式统一处理。
- Windows
- Python 3.10+(需包含 tkinter)
ffmpeg.exe与ffprobe.exe
运行时仅依赖 Python 标准库(tkinter、subprocess、threading、pathlib)。 PyInstaller 只在打包时需要。
出于体积和授权考虑,仓库不包含 ffmpeg 二进制。请从
gyan.dev(release essentials 即可)或
BtbN/FFmpeg-Builds 下载 Windows 构建,
将 ffmpeg.exe 和 ffprobe.exe 放入 vendor/ffmpeg/。
程序会优先查找 vendor/ffmpeg/,找不到则回退到系统 PATH 上的 ffmpeg。
# 从源码运行
python main.py
# 安装打包工具
pip install -r requirements.txt
# 构建独立 exe(会打包 vendor/ffmpeg/)-> dist/BatchVideoTranscoder.exe
pyinstaller build.specmain.py 入口,调用 src.gui.app.main()
src/presets.py Preset 数据类、两个预设、ffmpeg 参数与缩放滤镜构建(改转码参数在这里)
src/ffmpeg_locator.py 定位 ffmpeg/ffprobe:先 vendor/ffmpeg(打包后走 sys._MEIPASS),再 PATH
src/ffmpeg_runner.py probe_duration() 与 transcode():-progress 解析进度、支持取消、失败清理
src/transcoder.py BatchJob 展开(文件 × 预设)为任务并在工作线程串行执行
src/gui/app.py Tkinter 窗口(文件列表、预设勾选、输出目录、进度、日志、开始/取消)
build.spec PyInstaller 打包配置
分层设计使 ffmpeg / 线程逻辑独立于 GUI。批处理运行在后台线程,Tkinter 只在主线程访问 ——
工作线程的回调一律通过 root.after(0, ...) 转发到 UI。
编码器固定使用 CPU 的 libx264:跨客户端机器可移植,且与腾讯云模板画质表现一致。
MIT © neal
本项目不分发 ffmpeg。ffmpeg 有其自身的许可证(LGPL/GPL,取决于构建方式), 请自行下载并遵守相应条款。