{ "info": { "author": "Todor Bukov", "author_email": "dev.todor@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Environment :: Plugins", "Intended Audience :: Developers", "Intended Audience :: End Users/Desktop", "Intended Audience :: System Administrators", "License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL)", "Operating System :: Microsoft :: Windows", "Operating System :: OS Independent", "Operating System :: POSIX", "Operating System :: Unix", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.2", "Programming Language :: Python :: Implementation :: CPython", "Topic :: Multimedia", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "PyMDECO - Python Meta Data Extractor and Collection Organizer\n=============================================================\n\nPyMDECO is a library which aims to facilitate the metadata extraction,\nstorage and manipulation of a large collection of photos and multimedia\n(audio and video) files.\nRather than developing own metadata parsers for the multitude of file\ntypes, it depends on third-party libraries and tools to extract the\nmetadata from the files.\n\n\nExample usage\n--------------\n\nExample with a video file:\n\n >>> from pymdeco import services\n >>> srv = services.FileMetadataService()\n >>> meta = srv.get_metadata('/tests/big_buck_bunny_720p_surround.avi')\n >>> print(meta.to_json(indent=2)) # to pretty print the metadata\n {\n \"file_name\": \"big_buck_bunny_720p_surround.avi\", \n \"file_type\": \"video\", \n \"file_size\": 332243668, \n \"mime_type\": \"video/x-msvideo\", \n \"file_hash\": {\n \"value\": \"b957d6e6212638441b52d3b620af157cc8d40c2a0342669294854a06edcd528c\", \n \"algorithm\": \"sha256\"\n }, \n \"file_timestamps\": {\n \"modified\": \"2008-06-11 13:29:26\", \n \"created\": \"2008-06-11 13:29:26\"\n }, \n \"video_metadata\": {\n \"streams\": [\n {\n \"sample_aspect_ratio\": \"1:1\", \n \"codec_type\": \"video\", \n \"codec_name\": \"mpeg4\", \n \"duration\": \"596.457\", \n \"nb_frames\": \"14315\", \n \"codec_time_base\": \"1/24\", \n \"index\": 0, \n \"width\": 1280, \n \"divx_packed\": \"0\", \n \"pix_fmt\": \"yuv420p\", \n # ... output truncated\n\n\nExample with an audio file:\n\n >>> meta = srv.get_metadata('/tests/jonobacon-freesoftwaresong2.mp3')\n >>> print(meta.to_json(indent=2)) # to pretty print the metadata\n {\n \"file_name\": \"jonobacon-freesoftwaresong2.mp3\", \n \"file_type\": \"audio\", \n \"file_size\": 3169160, \n \"mime_type\": \"audio/mpeg\", \n \"file_hash\": {\n \"value\": \"d7ebc161d5d8fb802659fea949204af2958906b91913ca7577cfaeece90ffb78\", \n \"algorithm\": \"sha256\"\n }, \n \"file_timestamps\": {\n \"modified\": \"2012-01-09 20:02:23\", \n \"created\": \"2012-01-09 20:02:23\"\n }, \n \"audio_metadata\": {\n \"streams\": [\n {\n \"index\": 0, \n \"sample_fmt\": \"s16\", \n \"codec_tag\": \"0x0000\", \n \"bits_per_sample\": 0, \n \"r_frame_rate\": \"0/0\", \n \"start_time\": \"0.000\", \n \"time_base\": \"1/14112000\", \n \"codec_tag_string\": \"[0][0][0][0]\", \n \"codec_type\": \"audio\", \n \"channels\": 2, \n \"codec_long_name\": \"MP3 (MPEG audio layer 3)\", \n \"codec_name\": \"mp3\", \n ... # output truncated\n\n\nExample with an image file:\n \n >>> meta = srv.get_metadata('/tests/some_image.jpg')\n >>> print(meta.to_json(indent=2)) # to pretty print the metadata\n {\n \"file_name\": \"some_image.jpg\", \n \"file_type\": \"image\", \n \"file_size\": 159894, \n \"mime_type\": \"image/jpeg\", \n \"file_hash\": {\n \"value\": \"844a8750f2c9e1a24175c8f158abb6d204ec2b79fc49aba512cded3cdb3a0111\", \n \"algorithm\": \"sha256\"\n }, \n \"file_timestamps\": {\n \"modified\": \"2012-01-09 20:43:12\", \n \"created\": \"2012-01-09 20:43:12\"\n }, \n \"image_metadata\": {\n \"Exif\": {\n \"Photo\": {\n \"LightSource\": 0, \n \"PixelXDimension\": 900, \n \"SubSecTime\": \"16\", \n \t# ... output truncated ... Image details follow\n \"Image\": {\n \"YResolution\": 72, \n \"ResolutionUnit\": 2, \n \"Orientation\": 1, \n \"Copyright\": \"Some Rights Reserved \", \n \"Artist\": \"Yovko Lambrev \", \n \"Make\": \"NIKON CORPORATION\", \n \"DateTime\": \"2008-09-13 11:26:41\", \n # ... output truncated ... XMP details follow\n \"Xmp\": {\n \"iptc\": {\n \"CreatorContactInfo/Iptc4xmpCore:CiEmailWork\": \"yovko@simplestudio.org\", \n \"CreatorContactInfo/Iptc4xmpCore:CiAdrCity\": \"Sofia\", \n \"CreatorContactInfo/Iptc4xmpCore:CiUrlWork\": \"http://simplestudio.org\", \n \"CreatorContactInfo/Iptc4xmpCore:CiAdrCtry\": \"Bulgaria\"\n \t# ... output truncated ... IPTC details follow \n \"Iptc\": {\n \"Application2\": {\n \"CountryName\": \"['Bulgaria']\", \n \"Byline\": \"['Yovko Lambrev']\", \n \"BylineTitle\": \"['Photographer']\", \n \t# ... output truncated\n\n\nExample with a binary file:\n\n >>> meta = srv.get_metadata('/tests/minimal_ubuntu_11.04_natty.iso')\n >>> print(meta.to_json(indent=2)) # to pretty print the metadata\n {\n \"file_name\": \"minimal_ubuntu_11.04_natty.iso\", \n \"file_type\": \"application\", \n \"file_size\": 19922944, \n \"mime_type\": \"application/x-iso9660-image\", \n \"file_hash\": {\n \"value\": \"8607e2c06090db13b06a216efbeb65d7aeff4ca8666904e6874cf4a5960f2366\", \n \"algorithm\": \"sha256\"\n }, \n \"file_timestamps\": {\n \"modified\": \"2011-05-02 17:24:18\", \n \"created\": \"2011-05-02 17:24:18\"\n }\n }\n\n\nExample with the command line tool::\n \n python metadump.py -p /some/path\n\n\n\nInstallation\n============\n\nGetting the latest development version::\n\n hg clone https://bitbucket.org/todor/pymdeco\n\n\nInstalling from source::\n\n python setup.py install\n\n\nGenerating the HTML documentation::\n\n python setup.py build_doc\n\n\nIf the installation is successfull the following code can be used to\nconfirm the installation is ok and all dependencies are present:\n\nChecking dependencies:\n\n >>> from pymdeco.utils import check_dependencies\n >>> print json.dumps(check_dependencies(), indent=2)\n {\n \"pyexiv2\": \"pyexiv2: 0.3.2\",\n \"ffprobe\": \"/usr/bin/ffprobe\"\n }\n\nIf any of the dictionary values are None, then PyMDECO is unable to find\nsome of the dependencies.\n\n\nDependencies\n-------------\n\n* Python 2.7+ or Python 3.2+\n* pyexiv2_ library (which is the Python bidnings to \n exiv2_). It is used to extract EXIF_, XMP_ and IPTC_ tags from photos\n and images (JPEG, PNG, GIF, etc).\n* **ffprobe** binary (from ffmpeg_ suite version 0.9.0 or later)\n located in the system's PATH. Older versions of the **ffprobe**\n (prior 0.9.x) cannot output in JSON format.\n* Sphinx (>= 1.0.0) - for building the documentation\n\n\n.. note::\n\n After the installation of the library one please ensure that\n **ffprobe** executable is installed and available to the library\n (the executable file must be available in one of the directories listed in\n PATH environmental variable.\n\n Refer to ffmpeg_ download page on the best way to install ffmpeg_ suite\n (which **ffprobe** is part of).\n Under Windows it is recommended to use the static version of the program.\n\n\nDocumentation\n=============\n\nDownloading the source and building the documentation (see\n`Installation`_ section) will create HTML version of the API documentation.\nThe documentation includes tutorial which contains high-level overview of the\nlibrary and examples showing how to use and extend it further.\n\n\nLicense\n=======\n\nPyMDECO is licenced under GNU LGPL (Lesser General Public License) version 3 or\nlater. For details please refer to LICENSE.txt included in the source\ndistribution.\n\n\nDevelopment and getting involved\n================================\n\nThis library is at early stage, but is already capable to do enough useful\nmetadata collection. If you are interested in improving it further and want\nto get involved, please send a mail to **pymdeco at googlegroups dot com**.\n\n\nHistory and future directions\n-----------------------------\n\nThe library was created out of necessity to manage large collection of photos\n(tens of thousands) and video clips (many thousands) collected over a large\nperiod of time from different sources and created by various models of\nphoto cameras, camcorders and webcams.\n\nI quickly found out that to identify duplicates and effectively manage the\nbackups I needed good and reliable metadata handling and storage.\nAfter experimenting with half a dozen Python packages and tools I settled\non building a common API which makes use of well-established third-party\nlibraries and external tools.\n\nSo far only the metadata extraction part has been mostly completed, but\ndevelopment of some sort of persistent storage for that metadata is on the\nroadmap (involving the usage of MongoDB or Sqlite as potential backends). This\npersistent storage will be used to build collections with metadata and then\nconstructing queries like \"is this file already in the collection\", \"is there\na *similar* file in the collection\", \"get all files with this metadata tag\" or\n\"list all the files created by the same device on the same date as this file\".\n\nSee TODO.txt for more details.\n\n\n.. _pyexiv2: http://tilloy.net/dev/pyexiv2/\n\n.. _exiv2: http://exiv2.org/\n\n.. _EXIF: http://en.wikipedia.org/wiki/Exchangeable_image_file_format\n\n.. _XMP: http://en.wikipedia.org/wiki/Extensible_Metadata_Platform\n\n.. _IPTC: http://en.wikipedia.org/wiki/Extensible_Metadata_Platform\n\n.. _ffmpeg: http://ffmpeg.org/", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://bitbucket.org/todor/pymdeco/", "keywords": null, "license": "GNU Lesser General Public License version 3 or later(LGPLv3)", "maintainer": null, "maintainer_email": null, "name": "pymdeco", "package_url": "https://pypi.org/project/pymdeco/", "platform": "any", "project_url": "https://pypi.org/project/pymdeco/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://bitbucket.org/todor/pymdeco/" }, "release_url": "https://pypi.org/project/pymdeco/0.1.1/", "requires_dist": null, "requires_python": null, "summary": "PyMDECO - Python Meta Data Extractor and Collection Organizer library", "version": "0.1.1" }, "last_serial": 797402, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "aa0e39a23b8f70276951261e28aaea76", "sha256": "dfda91bbf8a1257d6639f4d60bc7a0ad1b3cbbb349c5e3da00463b72748d0999" }, "downloads": -1, "filename": "pymdeco-0.1.0.zip", "has_sig": false, "md5_digest": "aa0e39a23b8f70276951261e28aaea76", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32121, "upload_time": "2012-01-13T22:51:36", "url": "https://files.pythonhosted.org/packages/aa/4e/ca9998e11c31900b491cf124130bd73ab1fb25fe9c9e3d39fade9e6a78e0/pymdeco-0.1.0.zip" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "83ddf39466146b518279b55509edb836", "sha256": "8663045430dcc2b10ec61418eb5e683ca0e2d768e3515476e211b5b247bb5b54" }, "downloads": -1, "filename": "pymdeco-0.1.1.zip", "has_sig": false, "md5_digest": "83ddf39466146b518279b55509edb836", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37951, "upload_time": "2012-01-29T18:38:09", "url": "https://files.pythonhosted.org/packages/95/90/c531e0bcb00dd1a7f72ec905ca8624f6abddeb57d578d1c8e37178018666/pymdeco-0.1.1.zip" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "83ddf39466146b518279b55509edb836", "sha256": "8663045430dcc2b10ec61418eb5e683ca0e2d768e3515476e211b5b247bb5b54" }, "downloads": -1, "filename": "pymdeco-0.1.1.zip", "has_sig": false, "md5_digest": "83ddf39466146b518279b55509edb836", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37951, "upload_time": "2012-01-29T18:38:09", "url": "https://files.pythonhosted.org/packages/95/90/c531e0bcb00dd1a7f72ec905ca8624f6abddeb57d578d1c8e37178018666/pymdeco-0.1.1.zip" } ] }