2011-11-12 4 views
10

ここではfileという単語は実際のファイルではなくfileというコマンドを指します。私は、ファイルが例えばビデオファイル(.mpg.mkv.avi)であるかどうかを判断したいと思います。 fileは、イメージファイルの場合はimage、ビデオファイルの場合はvideo、オーディオファイルの場合はaudio(何らかの理由でテキストの場合はapplication/x-empty)を返すのにかなり良いです。私の質問は、これがどのようにタイプを識別するための信頼性です。私はシンプルLinuxの 'file'コマンドを使用してタイプ(イメージ、オーディオ、またはビデオ)を確認する

file -ib deliverance.avi | grep video 

をした場合メインビデオファイルのすべてのためのその仕事はhereを概説でしょうか?

答えて

9

fileの結果は完全ではなく、いくつかの種類のファイルでは他のものよりも多くの問題があります。ファイルは、基本的に、予測可能なパターンのバイナリデータの特定の部分を検索してファイルタイプを特定します。

特に、ビデオによく使用されるファイルタイプの中には、この「問題のある」カテゴリに分類されるものがあります。 .mp4.mkvのような新しいコンテナ形式には、通常、含まれるデータの種類に応じて適切に異なる複数のMIMEタイプがあります。例えば、.mp4は、内容に応じてvideo/mp4,audio/mp4、またはapplication/mp4と適切に識別することができます。

実際には、fileは、一般的な使用法に準拠した推測を行うことが多く、完全にうまくいく可能性があります。たとえば、Matroskaファイルを正しく特定することで理論的な困難を述べたが、fileは基本的にMatroskaファイルがビデオであると仮定している。一方、Oggコンテナの使い方はオーディオとビデオの間でより均等に分かれています。私はfileの現在のバージョンで違いを分けるだけで、Oggファイルはapplication/oggであると認識しています。

確かに私が言うことの1つは、最新のバージョンの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

ほとんどのビデオ/オーディオ/画像ファイルでうまくいくようです。 、これらのファイルを特定する情報は、コンパイル済みのマジックファイル/usr/share/magic.mgcから読み込まれ

:そうでない場合でも、そこに拡張子の間の関係が含まれているファイルは実際だとそれがタイプですコンパイルファイルが存在しない場合は/ usr/share/magicとなります。

参照: http://linux.about.com/library/cmd/blcmdl1_file.htm

は、この情報がお役に立てば幸い!

関連する問題