Metadata-Version: 1.1
Name: pytube
Version: 7.0.6
Summary: A Python library for downloading YouTube videos.
Home-page: https://github.com/nficano/pytube
Author: Nick Ficano
Author-email: nficano@gmail.com
License: Copyright (c) 2017 Nick Ficano

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sub-license, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:

The above copyright notice, and every other copyright notice found in this
software, and all the attributions in every file, and this permission notice
shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

Description: ======
        pytube
        ======
        
        .. image:: https://img.shields.io/pypi/v/pytube.svg
          :alt: Pypi
          :target: https://pypi.python.org/pypi/pytube/
        
        .. image:: https://travis-ci.org/nficano/pytube.svg?branch=master
           :alt: Build status
           :target: https://travis-ci.org/nficano/pytube
        
        .. image:: https://readthedocs.org/projects/python-pytube/badge/?version=latest
          :alt: Documentation Status
          :target: http://python-pytube.readthedocs.io/en/latest/?badge=latest
        
        .. image:: https://coveralls.io/repos/github/nficano/pytube/badge.svg?branch=master#23e6f7ac5623e
          :alt: Code Coverage
          :target: https://coveralls.io/github/nficano/pytube?branch=master
        
        .. image:: https://img.shields.io/pypi/pyversions/pytube.svg
          :alt: Python Versions
          :target: https://pypi.python.org/pypi/pytube/
        
        *pytube* is a lightweight, dependency-free Python library (and command-line utility) for downloading YouTube Videos.
        
        -------------------
        
        **Behold, a perfect balance of simplicity versus flexibility**::
        
            >>> YouTube('https://youtu.be/9bZkp7q19f0').streams.first().download()
            >>> yt = YouTube('http://youtube.com/watch?v=9bZkp7q19f0')
            >>> yt.streams
            ... .filter(progressive=True, file_extension='mp4')
            ... .order_by('resolution')
            ... .desc()
            ... .first()
            ... .download()
        
        Installation
        ============
        
        Download using pip via pypi.
        
        .. code-block:: bash
        
            pip install pytube
        
        Getting started
        ===============
        
        Let's begin with showing how easy it is to download a video with pytube:
        
        .. code-block:: python
        
           >>> from pytube import YouTube
           >>> YouTube('http://youtube.com/watch?v=9bZkp7q19f0').streams.first().download()
        
        This example will download the highest quality progressive download stream available.
        
        Next, let's explore how we would view what video streams are available:
        
        .. code-block:: python
        
           >>> yt = YouTube('http://youtube.com/watch?v=9bZkp7q19f0')
           >>> yt.streams.all()
           [<Stream: itag="22" mime_type="video/mp4" res="720p" fps="30fps" vcodec="avc1.64001F" acodec="mp4a.40.2">,
           <Stream: itag="43" mime_type="video/webm" res="360p" fps="30fps" vcodec="vp8.0" acodec="vorbis">,
           <Stream: itag="18" mime_type="video/mp4" res="360p" fps="30fps" vcodec="avc1.42001E" acodec="mp4a.40.2">,
           <Stream: itag="36" mime_type="video/3gpp" res="240p" fps="30fps" vcodec="mp4v.20.3" acodec="mp4a.40.2">,
           <Stream: itag="17" mime_type="video/3gpp" res="144p" fps="30fps" vcodec="mp4v.20.3" acodec="mp4a.40.2">,
           <Stream: itag="137" mime_type="video/mp4" res="1080p" fps="30fps" vcodec="avc1.640028">,
           <Stream: itag="248" mime_type="video/webm" res="1080p" fps="30fps" vcodec="vp9">,
           <Stream: itag="136" mime_type="video/mp4" res="720p" fps="30fps" vcodec="avc1.4d401f">,
           <Stream: itag="247" mime_type="video/webm" res="720p" fps="30fps" vcodec="vp9">,
           <Stream: itag="135" mime_type="video/mp4" res="480p" fps="30fps" vcodec="avc1.4d401e">,
           <Stream: itag="244" mime_type="video/webm" res="480p" fps="30fps" vcodec="vp9">,
           <Stream: itag="134" mime_type="video/mp4" res="360p" fps="30fps" vcodec="avc1.4d401e">,
           <Stream: itag="243" mime_type="video/webm" res="360p" fps="30fps" vcodec="vp9">,
           <Stream: itag="133" mime_type="video/mp4" res="240p" fps="30fps" vcodec="avc1.4d4015">,
           <Stream: itag="242" mime_type="video/webm" res="240p" fps="30fps" vcodec="vp9">,
           <Stream: itag="160" mime_type="video/mp4" res="144p" fps="30fps" vcodec="avc1.4d400c">,
           <Stream: itag="278" mime_type="video/webm" res="144p" fps="30fps" vcodec="vp9">,
           <Stream: itag="140" mime_type="audio/mp4" abr="128kbps" acodec="mp4a.40.2">,
           <Stream: itag="171" mime_type="audio/webm" abr="128kbps" acodec="vorbis">,
           <Stream: itag="249" mime_type="audio/webm" abr="50kbps" acodec="opus">,
           <Stream: itag="250" mime_type="audio/webm" abr="70kbps" acodec="opus">,
           <Stream: itag="251" mime_type="audio/webm" abr="160kbps" acodec="opus">]
        
        You may notice that some streams listed have both a video codec and audio codec, while others have just video or just audio, this is a result of YouTube supporting a streaming technique called Dynamic Adaptive Streaming over HTTP (DASH).
        
        In the context of pytube, the implications are for the highest quality streams; you now need to download both the audio and video tracks and then post-process them with software like FFmpeg to merge them.
        
        The legacy streams that contain the audio and video in a single file (referred to as "progressive download") are still available, but only for resolutions 720p and below.
        
        To only view these progressive download streams:
        
        .. code-block:: python
        
            >>> yt.streams.filter(progressive=True).all()
            [<Stream: itag="22" mime_type="video/mp4" res="720p" fps="30fps" vcodec="avc1.64001F" acodec="mp4a.40.2">,
            <Stream: itag="43" mime_type="video/webm" res="360p" fps="30fps" vcodec="vp8.0" acodec="vorbis">,
            <Stream: itag="18" mime_type="video/mp4" res="360p" fps="30fps" vcodec="avc1.42001E" acodec="mp4a.40.2">,
            <Stream: itag="36" mime_type="video/3gpp" res="240p" fps="30fps" vcodec="mp4v.20.3" acodec="mp4a.40.2">,
            <Stream: itag="17" mime_type="video/3gpp" res="144p" fps="30fps" vcodec="mp4v.20.3" acodec="mp4a.40.2">]
        
        Conversely, if you only want to see the DASH streams (also referred to as "adaptive") you can do:
        
        .. code-block:: python
        
            >>> yt.streams.filter(adaptive=True).all()
            [<Stream: itag="137" mime_type="video/mp4" res="1080p" fps="30fps" vcodec="avc1.640028">,
            <Stream: itag="248" mime_type="video/webm" res="1080p" fps="30fps" vcodec="vp9">,
            <Stream: itag="136" mime_type="video/mp4" res="720p" fps="30fps" vcodec="avc1.4d401f">,
            <Stream: itag="247" mime_type="video/webm" res="720p" fps="30fps" vcodec="vp9">,
            <Stream: itag="135" mime_type="video/mp4" res="480p" fps="30fps" vcodec="avc1.4d401e">,
            <Stream: itag="244" mime_type="video/webm" res="480p" fps="30fps" vcodec="vp9">,
            <Stream: itag="134" mime_type="video/mp4" res="360p" fps="30fps" vcodec="avc1.4d401e">,
            <Stream: itag="243" mime_type="video/webm" res="360p" fps="30fps" vcodec="vp9">,
            <Stream: itag="133" mime_type="video/mp4" res="240p" fps="30fps" vcodec="avc1.4d4015">,
            <Stream: itag="242" mime_type="video/webm" res="240p" fps="30fps" vcodec="vp9">,
            <Stream: itag="160" mime_type="video/mp4" res="144p" fps="30fps" vcodec="avc1.4d400c">,
            <Stream: itag="278" mime_type="video/webm" res="144p" fps="30fps" vcodec="vp9">,
            <Stream: itag="140" mime_type="audio/mp4" abr="128kbps" acodec="mp4a.40.2">,
            <Stream: itag="171" mime_type="audio/webm" abr="128kbps" acodec="vorbis">,
            <Stream: itag="249" mime_type="audio/webm" abr="50kbps" acodec="opus">,
            <Stream: itag="250" mime_type="audio/webm" abr="70kbps" acodec="opus">,
            <Stream: itag="251" mime_type="audio/webm" abr="160kbps" acodec="opus">]
        
        
        Pytube allows you to filter on every property available (see the documentation for the complete list), let's take a look at some of the most useful ones.
        
        To list the audio only streams:
        
        .. code-block:: python
        
            >>> yt.streams.filter(only_audio=True).all()
            [<Stream: itag="140" mime_type="audio/mp4" abr="128kbps" acodec="mp4a.40.2">,
            <Stream: itag="171" mime_type="audio/webm" abr="128kbps" acodec="vorbis">,
            <Stream: itag="249" mime_type="audio/webm" abr="50kbps" acodec="opus">,
            <Stream: itag="250" mime_type="audio/webm" abr="70kbps" acodec="opus">,
            <Stream: itag="251" mime_type="audio/webm" abr="160kbps" acodec="opus">]
        
        
        To list only ``mp4`` streams:
        
        .. code-block:: python
        
            >>> yt.streams.filter(subtype='mp4').all()
            [<Stream: itag="22" mime_type="video/mp4" res="720p" fps="30fps" vcodec="avc1.64001F" acodec="mp4a.40.2">,
            <Stream: itag="18" mime_type="video/mp4" res="360p" fps="30fps" vcodec="avc1.42001E" acodec="mp4a.40.2">,
            <Stream: itag="137" mime_type="video/mp4" res="1080p" fps="30fps" vcodec="avc1.640028">,
            <Stream: itag="136" mime_type="video/mp4" res="720p" fps="30fps" vcodec="avc1.4d401f">,
            <Stream: itag="135" mime_type="video/mp4" res="480p" fps="30fps" vcodec="avc1.4d401e">,
            <Stream: itag="134" mime_type="video/mp4" res="360p" fps="30fps" vcodec="avc1.4d401e">,
            <Stream: itag="133" mime_type="video/mp4" res="240p" fps="30fps" vcodec="avc1.4d4015">,
            <Stream: itag="160" mime_type="video/mp4" res="144p" fps="30fps" vcodec="avc1.4d400c">,
            <Stream: itag="140" mime_type="audio/mp4" abr="128kbps" acodec="mp4a.40.2">]
        
        
        Multiple filters can also be specified:
        
        .. code-block:: python
        
            >>> yt.streams.filter(subtype='mp4', progressive=True).all()
            >>> # this can also be expressed as:
            >>> yt.streams.filter(subtype='mp4').filter(progressive=True).all()
            [<Stream: itag="22" mime_type="video/mp4" res="720p" fps="30fps" vcodec="avc1.64001F" acodec="mp4a.40.2">,
            <Stream: itag="18" mime_type="video/mp4" res="360p" fps="30fps" vcodec="avc1.42001E" acodec="mp4a.40.2">]
        
        You also have an interface to select streams by their itag, without needing to filter:
        
        .. code-block:: python
        
            >>> yt.streams.get_by_itag(22)
            <Stream: itag="22" mime_type="video/mp4" res="720p" fps="30fps" vcodec="avc1.64001F" acodec="mp4a.40.2">
        
        
        If you need to optimize for a specific feature, such as the "highest resolution" or "lowest average bitrate":
        
        .. code-block:: python
        
            >>> yt.streams.filter(progressive=True).order_by('resolution').desc().all()
        
        Note that ``order_by`` cannot be used if your attribute is undefined in any of the Stream instances, so be sure to apply a filter to remove those before calling it.
        
        If your application requires post-processing logic, pytube allows you to specify an "on download complete" callback function:
        
        .. code-block:: python
        
            >>> def convert_to_aac(stream, file_handle):
                    # do work
            >>> yt.register_on_complete_callback(convert_to_aac)
        
        
        Similarly, if your application requires on-download progress logic, pytube exposes a callback for this as well:
        
        .. code-block:: python
        
            >>> def show_progress_bar(stream, chunk, file_handle, bytes_remaining):
                    # do work
            >>> yt.register_on_progress_callback(show_progress_bar)
        
        
        
        Command-line interface
        ======================
        
        pytube also ships with a tiny cli interface for downloading and probing videos.
        
        Let's start with downloading:
        
        .. code-block:: bash
        
            pytube http://youtube.com/watch?v=9bZkp7q19f0 --itag=22
        
        To view available streams:
        
        .. code-block:: bash
        
            pytube http://youtube.com/watch?v=9bZkp7q19f0 --list
        
        
        Finally, if you're filing a bug report, the cli contains a switch called ``--build-playback-report``, which bundles up the state, allowing others to easily replay your issue.
        
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Natural Language :: English
Classifier: Operating System :: MacOS
Classifier: Operating System :: Microsoft
Classifier: Operating System :: POSIX
Classifier: Operating System :: Unix
Classifier: Programming Language :: Python :: 2.6
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3.3
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python
Classifier: Topic :: Internet
Classifier: Topic :: Multimedia :: Video
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: Terminals
Classifier: Topic :: Utilities
