如何使用ffmpeg在视频任意位置批量展示多条字幕
多时段任意位置多字幕的写入实现方案
推荐方案:使用ASS(Advanced SubStation Alpha)字幕格式
ASS是目前支持精确定位、多轨同步显示兼容性最好的字幕格式,原生支持时间、坐标参数自定义,无需第三方工具扩展。
基础文件结构示例
[Script Info] Title: 自定义多位置字幕 ScriptType: v4.00+ PlayResX: 1920 # 替换为你的视频宽度 PlayResY: 1080 # 替换为你的视频高度 [V4+ Styles] Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding Style: Default,微软雅黑,24,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,0,2,10,10,10,1 [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text # 下方为字幕条目,可按需添加任意数量 Dialogue: 0,0:00:01.00,0:00:05.00,Default,,0,0,0,,{\pos(100,200)}第1秒到第5秒显示的左上角字幕 Dialogue: 1,0:00:01.00,0:00:05.00,Default,,0,0,0,,{\pos(1600,900)}第1秒到第5秒同步显示的右下角字幕 Dialogue: 0,0:00:06.00,0:00:10.00,Default,,0,0,0,,{\pos(960,540)}第6秒到第10秒显示的居中字幕
参数说明
- 时间参数:格式为
时:分:秒.毫秒,精确到10毫秒即可满足常规需求,同一时段可添加任意条不同坐标的字幕 - 位置参数:
\pos(x,y)标记放在字幕文本最前端,x为横坐标、y为纵坐标,屏幕左上角为坐标原点(0,0),数值和你设定的PlayResX/PlayResY对应 - 图层参数:
Dialogue后的第一个数字为图层,数值越大显示层级越高,重叠时优先级更高
使用方法
将编写完成的内容保存为.ass后缀的文件,即可直接导入剪映、Premiere、FFmpeg等剪辑工具,或主流播放器直接加载使用。
备选方案:SRT格式扩展定位
如果必须使用SRT格式,可通过ASS兼容标记实现定位,兼容性略低于原生ASS格式:
1 00:00:01,000 --> 00:00:05,000 {\pos(100,200)}左上角字幕 2 00:00:01,000 --> 00:00:05,000 {\pos(1600,900)}右下角字幕
SRT格式时间参数毫秒部分用逗号分隔,其余坐标规则和ASS一致。
批量生成提示
如果已有整理好的时间、坐标、文本清单,可以将清单导出为CSV格式,通过简单的字符串拼接脚本批量生成对应字幕行,无需手动逐条编写。
内容的提问来源于stack exchange,提问作者cxrodgers
相关产品推荐
相关产品推荐

