2013-11-22 188 views
1

我正在創建一個代碼來刪除一些我不需要的視頻文件。這些視頻來自CCTV鏡頭,並且他們每天24小時記錄一次。但是,記錄視頻的軟件將文件保存在〜1小時的視頻中,這是問題(不是精確的持續時間)。我只對保持一天中某個特定部分的視頻感興趣(因爲視頻持續時間不同),並且視頻的持續時間不準確,這會導致我遇到問題。使用R檢索視頻文件持續時間(時間)

視頻文件名有一個日期和時間戳,但只用於開始,所以如果我能找到持續時間一切都變成了簡單的代數。

所以我的問題很簡單,是有可能獲得使用R的視頻文件的持續時間(時間)?

只是一些其他有用的信息視頻是從幾個攝像頭和每個攝像頭作爲不同的錄製幀速率,所以使用file.info來返回文件大小和導出視頻長度不是一個選項。此外,視頻文件爲.avi格式。

乾杯 Patrao

+0

您可以編寫一個VirtualDub腳本並在每個文件上運行該腳本? –

+0

如果你在Linux上,試試http://askubuntu.com/questions/303454/get-information-about-a-video-from-command-line-tool –

+0

@羅曼不幸的是,我不能寫VirtualDub代碼和我在Windows 7系統上。 – PatraoPedro

回答

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" 

玩得開心解析時間。

+0

我收到一條警告消息「運行命令C:\\ Users \\ Documents \\ MediaInfo \\ MediaInfo.exe teste.avi」的狀態爲1「,我無法找到解決方案。但是如果我從CLI運行命令strait,那麼所有的運行都很好,所以我假設它不是MediaInfo相關的。乾杯 – PatraoPedro

+0

@PatraoPedro你用什麼命令來運行它? –

+0

我運行時遇到了以下錯誤:system(「C:\\ Users \\ Documents \\ MediaInfo \\ MediaInfo.exe teste.avi」,intern = TRUE) – PatraoPedro

1

這可能是有點低的水平,但如果你達到解析二進制數據的任務,擡頭看AVI規範的副本,並找出如何讓這兩個數的視頻幀和幀速率。

如果您使用十六進制編輯器查看其中一個AVI文件,您將在開始時看到一系列LIST塊。稍微遠離這個塊將是一個vids大塊。緊接在vids之後的應該是指定視頻編解碼器的人類可讀視頻四字符代碼(FourCC),對於相機可能類似mjpg(MJPEG)或avc1(H.264)。之後的20個字節將以指示幀速率的小端符號存儲4個字節。跳過另外4個字節,然後接下來的4個字節將是另一個小尾數,表示視頻幀的總數。

我正在查看一個示例AVI文件,其中的數字是:幀率= 24和幀數= 0x37EB = 14315。這可以達到9m56s,這對於該文件來說是準確的。