我正在创建一个代码来删除一些我不需要的视频文件。这些视频来自闭路电视录像,并且全天候录制。但是,记录视频的软件会将文件保存在~1小时的视频中,这就是问题(不是确切的持续时间)。我只对保留当天某个特定部分的视频感兴趣(这会有所不同),因为视频的持续时间并不准确,这会给我带来麻烦。
视频文件名有一个日期和时间戳,但仅限于开始,所以如果我能找到持续时间,一切都变成了简单的代数。
所以我的问题很简单,是否可以使用R?
获取视频文件的持续时间(时间)视频来自多个摄像头和每个摄像头只是另外几个有用信息,因为它们使用file.info来返回文件大小并导出视频长度不是一种选择。视频文件也是.avi格式。
干杯 帕特雷
答案 0 :(得分:2)
据我所知,没有现成的包来处理R中的视频文件(就像matlab一样)。这不是一个纯粹的R解决方案,但可以完成工作。我将CLI接口安装到MediaInfo并从R调用它。我使用system
调用它。
wolf <- system("q:/mi_cli/mediainfo.exe Krofel_video2volk2.AVI", intern = TRUE)
wolf # output by MediaInfo
[1] "General"
[2] "Complete name : Krofel_video2volk2.AVI"
[3] "Format : AVI"
[4] "Format/Info : Audio Video Interleave"
[5] "File size : 10.7 MiB"
[6] "Duration : 11s 188ms"
[7] "Overall bit rate : 8 016 Kbps"
...
[37] "Channel count : 1 channel"
[38] "Sampling rate : 8 000 Hz"
[39] "Bit depth : 16 bits"
[40] "Stream size : 174 KiB (2%)"
[41] "Alignment : Aligned on interleaves"
[42] "Interleave, duration : 63 ms (1.00 video frame)"
# Find where Duration is (general) and extract it.
find.duration <- grepl("Duration", wolf)
wolf[find.duration][1]# 1 = General, 2 = Video, 3 = Audio
[1] "Duration : 11s 188ms"
有趣的解析时间。
答案 1 :(得分:1)
这可能有点低级,但如果您要完成解析二进制数据的任务,请查找AVI规范的副本并找出如何同时获取视频帧数和帧数率。
如果您使用十六进制编辑器查看其中一个AVI文件,您将在开头看到一系列LIST
块。进入这个块的更远的地方将是vids
块。紧跟vids
之后应该是一个人类可读的视频四字符代码(FourCC),用于指定视频编解码器,可能类似于mjpg
(MJPEG)或avc1
(H.264)相机。之后的20个字节将是以小端符号表示的4个字节,表示帧速率。跳过另外4个字节,然后接下来的4个字节将是另一个小的字节序号,表示视频帧的总数。
我正在查看一个示例AVI文件,其中数字是:帧速率= 24和帧数= 0x37EB = 14315.这可以达到9m56s,这对于此文件是准确的。