Home
avatar

𝓪𝓲𝓵𝓶𝓮𝓵

使用 FFmpeg 给视频添加 ASS 字幕

下载了MV但没有字幕,于是重新下载字幕文件,用软件将视频和字幕合并后发给朋友,结果发现生成的是软字幕,默认播放器不支持…

关于硬字幕和软字幕

硬字幕:嵌入画面,不可关闭、不可编辑;
软字幕:独立流,可开关、可切换、不破坏画面。

硬字幕(内嵌字幕)

硬字幕是将字幕直接渲染进视频帧,成为画面的一部分。这种方式的优点是兼容性极佳,任何设备或平台都可以显示字幕,但缺点是字幕无法关闭、无法修改。

准备工作

  1. 安装 FFmpeg:在终端输入 ffmpeg -version 验证是否安装;若未安装,可从 FFmpeg 官网下载
FFmpeg 官网
  1. 文件准备:将视频文件(如 scene.mp4)与 ASS 字幕文件(如 scene.ass)放入同一目录。

  2. 文件名规范:文件名主体保持一致(仅后缀不同),避免路径问题。

执行命令

在文件所在目录打开终端,运行以下命令:

ffmpeg -i scene.mp4 -vf "ass=scene.ass" -c:a copy output.mp4  

参数说明

-vf "ass=scene.ass":将字幕渲染至视频帧,完整保留 ASS 样式与特效。

-c:a copy:音频流直通,不重编码,高效无损。

output.mp4:输出文件名为含硬字幕的成品。

等待处理完成(进度实时显示),用播放器确认效果即可。

补充说明

  1. 画质控制:若需控制画质,可添加 -c:v libx264 -crf 23(CRF 值越小画质越高)。

  2. 字幕格式转换:若字幕为 .srt 格式,将 ass= 改为 subtitles=,但 ASS 对复杂样式支持更完整。

  3. 输出文件名:建议与原文件区分,避免覆盖原文件。

软字幕(封装字幕)

软字幕是将字幕作为独立流封装在容器内(如 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 重新编码音频。

这个方法简洁稳定,适合单文件快速处理。

FFmpeg 字幕