使用 ffmpeg drawtext 突出显示文本中的一些单词

Posted

技术标签:

【中文标题】使用 ffmpeg drawtext 突出显示文本中的一些单词【英文标题】:Highlight some words in text with ffmpeg drawtext 【发布时间】:2020-08-25 16:59:33 【问题描述】:

有什么方法可以突出显示使用drawtext 过滤器编写的文本中的某些单词?

我知道它不直接支持它,所以我正在寻找一种替代方法。

【问题讨论】:

【参考方案1】:

除了使用drawbox过滤器制作一个单独的盒子之外,没有任何实用的方法可以使用drawtext,这很笨重,不是动态的,并且很难匹配文本坐标。

改用 ASS 字幕。

Aegisub 中的字幕标记示例:

This is \3c&H00FFFF&\3a&H128&highlighted\3c\3a text.

请参阅ASS Tags 了解更多信息。

可以在Aegisub中启用文本框,如How to set background to subtitle in ffmpeg?所示

示例 ASS 文件:

[Script Info]
; Script generated by Aegisub 3.2.2
; http://www.aegisub.org/
Title: Default Aegisub file
ScriptType: v4.00+
WrapStyle: 0
ScaledBorderAndShadow: yes
YCbCr Matrix: None
PlayResX: 640
PlayResY: 480

[Aegisub Project Garbage]
Last Style Storage: Default
Video File: ?dummy:23.976000:40000:640:480:47:163:254:
Video AR Value: 1.333333

[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,Arial,20,&H00FFFFFF,&H000000FF,&HFF333333,&HFF000000,0,0,0,0,100,100,0,0,3,2,0,2,10,10,10,1

[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:00.00,0:00:05.00,Default,,0,0,0,,This is \3c&H00FFFF&\3a&H128&highlighted\3c\3a text.

ffmpeg 命令使用 subtitles filter 进行硬分叉:

ffmpeg -i input.mp4 -vf "subtitles=highlight.ass" -c:a copy output.mp4

ffmpeg 用于软潜艇的命令:

ffmpeg -i input.mp4 -i highlight.ass -map 0 -map 1 -c copy output.mkv

【讨论】:

感谢您的回答,很抱歉回复晚了。这种方法的问题是:你怎么知道drawbox过滤器中xw的正确值?也就是说,您如何准确计算“突出显示”一词的开始和结束位置? 感谢您的回答。我接受了它,因为据我所知,drawtext 无法做到这一点。由于图形原因,我不能使用等宽字体,它们只是看起来不太好 :D 你能提供任何指向另一个更优雅解决方案的指针吗? 我基本上只需要实现高亮效果,所以它必须是一个以一个或多个单词为中心的框,就像您发布的图像一样。我只是希望它能够独立于字体可靠地工作。 @TheCodingMonk 使用 ASS 字幕查看更新的答案。

以上是关于使用 ffmpeg drawtext 突出显示文本中的一些单词的主要内容,如果未能解决你的问题,请参考以下文章

FFmpeg之Filter:drawtext-给视频叠加文本

ffmpeg 只绘制最后一个文本

ffmpeg给视频添加文本

FFmpeg drawtext - 无法从文件中加载字体[关闭]

ffmpeg # 为视频添加文字drawtext

Ffmpeg drawtext 向视频中添加文字