这个项目的诞生源于我在录制直播时的一个小需求。当时我想把录制的视频和弹幕(字幕文件)合并成一个完整的视频,最初我使用了一个简单的批处理脚本:
ffmpeg -i in.flv -vf subtitles=in.ass -c:v libx264 -crf 18 -preset slow -c:a aac -b:a 128k out.mp4这个脚本确实能实现功能,但是有个局限:只能在文件所在的目录下执行,且文件名必须固定。每次使用都要把文件改名、复制到特定目录,操作起来很不方便。
于是我突发奇想:为什么不做一个带图形界面的工具呢?这样就可以随意选择文件路径,还能调整各种参数!
作为一个纯新手,在 GitHub Copilot 的强力辅助下,我完成了这个项目。虽然可能有更成熟的工具,但自己动手实现的过程让我学到了很多 😊
- 🎯 直观的图形界面 - 大字体设计,适合视力不佳的用户使用
- 📁 灵活的文件选择 - 支持从任意路径选择视频、字幕和输出文件
- 🤖 智能输出命名 - 选择视频后自动生成输出文件名(可修改)
- ⚙️ 参数可调节 - 支持调整CRF质量、编码预设、音频码率
- 📊 实时进度显示 - 显示处理进度百分比和预计剩余时间
- 🛑 随时取消处理 - 支持中途取消转码任务
- 📝 详细日志记录 - 可复制的日志输出,方便问题排查
- 🔍 完整错误处理 - 友好的错误提示和输入验证
💡 提示:界面采用简洁设计,所有功能一目了然
主界面包含:
- 文件选择区域(视频、字幕、输出文件)
- 编码参数设置区域(CRF、预设、音频码率)
- 处理进度显示(进度条、状态提示)
- 控制按钮(开始、取消、清空、使用说明)
- 日志输出区域(可复制、可清空)
-
Python 3.7+
- 需要
tkinter库(Python 通常自带)
- 需要
-
FFmpeg
- 必须安装并添加到系统 PATH 环境变量
- FFmpeg 下载地址
- 克隆或下载本项目
git clone https://github.com/TTZW1001/ffmpeg-burn-subtitle.git
cd ffmpeg-burn-subtitle- 确认 FFmpeg 已正确安装
ffmpeg -version- 运行程序
python subtitle_burner.py-
选择文件
- 点击"浏览"按钮选择视频文件(支持 mp4、flv、avi、mkv 等格式)
- 选择字幕文件(支持 ass、srt、ssa 格式)
- 输出文件会自动生成,也可手动修改
-
调整参数(可选)
- CRF (质量):默认 18,范围 0-51,数值越小质量越好,文件越大
- 编码预设:默认 slow,在质量和速度间平衡
- 音频码率:默认 128k,标准音质
-
开始处理
- 点击"开始处理"按钮
- 观察进度条和状态显示
- 等待处理完成
-
查看结果
- 处理完成后会弹出提示
- 在指定位置找到输出的视频文件
| 参数 | 推荐值 | 说明 |
|---|---|---|
| CRF | 18-23 | 18 高质量,23 标准质量,数值越大压缩率越高 |
| 编码预设 | slow | 速度从快到慢:ultrafast → veryslow slow 是性能与质量的平衡点 |
| 音频码率 | 128k | 96k 可接受,128k 标准,192k+ 高质量 |
- Python - 主要编程语言
- Tkinter - 图形界面库
- FFmpeg - 音视频处理引擎
- threading - 多线程处理,避免界面卡顿
- subprocess - 进程管理和FFmpeg调用
- 字幕烧录:使用 FFmpeg 的
subtitles滤镜将字幕渲染到视频帧上,生成硬字幕 - 路径处理:自动处理 Windows 路径格式,转换反斜杠并转义特殊字符
- 进度解析:实时解析 FFmpeg 输出的时间戳,计算处理进度
- 异步处理:FFmpeg 在后台线程运行,主线程保持界面响应
原始脚本(合并脚本.bat):
ffmpeg -i in.flv -vf subtitles=in.ass -c:v libx264 -crf 18 -preset slow -c:a aac -b:a 128k out.mp4脚本的局限性:
- ❌ 必须在文件所在目录执行
- ❌ 文件名固定(in.flv、in.ass、out.mp4)
- ❌ 参数无法灵活调整
- ❌ 没有进度显示
- ❌ 无法取消操作
应用的改进:
- ✅ 可从任意路径选择文件
- ✅ 文件名任意,自动处理路径
- ✅ 参数可视化调节
- ✅ 实时进度显示和剩余时间
- ✅ 支持随时取消
- ✅ 完整的错误处理和日志
- 耗时较长:字幕烧录需要重新编码整个视频,处理时间取决于视频长度和编码预设
- 1小时视频 + slow预设 ≈ 30-60分钟处理时间(视硬件而定)
- 使用 faster/fast 预设可加快速度,但会略微降低质量
- CPU密集型:x264 编码主要依赖 CPU,处理期间 CPU 占用较高
- 磁盘空间:输出文件可能较大,确保有足够的磁盘空间
- 硬字幕:烧录后的字幕无法关闭或修改
- 单任务:目前不支持批量处理
- 格式支持:输出格式固定为 mp4(可手动修改扩展名)
✅ 适合:
- 录播视频添加弹幕/字幕
- 需要永久显示字幕的场景
- 在不支持外挂字幕的设备上播放
- 分享带字幕的视频
❌ 不适合:
- 需要频繁修改字幕
- 追求极致处理速度
- 批量处理大量视频
这是我的第一个开源项目,如果您:
- 发现了 Bug 🐛
- 有改进建议 💡
- 想添加新功能 ✨
欢迎提交 Issue 或 Pull Request!
如果这个工具对您有帮助,请给个 ⭐ Star 支持一下,这对我来说意义重大!
- GitHub Copilot - 强大的 AI 编程助手,帮助新手实现想法
- FFmpeg - 开源多媒体处理框架
- 所有使用和支持这个项目的朋友们
Made with ❤️ by TTZW1001
如果觉得有用,请点个 ⭐ Star 吧!