使用 FFmpeg 给视频添加 ASS 字幕
下载了MV但没有字幕,于是重新下载字幕文件,用软件将视频和字幕合并后发给朋友,结果发现生成的是软字幕,默认播放器不支持…
关于硬字幕和软字幕
硬字幕:嵌入画面,不可关闭、不可编辑;
软字幕:独立流,可开关、可切换、不破坏画面。
硬字幕(内嵌字幕)
硬字幕是将字幕直接渲染进视频帧,成为画面的一部分。这种方式的优点是兼容性极佳,任何设备或平台都可以显示字幕,但缺点是字幕无法关闭、无法修改。
准备工作
- 安装 FFmpeg:在终端输入 ffmpeg -version 验证是否安装;若未安装,可从 FFmpeg 官网下载
文件准备:将视频文件(如 scene.mp4)与 ASS 字幕文件(如 scene.ass)放入同一目录。
文件名规范:文件名主体保持一致(仅后缀不同),避免路径问题。
执行命令
在文件所在目录打开终端,运行以下命令:
ffmpeg -i scene.mp4 -vf "ass=scene.ass" -c:a copy output.mp4 参数说明
• -vf "ass=scene.ass":将字幕渲染至视频帧,完整保留 ASS 样式与特效。
• -c:a copy:音频流直通,不重编码,高效无损。
• output.mp4:输出文件名为含硬字幕的成品。
等待处理完成(进度实时显示),用播放器确认效果即可。
补充说明
画质控制:若需控制画质,可添加
-c:v libx264 -crf 23(CRF 值越小画质越高)。字幕格式转换:若字幕为 .srt 格式,将 ass= 改为 subtitles=,但 ASS 对复杂样式支持更完整。
输出文件名:建议与原文件区分,避免覆盖原文件。
软字幕(封装字幕)
软字幕是将字幕作为独立流封装在容器内(如 MP4 MKV),播放时由播放器加载,可开关、可切换语言。添加软字幕的命令示例:
ffmpeg -i video.mp4 -i subtitle.ass -c copy output.mkv MP4 容器对软字幕支持有限,推荐使用 MKV 格式。
常见问题参考
| 问题现象 | 可能原因与解决方法 |
File for filter 'ass' not found | 字幕文件名拼写错误、后缀非 .ass,或未与视频同目录。 |
| 字幕显示为方框/乱码 | 系统缺少 ASS 指定字体,安装对应字体或修改字幕使用通用字体(如思源黑体)。 |
| 输出视频无法播放 | 尝试显式指定编码器:-c:v libx264 -crf 23 |
| 音频异常或缺失 | 可以尝试移除 -c:a copy 或改为 -c:a aac 让 FFmpeg 重新编码音频。 |
这个方法简洁稳定,适合单文件快速处理。
