【Python】pytubeを使ってYouTubeの動画を3行でダウンロードしてみよう!【超簡単】

  • 2020年4月23日
  • 2020年5月4日
  • Python

こんにちは!

YouTubeの動画をダウンロードしたいと思ったことはありますか?

Python初心者
動画をダウンロードできたらいつでも動画を見れるね!

Pythonのpytubeというライブラリを使えばYouTubeの動画を超簡単にダウンロードすることができます。

今回の記事では、pytubeを使った以下の方法を紹介します。

  • たったの3行でダウンロードする方法
  • フォーマット等を選択してダウンロードする方法

pytubeについて

pytubeとは

pytubeとは、YouTubeの動画をダウンロードするために作られた、Pythonライブラリです。

以下にgithubアカウントのリンクを載せます。

GitHub

A lightweight, dependency-free Python library (and command-l…

pytubeのインストール方法

pytubeのインストールは以下のようになります。

pip install pytube
このインストール方法では、プログラム上でインポートした際に次のエラーが発生する場合があります。
ImportError: cannot import name 'quote' from 'pytube.compat'

上記のエラーが発生した場合は、一度pytubeをアンインストールし(pip uninstall pytube)下記のインストール方法を試してください。(ちなみに僕の場合はエラーが発生しました。)

pip install pytube3

このインストール方法を行うと、しっかりとエラーが出ずにインポートできるようになるはずです。

YouTube動画のダウンロード

pytubeを使って3行でダウンロード

まずは、一番簡単な方法を見ていきましょう。

たったの3行でYouTubeの動画をダウンロードできます。

以下のプログラムは、3行でYouTubeの動画をダウンロードするプログラムです。

import pytube

#保存したいYouTube動画のURLを入力
url = input("url:")

#保存したい動画のフォーマットリストの先頭の動画を保存
youtube = pytube.YouTube(url).streams.first().download()

解説

youtube = pytube.YouTube(url).streams.first().download()

この部分で、YouTube動画のフォーマットリストを得ることができます。

youtube = pytube.YouTube(url).streams.first().download()

この部分で、先ほど得たフォーマットリストの先頭のフォーマットの動画をダウンロードします。

実行結果

上記のようなmp4ファイルがカレントディレクトリにダウンロードされます。

今回は、ヒカキンのアベマスクレビューの動画をダウンロードしました。

動画を保存するフォルダを指定したい場合は、download()のカッコ内に指定しましょう。

フォーマットを指定してダウンロード

先ほどの3行のプログラムでは、簡単に行えるようにフォーマットリストの先頭のフォーマットで動画をダウンロードしました。

ですが、もちろんフォーマットを選択して動画をダウンロードすることができます。

まず、フォーマットリストの中身を全て表示してみましょう。

以下のプログラムは、利用可能なフォーマットを全て表示するプログラムです。

import pytube

url = input("url:")

format_list = pytube.YouTube(url).streams.all()

for format in format_list:
    print(format)

実行結果

<Stream: itag="18" mime_type="video/mp4" res="360p" fps="30fps" vcodec="avc1.42001E" acodec="mp4a.40.2" progressive="True" type="video">
<Stream: itag="22" mime_type="video/mp4" res="720p" fps="30fps" vcodec="avc1.64001F" acodec="mp4a.40.2" progressive="True" type="video">
<Stream: itag="137" mime_type="video/mp4" res="1080p" fps="30fps" vcodec="avc1.640028" progressive="False" type="video">
<Stream: itag="248" mime_type="video/webm" res="1080p" fps="30fps" vcodec="vp9" progressive="False" type="video">
<Stream: itag="299" mime_type="video/mp4" res="1080p" fps="60fps" vcodec="avc1.64002a" progressive="False" type="video">
<Stream: itag="303" mime_type="video/webm" res="1080p" fps="60fps" vcodec="vp9" progressive="False" type="video">
<Stream: itag="136" mime_type="video/mp4" res="720p" fps="30fps" vcodec="avc1.4d401f" progressive="False" type="video">
<Stream: itag="247" mime_type="video/webm" res="720p" fps="30fps" vcodec="vp9" progressive="False" type="video">
<Stream: itag="298" mime_type="video/mp4" res="720p" fps="60fps" vcodec="avc1.4d4020" progressive="False" type="video">
<Stream: itag="302" mime_type="video/webm" res="720p" fps="60fps" vcodec="vp9" progressive="False" type="video">
<Stream: itag="135" mime_type="video/mp4" res="480p" fps="30fps" vcodec="avc1.4d401f" progressive="False" type="video">
<Stream: itag="244" mime_type="video/webm" res="480p" fps="30fps" vcodec="vp9" progressive="False" type="video">
<Stream: itag="134" mime_type="video/mp4" res="360p" fps="30fps" vcodec="avc1.4d401e" progressive="False" type="video">
<Stream: itag="243" mime_type="video/webm" res="360p" fps="30fps" vcodec="vp9" progressive="False" type="video">
<Stream: itag="133" mime_type="video/mp4" res="240p" fps="30fps" vcodec="avc1.4d4015" progressive="False" type="video">
<Stream: itag="242" mime_type="video/webm" res="240p" fps="30fps" vcodec="vp9" progressive="False" type="video">
<Stream: itag="160" mime_type="video/mp4" res="144p" fps="30fps" vcodec="avc1.4d400c" progressive="False" type="video">
<Stream: itag="278" mime_type="video/webm" res="144p" fps="30fps" vcodec="vp9" progressive="False" type="video">
<Stream: itag="140" mime_type="audio/mp4" abr="128kbps" acodec="mp4a.40.2" progressive="False" type="audio">
<Stream: itag="249" mime_type="audio/webm" abr="50kbps" acodec="opus" progressive="False" type="audio">
<Stream: itag="250" mime_type="audio/webm" abr="70kbps" acodec="opus" progressive="False" type="audio">
<Stream: itag="251" mime_type="audio/webm" abr="160kbps" acodec="opus" progressive="False" type="audio">

このように多くのフォーマットが用意されています。

各フォーマットに「itag」というタグがつけられているのがわかると思います。

このタグを指定することでフォーマットを選択します。

上記のプログラムに、以下のプログラムを追記しましょう。

以下のプログラムは、itagを指定して、YouTubeの動画をダウンロードするプログラムです。

itag = input("itag:")
youtube_dl = youtube.streams.get_by_itag(itag).download()

カレントディレクトリにitagで指定したフォーマットの動画がダウンロードされます。

まとめ

今回の記事では、以下の方法を紹介しました。

  • たったの3行でダウンロードする方法
     →URLを指定するだけでダウンロード可能
  • フォーマット等を選択してダウンロードする方法
     →「itag」を指定
Python初心者
これでYouTube動画をダウンロードできるようになったよ!

応用すれば様々なサービスができそうな予感がしますね。

とても簡単にできるので、皆さんも試しにやってみてはいかがでしょうか?