pymdeco-python元数据提取器和集合管理器库

pymdeco的Python项目详细描述


pymdeco-python元数据提取和收集管理器

Pymdeco是一个旨在促进元数据提取的库, 大量照片和多媒体的存储和操作 (音频和视频)文件。 而不是为大量的文件开发自己的元数据解析器 类型,它依赖于第三方库和工具来提取 文件中的元数据。

示例用法

视频文件示例:

>>> from pymdeco import services
>>> srv = services.FileMetadataService()
>>> meta = srv.get_metadata('/tests/big_buck_bunny_720p_surround.avi')
>>> print(meta.to_json(indent=2)) # to pretty print the metadata
{
  "file_name": "big_buck_bunny_720p_surround.avi",
  "file_type": "video",
  "file_size": 332243668,
  "mime_type": "video/x-msvideo",
  "file_hash": {
    "value": "b957d6e6212638441b52d3b620af157cc8d40c2a0342669294854a06edcd528c",
    "algorithm": "sha256"
  },
  "file_timestamps": {
    "modified": "2008-06-11 13:29:26",
    "created": "2008-06-11 13:29:26"
  },
  "video_metadata": {
    "streams": [
      {
        "sample_aspect_ratio": "1:1",
        "codec_type": "video",
        "codec_name": "mpeg4",
        "duration": "596.457",
        "nb_frames": "14315",
        "codec_time_base": "1/24",
        "index": 0,
        "width": 1280,
        "divx_packed": "0",
        "pix_fmt": "yuv420p",
# ... output truncated

音频文件示例:

>>> meta = srv.get_metadata('/tests/jonobacon-freesoftwaresong2.mp3')
>>> print(meta.to_json(indent=2)) # to pretty print the metadata
{
  "file_name": "jonobacon-freesoftwaresong2.mp3",
  "file_type": "audio",
  "file_size": 3169160,
  "mime_type": "audio/mpeg",
  "file_hash": {
    "value": "d7ebc161d5d8fb802659fea949204af2958906b91913ca7577cfaeece90ffb78",
    "algorithm": "sha256"
  },
  "file_timestamps": {
    "modified": "2012-01-09 20:02:23",
    "created": "2012-01-09 20:02:23"
  },
  "audio_metadata": {
    "streams": [
      {
        "index": 0,
        "sample_fmt": "s16",
        "codec_tag": "0x0000",
        "bits_per_sample": 0,
        "r_frame_rate": "0/0",
        "start_time": "0.000",
        "time_base": "1/14112000",
        "codec_tag_string": "[0][0][0][0]",
        "codec_type": "audio",
        "channels": 2,
        "codec_long_name": "MP3 (MPEG audio layer 3)",
        "codec_name": "mp3",
... # output truncated

图像文件示例:

>>> meta = srv.get_metadata('/tests/some_image.jpg')
>>> print(meta.to_json(indent=2)) # to pretty print the metadata
{
  "file_name": "some_image.jpg",
  "file_type": "image",
  "file_size": 159894,
  "mime_type": "image/jpeg",
  "file_hash": {
    "value": "844a8750f2c9e1a24175c8f158abb6d204ec2b79fc49aba512cded3cdb3a0111",
    "algorithm": "sha256"
  },
  "file_timestamps": {
    "modified": "2012-01-09 20:43:12",
    "created": "2012-01-09 20:43:12"
  },
  "image_metadata": {
    "Exif": {
      "Photo": {
        "LightSource": 0,
        "PixelXDimension": 900,
        "SubSecTime": "16",
    # ... output truncated ... Image details follow
      "Image": {
        "YResolution": 72,
        "ResolutionUnit": 2,
        "Orientation": 1,
        "Copyright": "Some Rights Reserved                                  ",
        "Artist": "Yovko Lambrev                       ",
        "Make": "NIKON CORPORATION",
        "DateTime": "2008-09-13 11:26:41",
    # ... output truncated ... XMP details follow
    "Xmp": {
      "iptc": {
        "CreatorContactInfo/Iptc4xmpCore:CiEmailWork": "yovko@simplestudio.org",
        "CreatorContactInfo/Iptc4xmpCore:CiAdrCity": "Sofia",
        "CreatorContactInfo/Iptc4xmpCore:CiUrlWork": "http://simplestudio.org",
        "CreatorContactInfo/Iptc4xmpCore:CiAdrCtry": "Bulgaria"
    # ... output truncated ... IPTC details follow
    "Iptc": {
      "Application2": {
        "CountryName": "['Bulgaria']",
        "Byline": "['Yovko Lambrev']",
        "BylineTitle": "['Photographer']",
    # ... output truncated

二进制文件示例:

>>> meta = srv.get_metadata('/tests/minimal_ubuntu_11.04_natty.iso')
>>> print(meta.to_json(indent=2)) # to pretty print the metadata
{
  "file_name": "minimal_ubuntu_11.04_natty.iso",
  "file_type": "application",
  "file_size": 19922944,
  "mime_type": "application/x-iso9660-image",
  "file_hash": {
    "value": "8607e2c06090db13b06a216efbeb65d7aeff4ca8666904e6874cf4a5960f2366",
    "algorithm": "sha256"
  },
  "file_timestamps": {
    "modified": "2011-05-02 17:24:18",
    "created": "2011-05-02 17:24:18"
  }
}

命令行工具示例:

python metadump.py -p /some/path

安装

获取最新的开发版本:

hg clone https://bitbucket.org/todor/pymdeco

从源安装:

python setup.py install

生成HTML文档:

python setup.py build_doc

如果安装成功,可以使用以下代码 确认安装正常且存在所有依赖项:

检查依赖项:

>>> from pymdeco.utils import check_dependencies
>>> print json.dumps(check_dependencies(), indent=2)
{
  "pyexiv2": "pyexiv2: 0.3.2",
  "ffprobe": "/usr/bin/ffprobe"
}

如果任何字典值都不是,则pymdeco无法找到 一些依赖关系。

依赖性

  • python 2.7+或python 3.2+
  • pyexiv2库(这是python向 exiv2)。它用于从照片中提取EXIFXMPIPTC标记 以及图像(jpeg、png、gif等)。
  • ffprobe二进制(来自ffmpeg套件0.9.0或更高版本) 位于系统路径中。ffprobe的旧版本 (0.9.x之前版本)无法以JSON格式输出。
  • 狮身人面像(>;=1.0.0)-用于构建文档

注意

安装库1后,请确保 ffprobe可执行文件已安装并可供库使用 (可执行文件必须位于 路径环境变量。

有关安装ffmpeg套件的最佳方式,请参阅ffmpeg下载页 (它是ffprobe的一部分)。 在windows下,建议使用程序的静态版本。

文档

下载源代码并构建文档(请参见 Installation部分)将创建api文档的html版本。 文档包括教程,其中包含 展示如何使用和进一步扩展它的库和示例。

许可证

Pymdeco根据GNU LGPL(较低的通用公共许可证)版本3或 稍后。有关详细信息,请参阅源代码中包含的license.txt 分配。

开发和参与

这个库还处于早期阶段,但已经能够做足够有用的工作 元数据集合。如果你有兴趣进一步改进它 若要参与,请发送邮件至位于googlegroups.com的pymdeco。

历史和未来方向

这个图书馆是为了管理大量的照片而建立的 (数万)和视频片段(数千)收集在 不同来源和不同模式创造的时间段 照相机、摄像机和摄像头。

我很快发现,要识别重复项并有效地管理 备份我需要良好和可靠的元数据处理和存储。 在试验了六个python包和工具之后,我决定 利用成熟的第三方构建通用api 库和外部工具。

到目前为止,只有元数据提取部分已经基本完成,但是 为元数据开发某种持久性存储 路线图(包括使用mongodb或sqlite作为潜在的后端)。这个 持久存储将用于使用元数据构建集合,然后 结构查询“此文件是否已在集合中”、“是否存在” 集合中有一个类似的文件,“使用此元数据标记获取所有文件”或 “列出同一设备在同一日期创建的所有文件”。

有关详细信息,请参见todo.txt。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java什么是RuleContext类实现中的invokingState?   如何将Scala Seq传递给Java varargs   ELK在ubuntu上升级到最新版本后仍提示升级java版本   java如何实现服务器关闭   类型为java的0上的安卓。无法将lang.String转换为JSONArray   java如何在通过Selenium登录时避免验证代码?   java同时下载文件并上传到别处(转发文件)   java jodatime 1.6.2 jar未从maven central repository下载   java OpenGL ES 2.0屏幕滚动:translate vs.setLookatM   安卓 Java如何在另一个类中使用活动方法   java CSVFormat。RFC4180忽略中引用的值。csv文件   从电话号码中分离数字的java   java找不到net。来源:福格。jtds。jdbc。Tomcat web应用程序中的驱动程序   java Red5无法解析bean引用   java忽略日志配置