微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

自动检测视频源中刻录字幕的框/坐标

如何解决自动检测视频源中刻录字幕的框/坐标

实际上,我想检测给定视频源的“最大”(高度和宽度)内嵌字幕的坐标。但是为了做到这一点,我首先需要检测示例视频中每个不同字幕的框坐标,并比较它们以找到最大的。我不知道从哪里开始,所以我找到的最接近的东西(有点)是 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_valdrawBox 过滤器来测试为特定帧报告的坐标,我可以看到它仅正确检测字幕的下/左/右边界,大概是因为地球的轮廓下图中同样明亮:

enter image description here

ffplay 提高到 230 会稍微打破之前正确的底部/左侧/右侧边界:

enter image description here

把它提高到 240 给了我一个奇怪的结果:

enter image description here

然而,即使我能够使用 min_val 过滤器获得完美的结果,由于显而易见的原因,这种技术也不是万无一失的(bBox 应该任意选择,烧入的字幕可以是不同的颜色,字幕后面的图像可以相同甚至更亮,具体取决于视频源等)。

所以如果可能的话,我想知道:

  1. 是否有过滤器或其他技术可以与 ffmpeg 一起使用来做我想做的事情
  2. 是否有其他 CLI 工具或编程库可以实现这一点
  3. 任何可能有帮助的提示(也许我看问题的方式不对)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。