Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 

Repository files navigation

FFmpeg 字幕烧录工具 🎬

Python Tkinter FFmpeg

一个简单易用的FFmpeg字幕烧录工具,让视频字幕烧录变得更加简单!


📖 项目背景

这个项目的诞生源于我在录制直播时的一个小需求。当时我想把录制的视频和弹幕(字幕文件)合并成一个完整的视频,最初我使用了一个简单的批处理脚本:

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、预设、音频码率)
  • 处理进度显示(进度条、状态提示)
  • 控制按钮(开始、取消、清空、使用说明)
  • 日志输出区域(可复制、可清空)

🚀 快速开始

环境要求

  1. Python 3.7+

    • 需要 tkinter 库(Python 通常自带)
  2. FFmpeg

安装步骤

  1. 克隆或下载本项目
git clone https://github.com/TTZW1001/ffmpeg-burn-subtitle.git
cd ffmpeg-burn-subtitle
  1. 确认 FFmpeg 已正确安装
ffmpeg -version
  1. 运行程序
python subtitle_burner.py

📋 使用说明

基本流程

  1. 选择文件

    • 点击"浏览"按钮选择视频文件(支持 mp4、flv、avi、mkv 等格式)
    • 选择字幕文件(支持 ass、srt、ssa 格式)
    • 输出文件会自动生成,也可手动修改
  2. 调整参数(可选)

    • CRF (质量):默认 18,范围 0-51,数值越小质量越好,文件越大
    • 编码预设:默认 slow,在质量和速度间平衡
    • 音频码率:默认 128k,标准音质
  3. 开始处理

    • 点击"开始处理"按钮
    • 观察进度条和状态显示
    • 等待处理完成
  4. 查看结果

    • 处理完成后会弹出提示
    • 在指定位置找到输出的视频文件

参数说明

参数 推荐值 说明
CRF 18-23 18 高质量,23 标准质量,数值越大压缩率越高
编码预设 slow 速度从快到慢:ultrafast → veryslow
slow 是性能与质量的平衡点
音频码率 128k 96k 可接受,128k 标准,192k+ 高质量

🛠️ 技术实现

核心技术

  • Python - 主要编程语言
  • Tkinter - 图形界面库
  • FFmpeg - 音视频处理引擎
  • threading - 多线程处理,避免界面卡顿
  • subprocess - 进程管理和FFmpeg调用

实现原理

  1. 字幕烧录:使用 FFmpeg 的 subtitles 滤镜将字幕渲染到视频帧上,生成硬字幕
  2. 路径处理:自动处理 Windows 路径格式,转换反斜杠并转义特殊字符
  3. 进度解析:实时解析 FFmpeg 输出的时间戳,计算处理进度
  4. 异步处理: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 吧!

About

一个简单易用的 FFmpeg 字幕烧录工具,支持图形界面和实时进度显示

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages