如何在ffmpeg中设置字幕背景?
它描述了如何将srt文件刻录到视频中。如何在ffmpeg中设置字幕背景?,ffmpeg,subtitle,Ffmpeg,Subtitle,它描述了如何将srt文件刻录到视频中。 然而,我想把一个半透明的背景字幕,使文本可以更容易阅读。我该怎么做呢?创建一个png,其中包含一个透明框和一个您喜欢的大小的alpha通道。您可以使用gimp或photoshop等 然后使用以下命令: ffmpeg -i video.mp4 -i logo.png -filter_complex "[0:v][1:v]overlay=10:10" \ -codec:a copy out.mp4 其中10:10是距左上角的距离 之后,您可以插入字幕。 AS
然而,我想把一个半透明的背景字幕,使文本可以更容易阅读。我该怎么做呢?创建一个png,其中包含一个透明框和一个您喜欢的大小的alpha通道。您可以使用gimp或photoshop等 然后使用以下命令:
ffmpeg -i video.mp4 -i logo.png -filter_complex "[0:v][1:v]overlay=10:10" \
-codec:a copy out.mp4
其中10:10是距左上角的距离
之后,您可以插入字幕。
ASS字幕可以具有半透明的文本背景
与aegisub
最简单的方法是使用
Subtitle
→ <代码>样式管理器当前脚本下
选择默认值
,然后按编辑
按钮轮廓
和阴影
值进行实验。选中不透明框颜色
下,单击轮廓
或阴影
下的颜色。将出现一个窗口。调整Alpha
框的值以更改透明度.ass
文件force\u style
选项添加透明背景
ffmpeg -i input -filter_complex "subtitles=subs.ass:force_style='OutlineColour=&H80000000,BorderStyle=3,Outline=1,Shadow=0,MarginV=20'" output
- 这将适用于FFmpeg支持的任何基于文本的字幕,因为过滤器将自动将它们转换为ASS
- 有关格式设置选项,请参见
轮廓
和阴影
大小更改为0
Alpha
调整到所需的透明度级别Style
行中,将与BorderStyle
对应的值更改为4
。这将填充每个字幕事件的边界框背景。示例样式
行:
Style: Default,Arial,20,&H00FFFFFF,&H000000FF,&H80000000,&H80000000,-1,0,0,0,100,100,0,0,4,0,0,2,10,10,10,1
BorderStyle=4
是一个非标准值,因此它可能无法在所有播放器中正常工作。
感谢和wm4的BorderStyle
建议
使用抽屉
可以使用创建背景框。
如果希望框跨越宽度,这可能很有用
缺点是,对于长字幕,你必须考虑换行或换行。简单地将框加高以进行补偿就足够了,但会看起来很难看,因为字幕基线保持不变:单行字幕顶部的填充比底部的填充更多。您可以使用Aegisub脚本。该脚本自动为每行字幕生成透明背景
backcolor=&h8000000
表示有%50不透明黑色背景
它是颜色的十六进制表示,AABBGGRR。对于当前版本的libass(0.15)和当前版本的ffmpeg(N-100402-g0320dab265,从源代码编译,可能与版本4.2相同),您可以使用此bash脚本
INFILE="movie.mp4"
SUBS="subtitles.srt"
OUTFILE="result.mp4"
ffmpeg -i "${INFILE}" -vf subtitles=${SUBS}:force_style='Borderstyle=4,Fontsize=16,BackColour=&H80000000'" "${OUTFILE}"
将subtitles.srt刻录到movie.mp4并保存为result.mp4
字幕将正确显示在50%透明矩形中,
即使一个字幕有两行。如果是两行字幕,也会留下令人讨厌的一行。有没有办法摆脱ged?我不知道。另一种方法是使用制作一个静态、透明的盒子,但这也不是个好主意。@eusoubrasileiro好听。请注意“多条线可能重叠,看起来很难看”的问题。IIRC,这是libass的问题。某个地方有一个关于它的错误报告。@sup如果我没记错的话,它是在上的,但它当前处于关闭状态。@LordNeckbeard实际上,设置BorderStyle=4解决了这个问题(请参阅我打开的Github问题),请更新您的答案好吗?不过,它只适用于libass。如果您想使用“创建一个单独的背景框”方法,只使用过滤器会更简单、更有效。此外,使用过滤器,如叠加或drawbox,将需要重新编码视频,但如我的回答中所示,为SoftSub使用ASS字幕不会修改视频。
ffmpeg -i input.mp4 -filter_complex "subtitles=input.srt:force_style='BackColour=&H80000000,BorderStyle=4,Fontsize=11'" output.mp4
INFILE="movie.mp4"
SUBS="subtitles.srt"
OUTFILE="result.mp4"
ffmpeg -i "${INFILE}" -vf subtitles=${SUBS}:force_style='Borderstyle=4,Fontsize=16,BackColour=&H80000000'" "${OUTFILE}"