{ "info": { "author": "Pierre V. Villeneuve", "author_email": "pierre.villeneuve@gmail.com", "bugtrack_url": null, "classifiers": [], "description": "# NutMeg\n\nA collection of simple video processing tools. Nice Python classes and functions \nthat wrap practical predefined ffmpeg commands.\n\n\n## Example NutmegClip\n\n```python\nf = '/home/Videos/GoPro/Malibu/GOPR6248.MP4'\n\np = NutmegProbe()\np.probe(f)\n\nprint('\\nOriginal file: {}'.format(os.path.basename(f)))\nprint('Original duration: {}'.format(p.results.container.duration))\n\ntime_start = 0\ntime_stop = 0.5*p.results.container.duration\n\nc = NutmegClip()\nc.clip(f, time_start, time_stop)\n\nprint('\\nClip file: {}'.format(os.path.basename(c.results.fname_out)))\n\np = NutmegProbe()\np.probe(c.results.fname_out)\n\nprint('Clip duration: {}'.format(p.results.container.duration))\n\n```\n\nThe above example yields the following output:\n\n```text\nOriginal file: GOPR6248.MP4\nOriginal duration: 40.323617\n\nClip file: GOPR6248.clip-0.00-20.16.mp4\nClip duration: 20.182\n\n```\n\n\n## Example NutmegProbe\n\n```python\nf = '/home/Videos/GoPro/Malibu/GOPR6248.MP4'\n\np = NutmegProbe()\np.probe(f)\n\nprint('\\nContainer:')\nIPython.display.display(p.results.container)\n\nfor s in p.results.streams:\n print('\\nStream {}:'.format(s.index))\n IPython.display.display(s)\n```\n\nRunning the above sample code yields the following output:\n\nContainer:\n```python\n{'bit_rate': '24243114',\n 'duration': '40.323617',\n 'filename': '/home/Videos/GoPro/Malibu/GOPR6248.MP4',\n 'format_long_name': 'QuickTime / MOV',\n 'format_name': 'mov,mp4,m4a,3gp,3g2,mj2',\n 'nb_programs': 0,\n 'nb_streams': 3,\n 'probe_score': 100,\n 'size': '122196256',\n 'start_time': '0.000000',\n 'tags': {'compatible_brands': 'avc1isom',\n 'creation_time': '2014-07-06T15:20:02.000000Z',\n 'major_brand': 'avc1',\n 'minor_version': '0'}}\n```\n\nStream 0:\n```python\n{'avg_frame_rate': '60000/1001',\n 'bit_rate': '23967131',\n 'bits_per_raw_sample': '8',\n 'chroma_location': 'left',\n 'codec_long_name': 'H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10',\n 'codec_name': 'h264',\n 'codec_tag': '0x31637661',\n 'codec_tag_string': 'avc1',\n 'codec_time_base': '1001/120000',\n 'codec_type': 'video',\n 'coded_height': 1080,\n 'coded_width': 1920,\n 'color_primaries': 'bt709',\n 'color_range': 'pc',\n 'color_space': 'bt709',\n 'color_transfer': 'bt709',\n 'display_aspect_ratio': '16:9',\n 'disposition': {'attached_pic': 0,\n 'clean_effects': 0,\n 'comment': 0,\n 'default': 1,\n 'dub': 0,\n 'forced': 0,\n 'hearing_impaired': 0,\n 'karaoke': 0,\n 'lyrics': 0,\n 'original': 0,\n 'visual_impaired': 0},\n 'duration': '40.323617',\n 'duration_ts': 2419417,\n 'has_b_frames': 1,\n 'height': 1080,\n 'index': 0,\n 'is_avc': 'true',\n 'level': 42,\n 'nal_length_size': '4',\n 'nb_frames': '2417',\n 'pix_fmt': 'yuvj420p',\n 'profile': 'Main',\n 'r_frame_rate': '60000/1001',\n 'refs': 1,\n 'sample_aspect_ratio': '1:1',\n 'start_pts': 0,\n 'start_time': '0.000000',\n 'tags': {'creation_time': '2014-07-06T15:20:02.000000Z',\n 'encoder': 'GoPro AVC encoder',\n 'handler_name': '\\rGoPro AVC',\n 'language': 'eng',\n 'timecode': '15:19:06:51'},\n 'time_base': '1/60000',\n 'width': 1920}\n```\n\nStream 1:\n```python\n{'avg_frame_rate': '0/0',\n 'bit_rate': '128040',\n 'bits_per_sample': 0,\n 'channel_layout': 'stereo',\n 'channels': 2,\n 'codec_long_name': 'AAC (Advanced Audio Coding)',\n 'codec_name': 'aac',\n 'codec_tag': '0x6134706d',\n 'codec_tag_string': 'mp4a',\n 'codec_time_base': '1/48000',\n 'codec_type': 'audio',\n 'disposition': {'attached_pic': 0,\n 'clean_effects': 0,\n 'comment': 0,\n 'default': 1,\n 'dub': 0,\n 'forced': 0,\n 'hearing_impaired': 0,\n 'karaoke': 0,\n 'lyrics': 0,\n 'original': 0,\n 'visual_impaired': 0},\n 'duration': '40.320000',\n 'duration_ts': 1935360,\n 'index': 1,\n 'nb_frames': '1890',\n 'profile': 'LC',\n 'r_frame_rate': '0/0',\n 'sample_fmt': 'fltp',\n 'sample_rate': '48000',\n 'start_pts': 0,\n 'start_time': '0.000000',\n 'tags': {'creation_time': '2014-07-06T15:20:02.000000Z',\n 'handler_name': '\\rGoPro AAC',\n 'language': 'eng',\n 'timecode': '15:19:06:51'},\n 'time_base': '1/48000'}\n```\n\nStream 2:\n```python\n{'avg_frame_rate': '60/1',\n 'codec_tag': '0x64636d74',\n 'codec_tag_string': 'tmcd',\n 'codec_type': 'data',\n 'disposition': {'attached_pic': 0,\n 'clean_effects': 0,\n 'comment': 0,\n 'default': 1,\n 'dub': 0,\n 'forced': 0,\n 'hearing_impaired': 0,\n 'karaoke': 0,\n 'lyrics': 0,\n 'original': 0,\n 'visual_impaired': 0},\n 'duration': '40.323617',\n 'duration_ts': 2419417,\n 'index': 2,\n 'nb_frames': '1',\n 'r_frame_rate': '0/0',\n 'start_pts': 0,\n 'start_time': '0.000000',\n 'tags': {'creation_time': '2014-07-06T15:20:02.000000Z',\n 'language': 'eng',\n 'timecode': '15:19:06:51'},\n 'time_base': '1/60000'}\n```\n\n\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/Who8MyLunch/NutMeg", "keywords": "video,ffmpeg,intra,clip,probe", "license": "", "maintainer": "", "maintainer_email": "", "name": "nutmeg", "package_url": "https://pypi.org/project/nutmeg/", "platform": "", "project_url": "https://pypi.org/project/nutmeg/", "project_urls": { "Homepage": "https://github.com/Who8MyLunch/NutMeg" }, "release_url": "https://pypi.org/project/nutmeg/2018.1.12/", "requires_dist": [ "sarge", "ordered-namespace" ], "requires_python": "", "summary": "Simple video processing tools using Python with fmpeg", "version": "2018.1.12" }, "last_serial": 3485422, "releases": { "2017.3.27": [ { "comment_text": "", "digests": { "md5": "7ad0bc3064a2b021dec62a08279e6e18", "sha256": "2860342394e3cce1dbcba0d95458f1ac68dbcd97e13d2fb548645f8ca6a3f5b4" }, "downloads": -1, "filename": "nutmeg-2017.3.27-py3-none-any.whl", "has_sig": false, "md5_digest": "7ad0bc3064a2b021dec62a08279e6e18", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9948, "upload_time": "2017-03-26T18:38:48", "url": "https://files.pythonhosted.org/packages/1b/20/ef218e34cbc8c45cbbca2f045a7460aa7c3f260c8cd6fd0c8558a4749e6b/nutmeg-2017.3.27-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c0936327c666ab4eccb0ceb53bad8fd1", "sha256": "dd179f02573e83230f00883e79b5a85bfd3a9a75415a9d060d90e92e055b9325" }, "downloads": -1, "filename": "nutmeg-2017.3.27.tar.gz", "has_sig": false, "md5_digest": "c0936327c666ab4eccb0ceb53bad8fd1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8062, "upload_time": "2017-03-26T18:38:50", "url": "https://files.pythonhosted.org/packages/3d/56/3d645f475f53f1fe68c759f1ef26ae96c46b3b2b2ccc49ff2a05dac5c3fc/nutmeg-2017.3.27.tar.gz" } ], "2017.7.22": [ { "comment_text": "", "digests": { "md5": "ea99eb8e507528420716dcd7dc9a9c3b", "sha256": "785de440fe3e58ce2f7b3833b17e09c12e90af72eca11ecc050b5a6f292e5561" }, "downloads": -1, "filename": "nutmeg-2017.7.22-py3-none-any.whl", "has_sig": false, "md5_digest": "ea99eb8e507528420716dcd7dc9a9c3b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5689, "upload_time": "2017-07-22T19:31:12", "url": "https://files.pythonhosted.org/packages/94/0f/279716e5fd5af1871c0120aada026eaadaa5d4f1d17a2f86b43a6d95f2f8/nutmeg-2017.7.22-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "96f88861e90af63014efd6705d5afec0", "sha256": "2ac9b6f5e0f8a940a79848d51e737a4b15a48ba215c81e49204296d9104e6e37" }, "downloads": -1, "filename": "nutmeg-2017.7.22.tar.gz", "has_sig": false, "md5_digest": "96f88861e90af63014efd6705d5afec0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4431, "upload_time": "2017-07-22T19:31:14", "url": "https://files.pythonhosted.org/packages/d3/44/454dbb9cb9c533a32d6a4e5952279fa4c44c31fe03d7319d282b0b44b407/nutmeg-2017.7.22.tar.gz" } ], "2017.7.30": [ { "comment_text": "", "digests": { "md5": "78339719f0f80a40df7219918f4b04d6", "sha256": "abddf8665d1dea1b1a461c7461a534443ed797c8adb975430a7bfba03dd8780d" }, "downloads": -1, "filename": "nutmeg-2017.7.30-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "78339719f0f80a40df7219918f4b04d6", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9113, "upload_time": "2017-07-30T22:26:28", "url": "https://files.pythonhosted.org/packages/4e/90/56c62566fdbd294d69108761f8ab18cf4baabfffcc9a17d1c6b7a1bf7aae/nutmeg-2017.7.30-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "46892dc4ad95676c7eac5dba5fac71d7", "sha256": "f0615988e6f93d912a2c93afc0aaccdc4ba1433f341d7d79d482005008fac7ee" }, "downloads": -1, "filename": "nutmeg-2017.7.30.tar.gz", "has_sig": false, "md5_digest": "46892dc4ad95676c7eac5dba5fac71d7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6256, "upload_time": "2017-07-30T22:26:30", "url": "https://files.pythonhosted.org/packages/84/4e/64878079cffd7364d322c4b6e32926d73bd00ebd65513bfb9b85a82636b8/nutmeg-2017.7.30.tar.gz" } ], "2018.1.12": [ { "comment_text": "", "digests": { "md5": "17541c9b0e52154170833ea11d9cd7a5", "sha256": "7f942e7251f2d66ef5d8ec8e9811188b71262026d3bab12a11415c95ac7646dc" }, "downloads": -1, "filename": "nutmeg-2018.1.12-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "17541c9b0e52154170833ea11d9cd7a5", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9151, "upload_time": "2018-01-12T21:33:53", "url": "https://files.pythonhosted.org/packages/ad/d6/a73bf242b5eb2c400a3af36c56e371231ca4cb4a56959bf91820032e939a/nutmeg-2018.1.12-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1f83bc8b3565e76e4e4e64d78cebc049", "sha256": "760d52b5000fe6e77139026637c05fbbce296120d3cedc684bdbab3815acb675" }, "downloads": -1, "filename": "nutmeg-2018.1.12.tar.gz", "has_sig": false, "md5_digest": "1f83bc8b3565e76e4e4e64d78cebc049", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6772, "upload_time": "2018-01-12T21:33:55", "url": "https://files.pythonhosted.org/packages/bd/0c/81b68e6b1f5ea27b31a54bd132a17fd01a49c0d5cefdc0f02c5d48e4e914/nutmeg-2018.1.12.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "17541c9b0e52154170833ea11d9cd7a5", "sha256": "7f942e7251f2d66ef5d8ec8e9811188b71262026d3bab12a11415c95ac7646dc" }, "downloads": -1, "filename": "nutmeg-2018.1.12-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "17541c9b0e52154170833ea11d9cd7a5", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9151, "upload_time": "2018-01-12T21:33:53", "url": "https://files.pythonhosted.org/packages/ad/d6/a73bf242b5eb2c400a3af36c56e371231ca4cb4a56959bf91820032e939a/nutmeg-2018.1.12-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1f83bc8b3565e76e4e4e64d78cebc049", "sha256": "760d52b5000fe6e77139026637c05fbbce296120d3cedc684bdbab3815acb675" }, "downloads": -1, "filename": "nutmeg-2018.1.12.tar.gz", "has_sig": false, "md5_digest": "1f83bc8b3565e76e4e4e64d78cebc049", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6772, "upload_time": "2018-01-12T21:33:55", "url": "https://files.pythonhosted.org/packages/bd/0c/81b68e6b1f5ea27b31a54bd132a17fd01a49c0d5cefdc0f02c5d48e4e914/nutmeg-2018.1.12.tar.gz" } ] }