检测文件是否是Python中的视频?

时间:2013-07-25 19:01:57

标签: python video file-upload mime-types

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

我需要能够支持没有扩展名的视频。我原以为mimetypes库可以做到这一点,但是当我做以下事情时:

import mimetypes

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

我明白了:

(None, None)

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

2 个答案:

答案 0 :(得分:1)

在UNIX系统上,存在用于标识文件的程序。它被称为file并匹配纯文本数据库中的模式。

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

否则,最好的方法是下载签名数据库。你可以找到,例如FreeBSD for videos在线使用的那个。 tha文件格式的文档是also online

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

答案 1 :(得分: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)'