使用FFmpeg为视频添加指定边距字幕失败的问题排查
FFmpeg 字幕左下角定位问题解决方法
问题原因
你之前的命令里,Alignment=1确实是左下角对齐,但MarginL和MarginV的逻辑和预期不符:
MarginV在Alignment=1时代表字幕块顶部到视频顶部的距离,而非底部MarginL是字幕块左侧到视频左侧的距离,但字幕本身有宽度,直接设较大值会导致字幕整体偏右,出现超出中线的情况
解决方案
以下提供两种可行的定位方式,支持像素或百分比设置:
1. 像素精准定位
如果要固定像素边距,需手动计算MarginV的值:
- 公式:
MarginV = 视频高度 - 字体高度 - 底部边距像素 - 保持
Alignment=1,MarginL直接设为左侧边距像素
以你的850x480视频为例,若要距左侧42像素(5%)、距底部48像素(10%)、字体24号,命令修改为:
ffmpeg -y -i english.mp4 -vf "subtitles=english.srt:force_style='Alignment=1,OutlineColour=&H100000000,BorderStyle=3,Outline=1,Shadow=0,FontName=Arial,FontSize=24,MarginL=42,MarginV=408'" -c:v libx264 -crf 23 -c:a copy output_video.mp4
注:MarginV=480-24-48=408,确保字幕底部到视频底部的距离为48像素
2. 百分比自适应定位
通过subtitles滤镜的x/y表达式直接基于视频宽高计算位置,无需手动适配分辨率:
x=0.05*w:左侧边距为视频宽度的5%y=h-0.10*h:字幕左下角距视频底部的距离为视频高度的10%(配合alignment=1实现左下角对齐)
命令示例:
ffmpeg -y -i english.mp4 -vf "subtitles=english.srt:x=0.05*w:y=h-0.10*h:alignment=1:force_style='OutlineColour=&H100000000,BorderStyle=3,Outline=1,Shadow=0,FontName=Arial,FontSize=24'" -c:v libx264 -crf 23 -c:a copy output_video.mp4
这种方式会自动适配不同分辨率的视频,无需重新计算数值
内容的提问来源于stack exchange,提问作者Anthony
相关产品推荐
相关产品推荐

