{ "info": { "author": "Yuanle Song", "author_email": "sylecn@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "License :: OSI Approved :: GNU General Public License (GPL)", "License :: OSI Approved :: GNU General Public License v2 or later (GPLv2+)", "Programming Language :: Python :: 3.5" ], "description": "m3u8downloader\n============================\n\nm3u8downloader is a tool to download video at a m3u8 link. `HTTP Live\nStreaming (HLS)`_ is becoming popular. m3u8 playlist is used by HLS to serve\nvideo fragments of different quality to different clients. This tool supports\nHLS master playlist and media playlist. If master playlist is given, it\nselects the highest resolution automatically. HLS fragment encryption is\nsupported. Resume from partial download is supported, just rerun the same\ncommand to continue.\n\nffmpeg is used to convert the downloaded fragments into final mp4 video file.\n\n.. _HTTP Live Streaming (HLS): https://developer.apple.com/streaming/\n\nInstallation\n------------\n\nTo install m3u8downloader, simply:\n\n.. code-block:: bash\n\n $ sudo apt install -y ffmpeg\n $ pip install --user m3u8downloader\n\n\nQuick Start\n-----------\n\nExample command line usage:\n\n.. code-block:: bash\n\n downloadm3u8 -o ~/Downloads/foo.mp4 https://example.com/path/to/foo.m3u8\n\nIf ~/.local/bin is not in $PATH, you can use full path:\n\n.. code-block:: bash\n\n ~/.local/bin/downloadm3u8 -o ~/Downloads/foo.mp4 https://example.com/path/to/foo.m3u8\n\nHere is built-in command line help:\n\n.. code-block:: bash\n\n usage: m3u8downloader [-h] [--version] [--debug] --output OUTPUT\n [--tempdir TEMPDIR] [--concurrency N]\n URL\n\n download video at m3u8 url\n\n positional arguments:\n URL the m3u8 url\n\n optional arguments:\n -h, --help show this help message and exit\n --version show program's version number and exit\n --debug enable debug log\n --output OUTPUT, -o OUTPUT\n output video filename, e.g. ~/Downloads/foo.mp4\n --tempdir TEMPDIR temp dir, used to store .ts files before combing them\n into mp4\n --concurrency N, -c N\n number of fragments to download at a time\n\nDocumentation\n-------------\n\nThis command line tool doesn't have extra documents.\n\nLimitations\n-------------\n\nThis tool only parses minimum m3u8 extensions for selecting media playlist\nfrom master playlist, downloading key and fragments from media playlist. If a\nm3u8 file doesn't download correctly, it's probably some new extension was\nadded to the HLS spec which this tool isn't aware of.\n\nChangeLog\n---------\n\n* v0.8.0 2019-03-31\n\n - add logrotate for log handler\n\n* v0.7.8 2019-03-09\n\n - bugfix: fragment url rewrite fail for some cases\n\n* v0.7.7 2019-03-08\n\n - bugfix: always rewrite fragment url to local abs path\n\n* v0.7.5 2019-03-07\n\n - set default log level to INFO\n\n* v0.7.4 2019-03-07\n\n - initial release\n\n\n", "description_content_type": "text/x-rst", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://pypi.org/project/m3u8downloader/", "keywords": "", "license": "GPLv2+", "maintainer": "Yuanle Song", "maintainer_email": "sylecn@gmail.com", "name": "m3u8downloader", "package_url": "https://pypi.org/project/m3u8downloader/", "platform": "", "project_url": "https://pypi.org/project/m3u8downloader/", "project_urls": { "Homepage": "https://pypi.org/project/m3u8downloader/" }, "release_url": "https://pypi.org/project/m3u8downloader/0.8.0/", "requires_dist": [ "wells (==1.4.1)", "requests (==2.21.0)" ], "requires_python": "", "summary": "a cli program to download video at m3u8 url", "version": "0.8.0" }, "last_serial": 5009304, "releases": { "0.7.3": [ { "comment_text": "", "digests": { "md5": "df55306a6074ac89cfdf89ce2a449b47", "sha256": "e016e7df1a243a3e8a71065ca4c3a86421601ab403d6ebf49c46b0756fd16cda" }, "downloads": -1, "filename": "m3u8downloader-0.7.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "df55306a6074ac89cfdf89ce2a449b47", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10546, "upload_time": "2019-03-07T06:40:13", "url": "https://files.pythonhosted.org/packages/bb/34/bf102f50aae9fbaab0f03a1aeba8e5545d2a45cc7a368b4a99334557ba80/m3u8downloader-0.7.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "74cce345578be86e6be9434d87cb1fb6", "sha256": "d164db9aa769232f876b2c709e46b2af30356c41649417499a2263bc3ef0abca" }, "downloads": -1, "filename": "m3u8downloader-0.7.3.tar.gz", "has_sig": false, "md5_digest": "74cce345578be86e6be9434d87cb1fb6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7379, "upload_time": "2019-03-07T06:40:15", "url": "https://files.pythonhosted.org/packages/9b/ab/865b588374507cf5c87dfc8d6fc0d768a57424e0d57420f9ef84090bbf34/m3u8downloader-0.7.3.tar.gz" } ], "0.7.4": [ { "comment_text": "", "digests": { "md5": "b7cc08b37c78ba6883924616594a11ec", "sha256": "1523785a76c1d04c0303eb2fd47550f8ce372e5094e01366526e9694561f53a0" }, "downloads": -1, "filename": "m3u8downloader-0.7.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b7cc08b37c78ba6883924616594a11ec", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10611, "upload_time": "2019-03-07T07:00:32", "url": "https://files.pythonhosted.org/packages/1c/63/92a77c4283b9a1ba9c36f44be9004a6a9835c3d6802f42bea6cc2901e877/m3u8downloader-0.7.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "073e6931495f8e8e74bc684aeb3b4325", "sha256": "e78baaeac3e68a262cb5908225ccd95227b5705098242e12f1bb8aa43cde9119" }, "downloads": -1, "filename": "m3u8downloader-0.7.4.tar.gz", "has_sig": false, "md5_digest": "073e6931495f8e8e74bc684aeb3b4325", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7468, "upload_time": "2019-03-07T07:00:34", "url": "https://files.pythonhosted.org/packages/c6/ab/77cdc4aa312c5228584d3270e6fef8b79930f98b0a3c03e5cf118ae09580/m3u8downloader-0.7.4.tar.gz" } ], "0.7.5": [ { "comment_text": "", "digests": { "md5": "5dc2d40d9d93b60faa5744da32003ba4", "sha256": "ac0cbc20c17baed23cf785f5a692ddcdeb90cff2caa9333dba7dc5937795f8f4" }, "downloads": -1, "filename": "m3u8downloader-0.7.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5dc2d40d9d93b60faa5744da32003ba4", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10581, "upload_time": "2019-03-07T13:47:16", "url": "https://files.pythonhosted.org/packages/f8/2c/23e7e7a0a0ac413a3b4a8d51dc1caac9f7594200787940c29ed6ff9f36de/m3u8downloader-0.7.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b1fe6e6daf35cc7c474f2a7fdb333813", "sha256": "7b710d50c239e7f6149e7cef9c651ea31d4f7aa9ebc846a8d2f1161ddc39da31" }, "downloads": -1, "filename": "m3u8downloader-0.7.5.tar.gz", "has_sig": false, "md5_digest": "b1fe6e6daf35cc7c474f2a7fdb333813", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7451, "upload_time": "2019-03-07T13:47:18", "url": "https://files.pythonhosted.org/packages/4b/2d/d1a98595c41ecaaf020f965c0aa6dc849197505e57a324cde6f451e4c788/m3u8downloader-0.7.5.tar.gz" } ], "0.7.7": [ { "comment_text": "", "digests": { "md5": "2d650e7b2f4ae786aac922969168d8e8", "sha256": "15f258b5fefb8180b05e58e24fef80136d08710196bc5db89eb384731dc39d5f" }, "downloads": -1, "filename": "m3u8downloader-0.7.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2d650e7b2f4ae786aac922969168d8e8", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10404, "upload_time": "2019-03-08T13:48:13", "url": "https://files.pythonhosted.org/packages/c8/c8/b89078dab41acceb2cb242478c67c0f9497d1fb87cd9ec76a6828ed53cbc/m3u8downloader-0.7.7-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8aa1703a500054233e3ec7332809b600", "sha256": "154bad4ab064c809a08e88a59afbee07d5f673ff157a27d2468b7cf68a34994e" }, "downloads": -1, "filename": "m3u8downloader-0.7.7.tar.gz", "has_sig": false, "md5_digest": "8aa1703a500054233e3ec7332809b600", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7432, "upload_time": "2019-03-08T13:48:15", "url": "https://files.pythonhosted.org/packages/cb/43/1d701154f6dfd4747c0ca94e4d26864e7d15aacffa399272ddc0d1e68111/m3u8downloader-0.7.7.tar.gz" } ], "0.7.8": [ { "comment_text": "", "digests": { "md5": "470d736f410145a3623fb16c9d7b9bbf", "sha256": "f71d2526350196b67410b8ae1e9d6bd900602148b4b9eab1e2fb622fe7fe616b" }, "downloads": -1, "filename": "m3u8downloader-0.7.8-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "470d736f410145a3623fb16c9d7b9bbf", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10520, "upload_time": "2019-03-09T12:25:44", "url": "https://files.pythonhosted.org/packages/b6/28/28df410cc331873cfe8c50a2a532ade71f96c33b116d4c5b63998464314b/m3u8downloader-0.7.8-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e78ef6748e35a3f9f5fced380e22881f", "sha256": "df649538ca8c0f1b6a4381aa753f13e7890eee8307208d4055d9a7af3b6ccefe" }, "downloads": -1, "filename": "m3u8downloader-0.7.8.tar.gz", "has_sig": false, "md5_digest": "e78ef6748e35a3f9f5fced380e22881f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7493, "upload_time": "2019-03-09T12:25:45", "url": "https://files.pythonhosted.org/packages/66/92/9eb5cd8a7b933b0b2fb73381d47159f8c858b6cc43853cf99f06cfadd040/m3u8downloader-0.7.8.tar.gz" } ], "0.8.0": [ { "comment_text": "", "digests": { "md5": "0d6544197bb6f415acfddaef52b29aaf", "sha256": "dbd2b4b093cb75c8ad8f546a03f88d129c0d6de2b441d9a16203218e1da26d32" }, "downloads": -1, "filename": "m3u8downloader-0.8.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0d6544197bb6f415acfddaef52b29aaf", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10625, "upload_time": "2019-03-31T12:27:37", "url": "https://files.pythonhosted.org/packages/a5/0e/1df15465cc3aeb2f313ae5797f7098966bb94f6a79ff422d75319ffed9df/m3u8downloader-0.8.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "24417fb508935b3896a8c3df48418b0d", "sha256": "206bb1f0bee65145944b20e879fd4b7621acfb783e70a31fc861aa711a624e48" }, "downloads": -1, "filename": "m3u8downloader-0.8.0.tar.gz", "has_sig": false, "md5_digest": "24417fb508935b3896a8c3df48418b0d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8145, "upload_time": "2019-03-31T12:27:39", "url": "https://files.pythonhosted.org/packages/f8/7a/af6c89c22527a259acad80237c641460538d125ba8cb0ebe1b2915d5ac20/m3u8downloader-0.8.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "0d6544197bb6f415acfddaef52b29aaf", "sha256": "dbd2b4b093cb75c8ad8f546a03f88d129c0d6de2b441d9a16203218e1da26d32" }, "downloads": -1, "filename": "m3u8downloader-0.8.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0d6544197bb6f415acfddaef52b29aaf", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10625, "upload_time": "2019-03-31T12:27:37", "url": "https://files.pythonhosted.org/packages/a5/0e/1df15465cc3aeb2f313ae5797f7098966bb94f6a79ff422d75319ffed9df/m3u8downloader-0.8.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "24417fb508935b3896a8c3df48418b0d", "sha256": "206bb1f0bee65145944b20e879fd4b7621acfb783e70a31fc861aa711a624e48" }, "downloads": -1, "filename": "m3u8downloader-0.8.0.tar.gz", "has_sig": false, "md5_digest": "24417fb508935b3896a8c3df48418b0d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8145, "upload_time": "2019-03-31T12:27:39", "url": "https://files.pythonhosted.org/packages/f8/7a/af6c89c22527a259acad80237c641460538d125ba8cb0ebe1b2915d5ac20/m3u8downloader-0.8.0.tar.gz" } ] }