{ "info": { "author": "Adam Spannbauer", "author_email": "spannbaueradam@gmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3" ], "description": "# Python Video Stabilization \n\n[![Build Status](https://travis-ci.org/AdamSpannbauer/python_video_stab.svg?branch=master)](https://travis-ci.org/AdamSpannbauer/python_video_stab)\n[![codecov](https://codecov.io/gh/AdamSpannbauer/python_video_stab/branch/master/graph/badge.svg)](https://codecov.io/gh/AdamSpannbauer/python_video_stab)\n[![Maintainability](https://api.codeclimate.com/v1/badges/f3a17d211a2a437d21b1/maintainability)](https://codeclimate.com/github/AdamSpannbauer/python_video_stab/maintainability)\n[![PyPi version](https://pypip.in/v/vidstab/badge.png)](https://pypi.org/project/vidstab/)\n[![Last Commit](https://img.shields.io/github/last-commit/AdamSpannbauer/python_video_stab.svg)](https://github.com/AdamSpannbauer/python_video_stab/commits/master)\n[![Downloads](https://pepy.tech/badge/vidstab)](https://pepy.tech/project/vidstab)\n\n Python video stabilization using OpenCV. Full [searchable documentation here](https://adamspannbauer.github.io/python_video_stab).\n\n This module contains a single class (`VidStab`) used for video stabilization. This class is based on the work presented by Nghia Ho in [SIMPLE VIDEO STABILIZATION USING OPENCV](http://nghiaho.com/?p=2093). The foundation code was found in a comment on Nghia Ho's post by the commenter with username koala.\n\n Input | Output\n:-------------------------------:|:-------------------------:\n![](https://s3.amazonaws.com/python-vidstab/readme/input_ostrich.gif) | ![](https://s3.amazonaws.com/python-vidstab/readme/stable_ostrich.gif)\n\n*[Video](https://www.youtube.com/watch?v=9pypPqbV_GM) used with permission from [HappyLiving](https://www.facebook.com/happylivinginfl/)*\n\n## Contents:\n1. [Installation](#installation)\n * [Install `vidstab` without installing OpenCV](#install-vidstab-without-installing-opencv)\n * [Install vidstab & OpenCV](#install-vidstab-opencv) \n2. [Basic Usage](#basic-usage)\n * [Using from command line](#using-from-command-line)\n * [Using VidStab class](#using-vidstab-class)\n3. [Advanced Usage](#advanced-usage)\n * [Plotting frame to frame transformations](#plotting-frame-to-frame-transformations)\n * [Using borders](#using-borders)\n * [Using Frame Layering](#using-frame-layering)\n * [Stabilizing a frame at a time](#stabilizing-a-frame-at-a-time)\n * [Working with live video](#working-with-live-video)\n * [Transform File Writing & Reading](#transform-file-writing--reading)\n\n## Installation\n\n> ```diff\n> + Please report issues if you install/try to install and run into problems!\n> ```\n\n### Install `vidstab` without installing OpenCV\n\nIf you've already built OpenCV with python bindings on your machine it is recommended to install `vidstab` without installing the pypi versions of OpenCV. The `opencv-python` python module can cause issues if you've already built OpenCV from source in your environment.\n\nThe below commands will install `vidstab` without OpenCV included.\n\n#### From PyPi\n\n```bash\npip install vidstab\n```\n\n#### From GitHub\n\n```bash\npip install git+https://github.com/AdamSpannbauer/python_video_stab.git\n```\n\n### Install `vidstab` & OpenCV\n\nIf you don't have OpenCV installed already there are a couple options. \n\n1. You can build OpenCV using one of the great online tutorials from [PyImageSearch](https://www.pyimagesearch.com/), [LearnOpenCV](https://www.learnopencv.com/), or [OpenCV](https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_setup/py_table_of_contents_setup/py_table_of_contents_setup.html#py-table-of-content-setup) themselves. When building from source you have more options (e.g. [platform optimization](https://www.pyimagesearch.com/2017/10/09/optimizing-opencv-on-the-raspberry-pi/)), but more responsibility. Once installed you can use the pip install command shown above.\n2. You can install a pre-built distribution of OpenCV from pypi as a dependency for `vidstab` (see command below)\n\nThe below commands will install `vidstab` with `opencv-contrib-python` as dependencies.\n\n#### From PyPi\n\n```bash\npip install vidstab[cv2]\n```\n\n#### From Github\n\n```bash\n pip install -e git+https://github.com/AdamSpannbauer/python_video_stab.git#egg=vidstab[cv2]\n```\n\n## Basic usage\n\nThe `VidStab` class can be used as a command line script or in your own custom python code.\n\n### Using from command line\n\n```bash\n# Using defaults\npython3 -m vidstab --input input_video.mov --output stable_video.avi\n```\n\n```bash\n# Using a specific keypoint detector\npython3 -m vidstab -i input_video.mov -o stable_video.avi -k GFTT\n```\n\n### Using `VidStab` class\n\n```python\nfrom vidstab import VidStab\n\n# Using defaults\nstabilizer = VidStab()\nstabilizer.stabilize(input_path='input_video.mov', output_path='stable_video.avi')\n\n# Using a specific keypoint detector\nstabilizer = VidStab(kp_method='ORB')\nstabilizer.stabilize(input_path='input_video.mp4', output_path='stable_video.avi')\n\n# Using a specific keypoint detector and customizing keypoint parameters\nstabilizer = VidStab(kp_method='FAST', threshold=42, nonmaxSuppression=False)\nstabilizer.stabilize(input_path='input_video.mov', output_path='stable_video.avi')\n```\n\n## Advanced usage\n\n### Plotting frame to frame transformations\n\n```python\nfrom vidstab import VidStab\nimport matplotlib.pyplot as plt\n\nstabilizer = VidStab()\nstabilizer.stabilize(input_path='input_video.mov', output_path='stable_video.avi')\n\nstabilizer.plot_trajectory()\nplt.show()\n\nstabilizer.plot_transforms()\nplt.show()\n```\n\nTrajectories | Transforms\n:-------------------------------:|:-------------------------:\n![](https://s3.amazonaws.com/python-vidstab/readme/trajectory_plot.png) | ![](https://s3.amazonaws.com/python-vidstab/readme/transforms_plot.png)\n\n### Using borders\n\n```python\nfrom vidstab import VidStab\n\nstabilizer = VidStab()\n\n# black borders\nstabilizer.stabilize(input_path='input_video.mov', \n output_path='stable_video.avi', \n border_type='black')\nstabilizer.stabilize(input_path='input_video.mov', \n output_path='wide_stable_video.avi', \n border_type='black', \n border_size=100)\n\n# filled in borders\nstabilizer.stabilize(input_path='input_video.mov', \n output_path='ref_stable_video.avi', \n border_type='reflect')\nstabilizer.stabilize(input_path='input_video.mov', \n output_path='rep_stable_video.avi', \n border_type='replicate')\n```\n\n\n \n \n \n \n \n \n \n \n

border_size=0

border_size=100

\n\n`border_type='reflect'` | `border_type='replicate'`\n:--------------------------------------:|:-------------------------:\n![](https://s3.amazonaws.com/python-vidstab/readme/reflect_stable_ostrich.gif) | ![](https://s3.amazonaws.com/python-vidstab/readme/replicate_stable_ostrich.gif)\n\n*[Video](https://www.youtube.com/watch?v=9pypPqbV_GM) used with permission from [HappyLiving](https://www.facebook.com/happylivinginfl/)*\n\n### Using Frame Layering\n\n```python\nfrom vidstab import VidStab, layer_overlay, layer_blend\n\n# init vid stabilizer\nstabilizer = VidStab()\n\n# use vidstab.layer_overlay for generating a trail effect\nstabilizer.stabilize(input_path=INPUT_VIDEO_PATH,\n output_path='trail_stable_video.avi',\n border_type='black',\n border_size=100,\n layer_func=layer_overlay)\n\n\n# create custom overlay function\n# here we use vidstab.layer_blend with custom alpha\n# layer_blend will generate a fading trail effect with some motion blur\ndef layer_custom(foreground, background):\n return layer_blend(foreground, background, foreground_alpha=.8)\n\n# use custom overlay function\nstabilizer.stabilize(input_path=INPUT_VIDEO_PATH,\n output_path='blend_stable_video.avi',\n border_type='black',\n border_size=100,\n layer_func=layer_custom)\n```\n\n`layer_func=vidstab.layer_overlay` | `layer_func=vidstab.layer_blend`\n:--------------------------------------:|:-------------------------:\n![](https://s3.amazonaws.com/python-vidstab/readme/trail_stable_ostrich.gif) | ![](https://s3.amazonaws.com/python-vidstab/readme/blend_stable_ostrich.gif)\n\n*[Video](https://www.youtube.com/watch?v=9pypPqbV_GM) used with permission from [HappyLiving](https://www.facebook.com/happylivinginfl/)*\n\n\n### Automatic border sizing\n\n```python\nfrom vidstab import VidStab, layer_overlay\n\nstabilizer = VidStab()\n\nstabilizer.stabilize(input_path=INPUT_VIDEO_PATH,\n output_path='auto_border_stable_video.avi', \n border_size='auto',\n # frame layering to show performance of auto sizing\n layer_func=layer_overlay)\n```\n\n

\n \n

\n\n\n### Stabilizing a frame at a time\n\nThe method `VidStab.stabilize_frame()` can accept `numpy` arrays to allow stabilization processing a frame at a time.\nThis can allow pre/post processing for each frame to be stabilized; see examples below.\n\n#### Simplest form\n\n```python\nfrom vidstab.VidStab import VidStab\n\nstabilizer = VidStab()\nvidcap = cv2.VideoCapture('input_video.mov')\n\nwhile True:\n grabbed_frame, frame = vidcap.read()\n\n if frame is not None:\n # Perform any pre-processing of frame before stabilization here\n pass\n\n # Pass frame to stabilizer even if frame is None\n # stabilized_frame will be an all black frame until iteration 30\n stabilized_frame = stabilizer.stabilize_frame(input_frame=frame,\n smoothing_window=30)\n if stabilized_frame is None:\n # There are no more frames available to stabilize\n break\n\n # Perform any post-processing of stabilized frame here\n pass\n```\n\n#### Example with object tracking\n\n```python\nimport os\nimport cv2\nfrom vidstab import VidStab, layer_overlay, download_ostrich_video\n\n# Download test video to stabilize\nif not os.path.isfile(\"ostrich.mp4\"):\n download_ostrich_video(\"ostrich.mp4\")\n\n# Initialize object tracker, stabilizer, and video reader\nobject_tracker = cv2.TrackerCSRT_create()\nstabilizer = VidStab()\nvidcap = cv2.VideoCapture(\"ostrich.mp4\")\n\n# Initialize bounding box for drawing rectangle around tracked object\nobject_bounding_box = None\n\nwhile True:\n grabbed_frame, frame = vidcap.read()\n\n # Pass frame to stabilizer even if frame is None\n stabilized_frame = stabilizer.stabilize_frame(input_frame=frame, border_size=50)\n\n # If stabilized_frame is None then there are no frames left to process\n if stabilized_frame is None:\n break\n\n # Draw rectangle around tracked object if tracking has started\n if object_bounding_box is not None:\n success, object_bounding_box = object_tracker.update(stabilized_frame)\n\n if success:\n (x, y, w, h) = [int(v) for v in object_bounding_box]\n cv2.rectangle(stabilized_frame, (x, y), (x + w, y + h),\n (0, 255, 0), 2)\n\n # Display stabilized output\n cv2.imshow('Frame', stabilized_frame)\n\n key = cv2.waitKey(5)\n\n # Select ROI for tracking and begin object tracking\n # Non-zero frame indicates stabilization process is warmed up\n if stabilized_frame.sum() > 0 and object_bounding_box is None:\n object_bounding_box = cv2.selectROI(\"Frame\",\n stabilized_frame,\n fromCenter=False,\n showCrosshair=True)\n object_tracker.init(stabilized_frame, object_bounding_box)\n elif key == 27:\n break\n\nvidcap.release()\ncv2.destroyAllWindows()\n```\n\n

\n \n

\n\n\n### Working with live video\n\nThe `VidStab` class can also process live video streams. The underlying video reader is `cv2.VideoCapture`([documentation](https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_gui/py_video_display/py_video_display.html)).\nThe relevant snippet from the documentation for stabilizing live video is:\n\n> *Its argument can be either the device index or the name of a video file. Device index is just the number to specify which camera. Normally one camera will be connected (as in my case). So I simply pass 0 (or -1). You can select the second camera by passing 1 and so on.*\n\nThe `input_path` argument of the `VidStab.stabilize` method can accept integers that will be passed directly to `cv2.VideoCapture` as a device index. You can also pass a device index to the `--input` argument for command line usage.\n\nOne notable difference between live feeds and video files is that webcam footage does not have a definite end point.\nThe options for ending a live video stabilization are to set the max length using the `max_frames` argument or to manually stop the process by pressing the Esc key or the Q key.\nIf `max_frames` is not provided then no progress bar can be displayed for live video stabilization processes.\n\n#### Example\n\n```python\nfrom vidstab import VidStab\n\nstabilizer = VidStab()\nstabilizer.stabilize(input_path=0,\n output_path='stable_webcam.avi',\n max_frames=1000,\n playback=True)\n```\n\n

\n \n

\n\n### Transform file writing & reading \n\n#### Generating and saving transforms to file\n\n```python\nimport numpy as np\nfrom vidstab import VidStab, download_ostrich_video\n\n# Download video if needed\ndownload_ostrich_video(INPUT_VIDEO_PATH)\n\n# Generate transforms and save to TRANSFORMATIONS_PATH as csv (no headers)\nstabilizer = VidStab()\nstabilizer.gen_transforms(INPUT_VIDEO_PATH)\nnp.savetxt(TRANSFORMATIONS_PATH, stabilizer.transforms, delimiter=',')\n```\n\nFile at `TRANSFORMATIONS_PATH` is of the form shown below. The 3 columns represent delta x, delta y, and delta angle respectively.\n\n```\n-9.249733913760086068e+01,2.953221378387767970e+01,-2.875918912994855636e-02\n-8.801434576214279559e+01,2.741942225927152776e+01,-2.715232319470826938e-02\n```\n\n#### Reading and using transforms from file\n\nBelow example reads a file of transforms and applies to an arbitrary video. The transform file is of the form shown in [above section](#generating-and-saving-transforms-to-file).\n\n```python\nimport numpy as np\nfrom vidstab import VidStab\n\n# Read in csv transform data, of form (delta x, delta y, delta angle):\ntransforms = np.loadtxt(TRANSFORMATIONS_PATH, delimiter=',')\n\n# Create stabilizer and supply numpy array of transforms\nstabilizer = VidStab()\nstabilizer.transforms = transforms\n\n# Apply stabilizing transforms to INPUT_VIDEO_PATH and save to OUTPUT_VIDEO_PATH\nstabilizer.apply_transforms(INPUT_VIDEO_PATH, OUTPUT_VIDEO_PATH)\n```\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/AdamSpannbauer/python_video_stab", "keywords": "video stabilization,computer vision,image processing,opencv", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "vidstab", "package_url": "https://pypi.org/project/vidstab/", "platform": "", "project_url": "https://pypi.org/project/vidstab/", "project_urls": { "Homepage": "https://github.com/AdamSpannbauer/python_video_stab" }, "release_url": "https://pypi.org/project/vidstab/1.7.2/", "requires_dist": [ "numpy", "imutils (>=0.5.2)", "progress", "matplotlib", "opencv-contrib-python (>=3.4.0) ; extra == 'cv2'" ], "requires_python": "", "summary": "Video Stabilization using OpenCV", "version": "1.7.2" }, "last_serial": 5733898, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "ab2b927ae86e5c6c6ad53821f3352cc0", "sha256": "84ba83f433da13372f45b367c9a8d9af94f2d3f4348a1e4b7fb8bdc933adcf22" }, "downloads": -1, "filename": "vidstab-0.1.0.tar.gz", "has_sig": false, "md5_digest": "ab2b927ae86e5c6c6ad53821f3352cc0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6314, "upload_time": "2018-05-24T19:59:51", "url": "https://files.pythonhosted.org/packages/31/15/dbd8b857f3a496c25f3d8032f38abda712b04adbc56ff0e9f1cf9b16dfc8/vidstab-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "57e9d6d197111692db47e51850066082", "sha256": "ecdd6babd762ea2d7b6d59a5a63a8ea59a25e3100cea9a94d75f07cbbdbe4d8c" }, "downloads": -1, "filename": "vidstab-0.1.1.tar.gz", "has_sig": false, "md5_digest": "57e9d6d197111692db47e51850066082", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8642, "upload_time": "2018-05-27T14:41:25", "url": "https://files.pythonhosted.org/packages/16/5e/bce647d170d55cb7cf1a777cfd92e32eb4f0a52b83a5a40db3f7ef47effd/vidstab-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "64cacc92e55ddc6a497fd74e1999af2e", "sha256": "e0a77ad4a787f2d36cecc578bd21a124a861d25b3917d43fac99246b1bd2c64b" }, "downloads": -1, "filename": "vidstab-0.1.2.tar.gz", "has_sig": false, "md5_digest": "64cacc92e55ddc6a497fd74e1999af2e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8867, "upload_time": "2018-05-29T11:04:23", "url": "https://files.pythonhosted.org/packages/85/82/3231c6b3f4289ec3b9cbcbdc20d8b7e3b43abb9f1481a69e6bb389fd820f/vidstab-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "afb86a5a9e12f25448a12833a269b1fa", "sha256": "439f95532d227ba362f562dfa1888ae1b9b708906dbace58b1d8c47e1b1ee276" }, "downloads": -1, "filename": "vidstab-0.1.3.tar.gz", "has_sig": false, "md5_digest": "afb86a5a9e12f25448a12833a269b1fa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8858, "upload_time": "2018-05-29T11:06:03", "url": "https://files.pythonhosted.org/packages/27/26/8d9af9638bdde7be3cdcd045884f92632eedb30115dc96d6e82637cd3ffe/vidstab-0.1.3.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "4ca4e07e1758c81ade97de88a534bd96", "sha256": "b775652cc4f41812de04bc443ad522c1bdaef456a00c74857e9ebc5d2066e362" }, "downloads": -1, "filename": "vidstab-0.1.5.tar.gz", "has_sig": false, "md5_digest": "4ca4e07e1758c81ade97de88a534bd96", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8858, "upload_time": "2018-05-29T11:08:43", "url": "https://files.pythonhosted.org/packages/cf/21/f077adadc9d2e4fce152f5e8c0c65f780102dab045b2b6eb2fe92488f8b0/vidstab-0.1.5.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "43c44ad22892441c5a31398434ffa16b", "sha256": "fa7aa196ae40074cc2887f26472d1526d670715ab2dbbc032ca1fb1c68688392" }, "downloads": -1, "filename": "vidstab-1.0.0.tar.gz", "has_sig": false, "md5_digest": "43c44ad22892441c5a31398434ffa16b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14861, "upload_time": "2018-10-21T20:29:15", "url": "https://files.pythonhosted.org/packages/83/3f/186fd1f0a738ec5fb932872d418390e7680c87b5c4e0a2e7e38063ce1e0e/vidstab-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "2a6fefe16e8bca5f5dad8fda3b49a9d3", "sha256": "0c8f5d97d114056287080ecaa3e41a6088a3d9f9e931d977b6816735619184fd" }, "downloads": -1, "filename": "vidstab-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "2a6fefe16e8bca5f5dad8fda3b49a9d3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 14859, "upload_time": "2018-12-04T22:01:45", "url": "https://files.pythonhosted.org/packages/84/fa/6e070a7458d6bf97a36a4ab7aa264449882773ad458f55d221265c757ef2/vidstab-1.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "94e7aec7bb596a489510e66e3424d159", "sha256": "31b45fa6c6c726ee05c4e106d95682f17258750d09e2e1c880bbccbf866f323e" }, "downloads": -1, "filename": "vidstab-1.0.1.tar.gz", "has_sig": false, "md5_digest": "94e7aec7bb596a489510e66e3424d159", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14910, "upload_time": "2018-12-04T22:01:47", "url": "https://files.pythonhosted.org/packages/f5/1d/03d2fd81280e33ad08ec7673e0a93370af5074f0f16048483eb905a0f533/vidstab-1.0.1.tar.gz" } ], "1.5.0": [ { "comment_text": "", "digests": { "md5": "2439461bef789527557d4b2db07a614a", "sha256": "5e003500cea506675d207f4b26886b67cd1122e8b3fa2888d13366e825c623ec" }, "downloads": -1, "filename": "vidstab-1.5.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2439461bef789527557d4b2db07a614a", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 18904, "upload_time": "2019-01-10T17:04:03", "url": "https://files.pythonhosted.org/packages/99/9c/eb6ff69af336c67116085893ad98c333c9fe14a7b4230f9790453b864f82/vidstab-1.5.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "99434cfe8b13b82d3f9a12f98876c6b1", "sha256": "4387e67c355435a6b4f9fa2b2ce39439237babee1cfc45023a1acd0fc90ba4ed" }, "downloads": -1, "filename": "vidstab-1.5.0.tar.gz", "has_sig": false, "md5_digest": "99434cfe8b13b82d3f9a12f98876c6b1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22085, "upload_time": "2019-01-10T17:04:05", "url": "https://files.pythonhosted.org/packages/a8/7a/6a00e4d1e7228a27b95c9820db9c8e838bf6df000098cb32f2c65e8c0311/vidstab-1.5.0.tar.gz" } ], "1.5.1": [ { "comment_text": "", "digests": { "md5": "83903168e477815cbe2b7f535f9573d9", "sha256": "3ac0e4baf25e5185d769221135b0e823f57bf4471eb3c5aef00ebd7cc949ea4c" }, "downloads": -1, "filename": "vidstab-1.5.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "83903168e477815cbe2b7f535f9573d9", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 19657, "upload_time": "2019-01-11T19:16:17", "url": "https://files.pythonhosted.org/packages/59/2e/92e6f505c9f0130f52bac09313e11fe7e9c71c862b840af3f4746463f60d/vidstab-1.5.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6928207aa50dc620c5a6eed83c415652", "sha256": "17afbe6d098fbebea887a2228b9dd11c28491b47b665c1730a5f02a7da20da67" }, "downloads": -1, "filename": "vidstab-1.5.1.tar.gz", "has_sig": false, "md5_digest": "6928207aa50dc620c5a6eed83c415652", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22626, "upload_time": "2019-01-11T19:16:19", "url": "https://files.pythonhosted.org/packages/95/bc/4305d96565a23d04978a0c30da0d96ac69dd5240dc81bd9c6558e64635f1/vidstab-1.5.1.tar.gz" } ], "1.5.2": [ { "comment_text": "", "digests": { "md5": "c8d2f10b739c37e49a2b82c6a95c9a70", "sha256": "29fcf141708a0085488a77e4856e0229b3c88467b187866ff4447fb762a375cb" }, "downloads": -1, "filename": "vidstab-1.5.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c8d2f10b739c37e49a2b82c6a95c9a70", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 19687, "upload_time": "2019-01-13T18:29:36", "url": "https://files.pythonhosted.org/packages/80/90/1fd239f7011c9a081f57df7615b53267db082e76f4524c3e8041d68f4207/vidstab-1.5.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f43a795dbefdfff5a354c1e67b75c973", "sha256": "27d933890e3aa02628d6cf32a14ed25e42b79ec49bb706ae53fdafb2ff1090ef" }, "downloads": -1, "filename": "vidstab-1.5.2.tar.gz", "has_sig": false, "md5_digest": "f43a795dbefdfff5a354c1e67b75c973", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22730, "upload_time": "2019-01-13T18:29:38", "url": "https://files.pythonhosted.org/packages/df/36/b4cde17448e86539e44931036a00badbe1c824e4391f7ab7697978293467/vidstab-1.5.2.tar.gz" } ], "1.5.3": [ { "comment_text": "", "digests": { "md5": "31ea415310a740dc20efd5cc262c7a1e", "sha256": "982977897c5986acf50972eea23a76e3221b609ff38989e274f5a7bbb2ce9879" }, "downloads": -1, "filename": "vidstab-1.5.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "31ea415310a740dc20efd5cc262c7a1e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 20901, "upload_time": "2019-01-14T19:36:03", "url": "https://files.pythonhosted.org/packages/c6/f2/3d0e38b811c5039f8073f4fe7079e7d1d91ef71110925b90f69052d8652a/vidstab-1.5.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "991cdf51b52e99c10a11cf22263d43ba", "sha256": "e905386530220b83f1e17f99800bade1029b8be91f4b3dbbd493cb6f7a9351d4" }, "downloads": -1, "filename": "vidstab-1.5.3.tar.gz", "has_sig": false, "md5_digest": "991cdf51b52e99c10a11cf22263d43ba", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23664, "upload_time": "2019-01-14T19:36:04", "url": "https://files.pythonhosted.org/packages/75/b9/335d0fc7c0a083849f63614c123fccb9bb2a3910fe8b01bd30ecd50a79d8/vidstab-1.5.3.tar.gz" } ], "1.5.4": [ { "comment_text": "", "digests": { "md5": "38a79a1ae1ccb5762210ce27ead2d972", "sha256": "2e07fc8a116be102e473b65f72e06907132fcf496bce9b25b2f8ba37ff5549b3" }, "downloads": -1, "filename": "vidstab-1.5.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "38a79a1ae1ccb5762210ce27ead2d972", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 20901, "upload_time": "2019-01-26T18:59:25", "url": "https://files.pythonhosted.org/packages/ba/dc/69b38086c11150590599a15b9e09290017bf51f31157755c139cdc1542a3/vidstab-1.5.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e63555f8e67df6d4ebee83c40c2303fc", "sha256": "7e1a7058fb6fd6999f010a80cbcd7305fe598c4d8b897f30a182d49c79fd0240" }, "downloads": -1, "filename": "vidstab-1.5.4.tar.gz", "has_sig": false, "md5_digest": "e63555f8e67df6d4ebee83c40c2303fc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23685, "upload_time": "2019-01-26T18:59:27", "url": "https://files.pythonhosted.org/packages/75/8b/6f7f88bb77be9c057bd5d83d328b50c2406f39a65de7c777ccfc4548e4fd/vidstab-1.5.4.tar.gz" } ], "1.5.5": [ { "comment_text": "", "digests": { "md5": "c47d5be49b09e12d6b552230715d6305", "sha256": "c08242bc410535145e290d2b3d3f6d446b9d1971da320cf2dd075c925835dd28" }, "downloads": -1, "filename": "vidstab-1.5.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c47d5be49b09e12d6b552230715d6305", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 21912, "upload_time": "2019-01-27T16:40:31", "url": "https://files.pythonhosted.org/packages/3c/aa/3ff756d32d53c39120df0ad09d56d4512c04ccf99ddea4e5d2a8507f3120/vidstab-1.5.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d6f90b78ac2b05ea6fc7a6eeeee9783f", "sha256": "64e85bd60b8a440811b2f2be4c483de0bf41c07ea4b1d497d00aa1762d8a0a18" }, "downloads": -1, "filename": "vidstab-1.5.5.tar.gz", "has_sig": false, "md5_digest": "d6f90b78ac2b05ea6fc7a6eeeee9783f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25550, "upload_time": "2019-01-27T16:40:33", "url": "https://files.pythonhosted.org/packages/b2/b2/2c46551f75d626538e187d152d62f7e7064392437497b992c39a2967b45c/vidstab-1.5.5.tar.gz" } ], "1.5.6": [ { "comment_text": "", "digests": { "md5": "00e5aa184d86616eca1327c946023688", "sha256": "180543101b3c46cf64c75e691d35113235e238cb962ee19aa487b69605d0666f" }, "downloads": -1, "filename": "vidstab-1.5.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "00e5aa184d86616eca1327c946023688", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 23395, "upload_time": "2019-01-28T16:27:34", "url": "https://files.pythonhosted.org/packages/df/92/d0509c08df448cd22b137557d8c63e4b75aa3e688b3dc0d2a7cfd9a1ec17/vidstab-1.5.6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "107af8091cc043ab89db90c411a5be49", "sha256": "6b488aed337855ac8b3730f7c6964c2ad41111a8f61ab0b457197696feefa593" }, "downloads": -1, "filename": "vidstab-1.5.6.tar.gz", "has_sig": false, "md5_digest": "107af8091cc043ab89db90c411a5be49", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27104, "upload_time": "2019-01-28T16:27:36", "url": "https://files.pythonhosted.org/packages/07/f6/38b0d4035180ba493e99c7d2f96f7e87379774c409261b851655b15fa227/vidstab-1.5.6.tar.gz" } ], "1.6.0": [ { "comment_text": "", "digests": { "md5": "0d5de8dc88d696ccc35ca95a324db4e2", "sha256": "f39424f7072b01682409b0f5438a37fa76707aae2ad2afae864aa8b82e1aad9b" }, "downloads": -1, "filename": "vidstab-1.6.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0d5de8dc88d696ccc35ca95a324db4e2", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 26230, "upload_time": "2019-04-27T16:36:16", "url": "https://files.pythonhosted.org/packages/18/b3/30adfb1aca20b1bcfca790b35c705f00800b4e4da1ec0388b79b804f70dc/vidstab-1.6.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8961f3fd08fb484ca0d6ab9551bd5d11", "sha256": "dcc6378a176ce187c78ca0d395e0c1cef5a7dd759971b139ef4048c8458af172" }, "downloads": -1, "filename": "vidstab-1.6.0.tar.gz", "has_sig": false, "md5_digest": "8961f3fd08fb484ca0d6ab9551bd5d11", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31373, "upload_time": "2019-04-27T16:36:20", "url": "https://files.pythonhosted.org/packages/4a/5b/83d96837a50b4219e87d6c61348911856e5d2b4cbfb75f222f5d9a6060c1/vidstab-1.6.0.tar.gz" } ], "1.6.1": [ { "comment_text": "", "digests": { "md5": "2ccfe35326570ea7eb55e9c735fa68ef", "sha256": "128042f0afb2291331b523b551fcc54d863279bf1f6781cc3b3539dcc5ec74fa" }, "downloads": -1, "filename": "vidstab-1.6.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2ccfe35326570ea7eb55e9c735fa68ef", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 26268, "upload_time": "2019-05-06T22:59:40", "url": "https://files.pythonhosted.org/packages/e2/18/2f5226ac25d74d9c76d916faa801db9b8fda5c90cc536ce9273ae825c683/vidstab-1.6.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e260d754a9b3bb08dda92d684014192b", "sha256": "9d3ae2cf6635478f3fcfb77daee7111bfb75adf3d9ae6eeed22fa77420df76bf" }, "downloads": -1, "filename": "vidstab-1.6.1.tar.gz", "has_sig": false, "md5_digest": "e260d754a9b3bb08dda92d684014192b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31496, "upload_time": "2019-05-06T22:59:42", "url": "https://files.pythonhosted.org/packages/b7/0c/9258537757183bcdbd0b6e9773bfa57699eb4665288184763476c96ff445/vidstab-1.6.1.tar.gz" } ], "1.6.2": [ { "comment_text": "", "digests": { "md5": "84648b9a17d2bc27b0c0d6104221fb54", "sha256": "ecfa589b5350b363fc261d673b67ce83add085eb30996894637a564ff75585c0" }, "downloads": -1, "filename": "vidstab-1.6.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "84648b9a17d2bc27b0c0d6104221fb54", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 26299, "upload_time": "2019-08-05T15:00:04", "url": "https://files.pythonhosted.org/packages/5f/2a/6a3dac7601843f5bb2cb091fe3f43769ce4c1ecb3f35493304c2a156a16d/vidstab-1.6.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "81ec6b9c99202b47f2d51ba5c4fc018a", "sha256": "c3cb4d88d171b227669396f2b5037cf5aed1d00dd7f7a60f53aab4ddebaca4e8" }, "downloads": -1, "filename": "vidstab-1.6.2.tar.gz", "has_sig": false, "md5_digest": "81ec6b9c99202b47f2d51ba5c4fc018a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31567, "upload_time": "2019-08-05T15:00:06", "url": "https://files.pythonhosted.org/packages/fd/91/974ed52ea102895d618540fe93673ef14e87096cfacb078cec0f5b65c4f3/vidstab-1.6.2.tar.gz" } ], "1.7.0": [ { "comment_text": "", "digests": { "md5": "b1849b197df6ba478fe8f3be8f672dbb", "sha256": "d13d0f6e9e4cab8326c075d96bf2ec3a55a9ff2bfb52651e785dfc0dba87ea02" }, "downloads": -1, "filename": "vidstab-1.7.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b1849b197df6ba478fe8f3be8f672dbb", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 26393, "upload_time": "2019-08-10T18:34:55", "url": "https://files.pythonhosted.org/packages/53/c2/8de9abf58a8d758faa7e408fe410a3336026de4e808b1148b78ae2ec3be4/vidstab-1.7.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e7a76c197c3ba3feb274d1a96b90a486", "sha256": "eaf9c15578e56d04479a8c20b9016a74c3589b7cb5a2b0b7941484ccdb36857c" }, "downloads": -1, "filename": "vidstab-1.7.0.tar.gz", "has_sig": false, "md5_digest": "e7a76c197c3ba3feb274d1a96b90a486", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31681, "upload_time": "2019-08-10T18:34:57", "url": "https://files.pythonhosted.org/packages/da/65/ee438ba3f5aafce7d5e29cc499856e5a0c22fa1013f37e9781112d6795d3/vidstab-1.7.0.tar.gz" } ], "1.7.1": [ { "comment_text": "", "digests": { "md5": "1cad7e4e4552a357bef471db41b315ac", "sha256": "d81ac5de789cfac4548b85b6adabe86707261bae3af1bdc40212dd49c9c7c1e6" }, "downloads": -1, "filename": "vidstab-1.7.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1cad7e4e4552a357bef471db41b315ac", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 26401, "upload_time": "2019-08-11T16:07:58", "url": "https://files.pythonhosted.org/packages/18/6b/56263644079479929ca2f4a1f5ed54ec57331d3d455ea55029ca456c7912/vidstab-1.7.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "82882da4532012d9616342db387969dd", "sha256": "4eb307832b64b24ef97ae2f6e06ceaa48d9705c22f95e025f7fc4710d8556b1a" }, "downloads": -1, "filename": "vidstab-1.7.1.tar.gz", "has_sig": false, "md5_digest": "82882da4532012d9616342db387969dd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31708, "upload_time": "2019-08-11T16:08:00", "url": "https://files.pythonhosted.org/packages/0a/b7/12b1460a7932b7e25675f462f19e88beb6c2a48e109a954330976fe89d04/vidstab-1.7.1.tar.gz" } ], "1.7.2": [ { "comment_text": "", "digests": { "md5": "ec300e12740a628a4e61a9a8e54e0129", "sha256": "57710dc0ef540bd0ab9cf5fe9098968c55d0e7c39c6bff91537dff7c37e25e1f" }, "downloads": -1, "filename": "vidstab-1.7.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ec300e12740a628a4e61a9a8e54e0129", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 26394, "upload_time": "2019-08-27T00:59:07", "url": "https://files.pythonhosted.org/packages/c4/cc/b7ad3742e80748f5b8607c64dc651e0b3c04a3f6e1752bf3283ba0ada148/vidstab-1.7.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "715841a989929000d2f6a1c25202d561", "sha256": "24cb7a25a6ed9a474f4d23c9deecf9163691fcde2559de10897f593ba849266b" }, "downloads": -1, "filename": "vidstab-1.7.2.tar.gz", "has_sig": false, "md5_digest": "715841a989929000d2f6a1c25202d561", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31704, "upload_time": "2019-08-27T00:59:09", "url": "https://files.pythonhosted.org/packages/82/fd/f81af1e8162dc27cf569c201bb8097a4f7ef9a45cf8ebb08f6dffd6f5620/vidstab-1.7.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "ec300e12740a628a4e61a9a8e54e0129", "sha256": "57710dc0ef540bd0ab9cf5fe9098968c55d0e7c39c6bff91537dff7c37e25e1f" }, "downloads": -1, "filename": "vidstab-1.7.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ec300e12740a628a4e61a9a8e54e0129", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 26394, "upload_time": "2019-08-27T00:59:07", "url": "https://files.pythonhosted.org/packages/c4/cc/b7ad3742e80748f5b8607c64dc651e0b3c04a3f6e1752bf3283ba0ada148/vidstab-1.7.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "715841a989929000d2f6a1c25202d561", "sha256": "24cb7a25a6ed9a474f4d23c9deecf9163691fcde2559de10897f593ba849266b" }, "downloads": -1, "filename": "vidstab-1.7.2.tar.gz", "has_sig": false, "md5_digest": "715841a989929000d2f6a1c25202d561", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31704, "upload_time": "2019-08-27T00:59:09", "url": "https://files.pythonhosted.org/packages/82/fd/f81af1e8162dc27cf569c201bb8097a4f7ef9a45cf8ebb08f6dffd6f5620/vidstab-1.7.2.tar.gz" } ] }