在Windows上,我有一个动态创建的未压缩avi视频文件,它会随着时间的推移而增长。生成视频文件的应用程序只能写入物理文件。我可以开始/停止生成视频文件并轻松删除旧的视频文件。
我想分析不断增长的视频文件的最后一帧,以便根据当前/最新图像的实时内容做出决定。如果我能达到10fps以上就足够了。 每当视频文件中有新的帧时,我想获得未压缩的图像。
作为一种文件格式,我认为png可能是这种情况下的最佳选择,但我对替代方案持开放态度。 我想知道ffmpeg或类似的工具是否可以做到这一点。
我更喜欢使用perl + Imager模块分析图像并做出决定。 Tha分析要求并不复杂。基本上我只需要在最后一帧内的某些位置找到一些小图像。 如果您能建议一种有效的方法从ffmpeg将此信息输入我的应用程序,我将不胜感激。 例如,直接连接到我的代码或从已保存的png文件中读取。
我知道perl已经有了一个ffmpeg接口模块,但据我所知,模块无法提供我需要的功能。
答案 0 :(得分:1)
首先,我希望你能实现未压缩视频的数据速率!例如,在720x480(普通的'OLTS,而不是HD),16位色,10fps,你每秒产生6.6兆字节。您在不到两天的时间内填写1TB硬盘。处理perl中的数据速率应该很有趣。
从文件中获取新帧应该相当简单,因为它是未压缩的视频。
sysread
它。继续尝试,直到你得到完整的帧(当然每次都更新你要求的长度),或者你得到一个EOF(sysread
返回0)。Time::HiRes
会让你睡不到1秒),然后再尝试读取帧的其余部分。 sysread
不需要重置EOF指示;每次打电话都会再试一次。继续执行延迟/ sysread循环,直到你有一个完整的框架。您可能会发现,如果您使用库来实现您的计算机视觉,它可以帮助实现这一功能,例如,它可以从AVI文件中读取帧。例如,OpenCV可以。