【问题标题】:Detecting if a file is a video in Python?检测文件是否是 Python 中的视频?
【发布时间】:2013-07-25 19:01:57
【问题描述】:

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

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

import mimetypes

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

我明白了:

(None, None)

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

【问题讨论】:

标签: python video file-upload mime-types


【解决方案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)' 

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-03
      • 1970-01-01
      • 2011-03-11
      • 1970-01-01
      • 1970-01-01
      • 2011-10-02
      • 1970-01-01
      • 2017-08-17
      相关资源
      最近更新 更多