如何解决自动检测视频源中刻录字幕的框/坐标
实际上,我想检测给定视频源的“最大”(高度和宽度)内嵌字幕的坐标。但是为了做到这一点,我首先需要检测示例视频中每个不同字幕的框坐标,并比较它们以找到最大的。我不知道从哪里开始,所以我找到的最接近的东西(有点)是 ffmpeg 的 bBox
视频过滤器,它根据文档计算 "the bounding Box for the non-black pixels in the input frame luminance plane"
,基于给定的亮度值:
ffmpeg -i input.mkv -vf bBox=min_val=130 -f null -
这给了我一条包含视频中每个输入帧坐标的线,例如:
[Parsed_bBox_0 @ 0ab734c0] n:123 pts:62976 pts_time:4.1 x1:173 x2:1106 y1:74 y2:694 w:934 h:621 crop=934:621:173:74 drawBox=173:74:934:621
这个想法是制作一个脚本并循环过滤器的输出,通过比较它们来检测“最大”框,并输出其坐标和帧数作为最长字幕的代表。
即使在带有白色硬字幕的相对较暗的视频中,bBox
过滤器也无法正确检测字幕框。通过反复试验,并且仅针对我用来运行测试的特定视频样本,检测任何字幕框的“最佳”结果是使用 min_val
为 130(据说 {{ 1}} 在 0-255 的范围内,尽管文档没有说明任何内容)。使用带有 min_val
的 drawBox
过滤器来测试为特定帧报告的坐标,我可以看到它仅正确检测字幕的下/左/右边界,大概是因为地球的轮廓下图中同样明亮:
将 ffplay
提高到 230 会稍微打破之前正确的底部/左侧/右侧边界:
把它提高到 240 给了我一个奇怪的结果:
然而,即使我能够使用 min_val
过滤器获得完美的结果,由于显而易见的原因,这种技术也不是万无一失的(bBox
应该任意选择,烧入的字幕可以是不同的颜色,字幕后面的图像可以相同甚至更亮,具体取决于视频源等)。
所以如果可能的话,我想知道:
- 是否有过滤器或其他技术可以与 ffmpeg 一起使用来做我想做的事情
- 是否有其他 CLI 工具或编程库可以实现这一点
- 任何可能有帮助的提示(也许我看问题的方式不对)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。