Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用R检索视频文件持续时间(时间)_R_Video - Fatal编程技术网

使用R检索视频文件持续时间(时间)

使用R检索视频文件持续时间(时间),r,video,R,Video,我正在创建一个代码来删除一些我不需要的视频文件。这些视频来自中央电视台的录像带,全天候录制。但是,录制视频的软件将文件保存在约1小时的视频中,这就是问题所在(不是确切的持续时间)。我只对一天中某个特定时间段的视频感兴趣(时间不同),因为视频的持续时间不准确,这给我带来了麻烦 视频文件名有一个日期和时间戳,但仅限于开始,因此如果我能找到持续时间,一切都变得简单 所以我的问题很简单,是否可以使用R获得视频文件的持续时间(时间) 只有几个其他有用的信息视频来自几个摄像头,每个摄像头的记录帧速率不同,因

我正在创建一个代码来删除一些我不需要的视频文件。这些视频来自中央电视台的录像带,全天候录制。但是,录制视频的软件将文件保存在约1小时的视频中,这就是问题所在(不是确切的持续时间)。我只对一天中某个特定时间段的视频感兴趣(时间不同),因为视频的持续时间不准确,这给我带来了麻烦

视频文件名有一个日期和时间戳,但仅限于开始,因此如果我能找到持续时间,一切都变得简单

所以我的问题很简单,是否可以使用R获得视频文件的持续时间(时间)

只有几个其他有用的信息视频来自几个摄像头,每个摄像头的记录帧速率不同,因此使用file.info返回文件大小并导出视频长度不是一个选项。视频文件也是.avi格式的

干杯
Patrao

这可能有点低,但如果您能够解析二进制数据,请查阅AVI规范的副本,找出如何获得视频帧数和帧速率

如果您使用十六进制编辑器查看其中一个AVI文件,您将在开始处看到一系列
列表
块。再深入一点这个区块就是
vids
区块。紧跟在
vids
之后的应该是人类可读的视频四字符代码(FourCC),用于指定视频编解码器,可能类似于相机的
mjpg
(MJPEG)或
avc1
(H.264)。20个字节之后,将有4个字节存储在表示帧速率的小尾端符号中。跳过另外4个字节,接下来的4个字节将是另一个小的endian数,表示视频帧的总数


我现在正在查看一个AVI文件示例,其中的数字是:帧速率=24和#of frames=0x37EB=14315。这适用于9m56s,这对于这个文件来说是准确的。

据我所知,没有现成的软件包可以处理R格式的视频文件(就像matlab一样)。这不是一个纯粹的R解决方案,但可以完成任务。我将CLI接口安装到并从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"

wolf您可以编写一个VirtualDub脚本并在每个文件上运行它吗?如果您在linux上,请尝试@Roman。很遗憾,我不能编写VirtualDub代码,而且我在windows 7系统上。这些AVI文件使用什么编解码器?它们是恒定比特率吗?@MultimediaMike恐怕我不知道这两个问题的答案。我显然低估了问题的复杂性…我收到一条警告消息“运行命令C:\\Users\\Documents\\MediaInfo\\MediaInfo.exe teste.avi”状态为1我找不到解决方案。你以前遇到过这个问题吗?但是,如果我从CLI运行命令行,一切运行都很好,因此我假设它与MediaInfo无关。Cheers我在运行时得到错误:system(“C:\\Users\\Documents\\MediaInfo\\MediaInfo.exe teste.avi”,intern=TRUE)@PatraoPedro是
teste.avi
中的
getwd()
?我尝试了两种不同的方法,一种是test.avi在MediaInfo文件夹中wolf@PatraoPedro将工作目录设置为teste.avi所在的位置,然后重试。