如何利用 ffmpeg 从视频流中提取关键帧并仅打印这些帧中存在的标签?

问题描述

关于上下文,我将 TensorFlow 对象检测 API 用于一个项目,并且我修改了可视化_utils 文件以将任何现有的类标签打印到终端,然后将它们写入 .txt 文件。通过一些研究,我遇到了 FFmpeg,我想知道是否有一个函数可以在 FFmpeg 中使用,以便它只打印和写入视频中关键帧的类标签? - 即当视频发生变化时。目前,即使没有变化,它也会每帧打印所有类标签,所以即使视频中没有新对象,我也会有重复的标签数量。继此之后,我是否必须事先将此关键帧过滤应用于输入视频?

提前致谢!

我正在使用 opencv2 来捕获我的视频输入。

请参阅下面的代码

visualization_utils.py - 在 draw_bounding_Box_on_image_array 函数内部:

# Write video output to file for evaluation.

  f = open("ObjDecOutput.txt","a")
  print(display_str_list[0])
  f.write(display_str_list[0])

解决方法

我以为我只是跟进这个,我最终使用 ffmpeg mpdecimate 和 setpts 过滤器来删除重复和相似的帧。

ffmpeg -i example.mp4 -vf mpdecimate=frac=1,setpts=N/FRAME_RATE/TB  example_decimated.mp4

然而,这并没有解决我正在写入标签的文件中的重复问题 - 为了解决这个问题,我将文件中的每一行附加到一个列表中并循环遍历它以删除重复元素组并只保留第一次出现并将其附加到新列表中。