导出与字幕文件
怎样用 FFmpeg 把带样式的 ASS 字幕烧录进视频?
简短回答
使用 FFmpeg 的 ass 或 subtitles 视频滤镜,它们用 libass 把字幕画到每一帧上:ffmpeg -i input.mp4 -vf ass=captions.ass -c:a copy output.mp4。ASS 文件会保留字体、颜色、位置和动画,但这些字体必须已经安装,或者通过 fontsdir 选项指定。烧录会重新编码视频,请保留原文件。
1 分钟阅读
用什么命令把 ASS 文件烧录进视频?
ffmpeg -i input.mp4 -vf "ass=captions.ass" -c:a copy output.mp4
-vf "ass=captions.ass"用 libass 把字幕画到视频上。-c:a copy保持音频不变。视频一定会被重新编码,因为字幕成了画面的一部分。
如果 ASS 文件用到的字体放在某个文件夹里,就告诉 FFmpeg:
ffmpeg -i input.mp4 -vf "ass=captions.ass:fontsdir=./fonts" -c:a copy output.mp4
这两个滤镜都需要带 libass 的 FFmpeg 版本,即编译时加了 --enable-libass;大多数打包好的版本都已包含(FFmpeg 滤镜文档)。
ass 滤镜和 subtitles 滤镜有什么区别?
- ass 按 ASS 文件里的样式原样渲染。
- subtitles 也接受 SRT 等其他格式,会先把它们转换成 ASS。对 SRT 可以用
force_style设置样式,例如subtitles=captions.srt:force_style='FontName=Montserrat,FontSize=24'(FFmpeg 滤镜文档)。
带样式的 ASS 文件用 ass;只有 SRT 时,用 subtitles 加 force_style。
为什么字体或样式看起来不对?
- 缺少字体。 ASS 文件只写了字体名称,不包含字体本身。如果字体没有安装,也不在
fontsdir里,libass 会换成别的字体。请安装字体或指定字体文件夹。 - 视频尺寸不同。 ASS 的位置和大小是按特定画布设置的。请把它烧录到制作时对应的那个视频上。
- 效果不受支持。 有些播放器只支持 ASS 格式的一部分;FFmpeg 使用的 libass 支持其中的大部分。
- 时间不对。 如果做完 ASS 文件后又修剪了视频,字幕会错位;请用最终剪辑重新生成文件。
用 CaptionBolt 怎么做
CaptionBolt 能为 FFmpeg 工作流导出带样式的 ASS 文件,它和 CaptionBolt 自己烧录字幕时用的是同一个编译器;如果根本不需要 FFmpeg,也可以直接导出成品 MP4。
- 上传视频,选择样式,并在"文本编辑"里检查文字。
- 下载 ASS 文件。 Pro 和 Max 包含 ASS。
- 安装样式用到的字体。 内置样式使用 Montserrat、Anton、Poppins 等字体,可以在 Google Fonts 免费获取。如果你用了自己上传的字体,也要安装那个字体文件。
- 对你上传的同一个视频运行上面的 FFmpeg 命令。
如果你只需要带字幕的视频,直接从 CaptionBolt 导出 MP4 即可,字幕已经烧录好了。见 CaptionBolt 能导出哪些字幕文件。
什么情况下其他做法更好?
- 你在 Premiere Pro、DaVinci Resolve 或 Final Cut Pro 里剪辑。 它们不能导入 ASS;请使用 SRT 或带字幕的 MP4。见怎样把字幕导入剪辑软件。
- 你希望观众能关掉字幕。 把字幕保留为单独的字幕轨,不要烧录。
相关问题
怎么把 SRT 文件转成 VTT,或者把 VTT 转成 SRT?
改三处就行:VTT 文件以 WEBVTT 一行开头,毫秒前用点而不是逗号,还可以带 SRT 不支持的 cue 设置和注释。转换工具几秒钟就能完成,而且不改动文字和时间轴。只改文件后缀是不够的。网页播放器和 HTML5 视频用 VTT;LinkedIn、Facebook 和大多数剪辑软件用 SRT。
怎么把 SRT 字幕文件加到视频里?
先决定观众能不能关掉字幕。想让字幕可开关,就在 YouTube、LinkedIn 或 Facebook 上把 SRT 和视频一起上传,或者在播放器、视频文件里把它加成字幕轨。想让字幕永久显示,就用 HandBrake、FFmpeg 或剪辑软件把 SRT 烧录进画面。TikTok 和 Instagram 不接受字幕文件,发这两个平台就要把字幕烧录进去。
怎么编辑 SRT 文件又不把它弄坏?
只改文字,保留结构:每条字幕由一个编号、一行形如 00:00:01,000 --> 00:00:03,500 的时间和一到两行文字组成,字幕之间空一行。不要改箭头和逗号,每条的开始时间要早于结束时间,并以纯 UTF-8 保存。字幕编辑器会帮你检查这些,这样文件依然能导入 YouTube、LinkedIn 或剪辑软件。
怎么从视频生成 SRT 字幕文件?
先让语音识别生成初稿,再校对并导出 SRT。如果视频在你自己的 YouTube 频道上,可以在 YouTube 工作室免费下载字幕文件。否则就用能导出 SRT 的字幕或转写工具,比如 CaptionBolt 的 Pro 套餐,或者在字幕编辑器里自己打字幕。使用前一定要检查人名、数字和时间轴。