需求很常见:有一批视频和对应的字幕文件,要把字幕烧录进视频画面。
我对比了三种方案,记录一下各自的优缺点和适用场景。
方案一:自己写FFmpeg脚本
最灵活的方案。核心命令大概长这样:
ffmpeg -i video.mp4 -vf "subtitles='sub.srt':force_style='FontName=Microsoft YaHei,FontSize=24'" -c:a copy output.mp4
优点是完全可控,缺点是批量处理时需要自己写循环逻辑、处理文件名匹配、管理字体路径转义(Windows路径里的冒号和反斜杠在FFmpeg的subtitles滤镜里需要转义,这个坑我踩了不止一次)。
如果只是偶尔处理几个文件,写脚本没问题。但如果经常需要批量处理,每次都要调参数、改路径,效率不高。
方案二:在线工具
上传视频和字幕,在线处理后下载。
问题很明显:文件大小限制、上传下载耗时、样式选项少、隐私风险。对于内部培训视频这种不方便上传到第三方服务器的场景,基本不可用。
方案三:桌面工具(批量视频添加字幕工具)
这个工具本质上是给FFmpeg的subtitles滤镜做了一层GUI封装,但解决了几个脚本方案的痛点:
文件名自动匹配。视频和字幕放在同一目录下,文件名相同即自动配对。不用自己写匹配逻辑。
字体路径自动处理。选一个.ttf文件就行,工具会自动创建临时字体目录、处理路径转义、提取字体家族名称。这个在脚本方案里是最容易出错的环节。
样式可视化配置。颜色、大小、描边、背景、阴影、位置都有GUI控件,还有预览功能。不用在命令行里拼force_style字符串。
编码器选择。支持libx264(CPU)、h264_nvenc(NVIDIA)、h264_qsv(Intel)、h264_amf(AMD)四种编码器,CRF可调。
三种方案对比
| 维度 | FFmpeg脚本 | 在线工具 | 桌面工具 |
|---|---|---|---|
| 批量处理 | 需自己写循环 | 不支持 | 原生支持 |
| 样式自定义 | 完全可控但配置复杂 | 选项少 | GUI配置+预览 |
| 字体处理 | 需手动转义路径 | 不可控 | 自动处理 |
| GPU加速 | 需手动指定编码器 | 不支持 | 下拉框选择 |
| 隐私 | 本地处理 | 上传第三方 | 本地处理 |
| 学习成本 | 高 | 低 | 低 |
我的选择
日常批量处理用桌面工具,特殊需求(比如需要叠加多轨字幕、或者需要更复杂的滤镜链)用脚本。
桌面工具支持SRT、ASS、SSA三种字幕格式,视频支持MP4、MKV、MOV、AVI、WMV、FLV、WebM、M4V,输出可选MP4、MKV、MOV、AVI。覆盖面够用了。
一个提醒:字体文件是必选项。不选的话字幕会显示为方块。工具会自动从字体文件中提取家族名称传给FFmpeg,不需要手动输入字体名。
