shell 使用Linux的“file”命令来确定类型(即图像、音频或视频)

hpxqektj  于 2023-08-07  发布在  Shell
关注(0)|答案(3)|浏览(152)

这里的单词file指的是shell file命令,而不是实际的文件。例如,我想确定文件是否是视频文件(.mpg.mkv.avi)。file在返回image(图像文件)、video(视频文件)和audio(音频文件)(以及application/x-empty(出于某种原因))方面非常出色。我的问题是这对于识别类型有多可靠。如果我做一个简单的

file -ib deliverance.avi | grep video

字符串
这是否适用于这里列出的所有主要视频文件?

4uqofj5v

4uqofj5v1#

file的结果并不完美,它对某些类型的文件的问题比其他类型的多。文件基本上只是以可预测的模式查找特定的二进制数据片段,以确定文件类型。
不幸的是,特别是,一些经常用于视频的文件类型属于这种“有问题”的类别。较新的容器格式(如.mp4.mkv)通常有几种不同的MIME类型,这些类型应该正确地取决于所包含的数据类型。例如,.mp4可以根据内容正确地标识为video/mp4audio/mp4application/mp4
在实践中,file经常进行一些猜测,这些猜测只是符合一般的用法,而且它可能非常适合您。例如,虽然我提到了正确识别Matroska文件的一些理论困难,但file基本上只是假设任何Matroska文件都是视频。另一方面,Ogg容器的使用在音频和视频之间分配得更均匀,我相信当前版本的file只是将差异分开,并将Ogg文件标识为application/ogg,这不会落入您的任何类别。
有一件事我可以肯定的是,你想要最新版本的file,你可以得到你的手。包含要匹配的模式和匹配结果的MIME类型的“魔法”文件经常更新,以包含WebM等较新的文件类型,或者只是为了提高旧类型的准确性。

cuxqih21

cuxqih212#

文件的工作原理是引用一个“幻数”文件的文件头。我怀疑最好的方法是检查你的本地magic number文件(可能是/usr/share/magic,但请参阅man file了解详细信息),以查看你引用的列表中的文件类型。

yh2wf1be

yh2wf1be3#

它似乎应该适用于大多数视频/音频/图像文件。但是,如果没有,实际上有一个文件包含扩展名和类型之间的关系:
标识这些文件的信息从编译后的magic文件/usr/share/magic.mgc读取,如果编译文件不存在,则从/usr/share/magic读取。
请参阅:http://linux.about.com/library/cmd/blcmdl1_file.htm
希望这对你有帮助!

相关问题