1

是否有任何 Python 库可用于检测文件是否为视频?我让用户将视频上传到我的网站,并且我想阻止图像和文档以及除视频文件类型之外的任何内容。我现在计划上传任何文件,对其进行测试,如果不是视频,请删除它,是否通过正常管道处理它。我很想以某种方式测试损坏的视频,但那是另一回事。

我需要能够支持没有扩展的视频。我曾认为 mimetypes 库可以做到这一点,但是当我执行以下操作时:

import mimetypes

url = 'http://thehighlightnetwork.appspot.com/serve/AMIfv94NsD5mUOwE60RnMSsBKVUsgilNyNJZawl30CRqVnLad7HkNeMmdBQCMhiAOXc0N9onNGjAM19TTVENEPjAwpeQZ6dq25CWjD5DzQXoK0c4IaPum_L-83EQS4SeUNqOCEYleHTskfkhfC8BXZJQtlyA99g2nN9lrfCXWrNGYPtjDeZETEQ'
print mimetypes.guess_type(url)

我得到:

(None, None)

我正在使用 Google App Engine,所以我拥有所有内置库,但也可以添加几乎任何东西。

4

2 回答 2

1

在 UNIX 系统上,存在一个用于识别文件的程序。它被调用file并匹配来自纯文本数据库的模式。

如果 google app-engine 允许您访问 libmagic(我对此表示怀疑,但我不熟悉它),您可以安装python-magic来使用它。

否则,可能最好的方法是下载签名数据库。您可以找到例如 FreeBSD用于在线视频的那个。tha 文件格式的文档也在线

使用这些签名,您应该能够通过读取文件的开头并将其与签名匹配来检测文件的类型。

于 2013-07-25T19:33:34.410 回答
1

安装python-magic,独立于操作系统

pip install python-magic

Windows 和 OSX 的依赖项

在 Windows 上,您需要在 C:\Windows\System32 下下载并保存以下库:

regex2.dll from sourceforge.net/projects/gnuwin32/files/regex/
zlib1.dll from sourceforge.net/projects/gnuwin32/files/zlib/
magic1.dll from sourceforge.net/projects/gnuwin32/files/file/

在 OSX 上:

When using Homebrew: brew install file-formula
When using macports: port install file

然后在python中执行代码:

import magic
magic.from_file("path/to/file/filename.extension")

# usage example
magic.from_file("test/test.avi", mime=True)

有关更多详细信息,请参阅Python-Magic

我跑时的输出:

>>> import magic

>>> magic.from_file("test.avi")
'RIFF (little-endian) data, AVI, 320 x 240, 25.00 fps, video: XviD, audio: MPEG-1 Layer 3 (stereo, 22050 Hz)' 
于 2013-07-25T19:41:19.493 回答