【发布时间】:2014-11-10 06:51:10
【问题描述】:
描述了here 如何将 srt 文件刻录成视频。 但是,我想为字幕设置半透明背景,以便更轻松地阅读文本。我该怎么做?
【问题讨论】:
描述了here 如何将 srt 文件刻录成视频。 但是,我想为字幕设置半透明背景,以便更轻松地阅读文本。我该怎么做?
【问题讨论】:
ASS 字幕可以有一个半透明的文本背景。
最简单的方法是使用aegisub。
Subtitle→Styles manager。Current Script 下选择Default,然后按Edit 按钮。Outline 和Shadow 值进行实验。检查Opaque box。Colors 下单击Outline 或Shadows 下的颜色。将出现一个窗口。调整Alpha 框的值以更改透明度。.ass 文件。现在您可以使用 AAS 文件制作hardsubs or softsubs with ffmpeg。
如果你想要hardsubs,你可以使用subtitles filter通过force_style选项添加透明背景。
ffmpeg -i input -filter_complex "subtitles=subs.ass:force_style='OutlineColour=&H80000000,BorderStyle=3,Outline=1,Shadow=0,MarginV=20'" output
这适用于 FFmpeg 支持的任何基于文本的字幕,因为过滤器会自动将它们转换为 ASS。
有关格式选项,请参阅 SubStation Alpha (ASS) style fields。
如果您的字幕包含多行,由于长行的自动换行或故意换行,背景将重叠并可能看起来很难看,如下所示:
您可以通过以下方式避免这种情况:
Outline 和Shadow 大小更改为0。Alpha调整为您想要的透明度级别。在文本编辑器中编辑 ASS 文件。在Style 行中,将BorderStyle 对应的值更改为4。这将填充每个字幕事件的边界框背景。示例Style 行:
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 是一个非标准值,因此它可能无法在所有播放器中正常工作。
感谢 sup 和 wm4 的 BorderStyle 建议。
drawbox filter 可用于创建背景框。 如果您希望框跨越宽度,这可能很有用。
ffmpeg -i input -filter_complex "drawbox=w=iw:h=24:y=ih-28:t=max:color=black@0.4,subtitles=subs.ass" output
缺点是您必须为长字幕考虑换行或自动换行。简单地让盒子变高来补偿就足够了,但看起来很难看,因为字幕基线保持不变:单行字幕顶部的填充比底部多。
【讨论】:
以您喜欢的大小创建一个带有透明框和 Alpha 通道的 png。您可以使用例如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 是到左上角的距离。
之后您可以插入字幕。
【讨论】:
您可以使用this Aegisub 脚本。该脚本自动为每一行字幕生成透明背景。
【讨论】:
ffmpeg -i input.mp4 -filter_complex "subtitles=input.srt:force_style='BackColour=&H80000000,BorderStyle=4,Fontsize=11'" output.mp4
BackColour=&H80000000 表示具有 %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% 透明的矩形中, 即使字幕中有 2 行。
【讨论】: