2011-11-12 82 views
10

這裏所說的file指外殼file命令,而不是實際的文件。我想確定文件是否是例如視頻文件(.mpg.mkv.avi)。 file是在返回的音頻文件image圖像文件,video視頻文件,並audio(和application/x-empty出於某種原因文本)相當不錯。我的問題是這是如何可靠的識別類型。如果我做了一個簡單的使用Linux的「文件」命令來確定型(即圖像,音頻或視頻)

file -ib deliverance.avi | grep video 

將所有主要視頻文件的工作概述here

回答

9

file的結果是不完美的,它有更多的問題與某些類型比其他文件。文件基本上只是以可預測的模式查找特定的二進制數據以找出文件類型。

不幸的是,特別是,一些文件類型的通常用於視頻落入這個「問題」的範疇。較新的容器格式(如.mp4.mkv)通常具有幾種不同的MIME類型,這些類型應適當地取決於所包含的數據類型。例如,根據內容,.mp4可以正確識別爲video/mp4audio/mp4application/mp4

在實踐中,file常使簡單地與普通的使用都符合猜測,它可能很好的工作適合你。例如,雖然我提到了正確識別Matroska文件的一些理論上的困難,但是file基本上只是假設任何Matroska文件都是視頻。另一方面,Ogg容器在音頻和視頻之間的使用更均勻,我相信當前版本的file只是將差異分開,並將Ogg文件標識爲application/ogg,這些文件不屬於您的任何類別。

有一件事我可以肯定地說是要最先進的最新版本的file,你可以把你的手。包含要匹配的模式的「魔術」文件以及匹配產生的MIME類型會經常更新以包含像WebM這樣的新文件類型,或者僅用於提高舊類型的準確性。

+0

你能提供一些建議/鏈接,以便如何使這更準確嗎?關閉我的頭頂,也許使用[PHP函數](http://php.net/manual/en/function.exif-imagetype.php)檢查文件擴展名。像YouTube這樣的網站肯定會解決這個問題。謝謝 – puk

+0

我的意思並不是消極的。 'file'可能與你將要獲得的一樣好。如果你想確定某些擴展是以某種方式檢測到的(或者抵消你在實踐中遇到的問題),你也可以檢查擴展名。 –

+0

我做了初步測試,文件非常準確。當然,要獲得25,000個不同視頻文件的可靠樣本並不容易。 – puk

1

文件通過引用文件頭對「幻數」文件進行工作。我懷疑最好的方法是看你的引用列表中的文件類型是多麼健壯的文件檢查你的本地魔術數字文件(可能是/ usr/share/magic,但請參閱man文件的詳細信息)。

1

它似乎應該適用於大多數視頻/音頻/圖像文件。但是,如果沒有,實際上是一個包含一個擴展之間關係的文件,它的類型:

識別這些文件中的信息是從編譯magic文件讀取/usr/share/magic.mgc,或者如果編譯文件不存在,則/ usr/share/magic。

見: http://linux.about.com/library/cmd/blcmdl1_file.htm

希望這有助於!

相關問題