pytube pythonでyoutubeの動画ダウンローダを作る

今回はyoutubeから動画のダウンロードを行うためのライブラリ、pytubeを用いてyoutubeのダウンローダを作成する方法についてです。

pytubeの導入から、実際にダウンロードを行うサンプルプログラムでの解説など、丁寧に説明していきたいと思います。

 

youtubeからダウンロードすることのできる動画の種類

youtubeに少し詳しい方ならわかると思いますが、youtubeで動画を視聴する際に画質を選択するボタンがあると思います。

動画によってまちまちですが、1080p HD、720p HD、480p、320p、、、
などなど、たくさんの種類の解像度が選択できるようになっています。

つまり、どの解像度の動画をダウンロードするかを選択して保存する必要があります。

pytubeで動画をダウンロードする際にも、
ダウンロードできる動画のリストを取得 -> その中から保存したいものを選ぶ

という流れでダウンロードを行なっていきます。

 

pytubeのインストール

早速、pytubeをインストールしていきましょう。

pytubeはpythonのパッケージ管理ツール、pipを用いてインストールすることができます。

この一行をターミナルに打ち込むだけで、pytubeが使用可能となります。

 

動画をダウンロードする一番シンプルなサンプルコード

まずはじめに、githubのチュートリアルにも記載されている一番シンプルなサンプルコードをみていきましょう。

チュートリアルのコードをsample1.pyとして記述した、ごくごくシンプルなサンプルコードになります。

このコードのv=xxxxxxxxxxの部分にyoutubeのアドレスの該当する文字列を記入すれば、これだけでも使用可能です。

 

<解説>

from pytube import YouTube
pytubeを使います。という宣言をここでしています。

YouTube( “http://youtube.com/watch?v=xxxxxxxxxx” ).streams.first().download()
この部分で、youtubeのアドレスからダウンロードできる動画のリストを取得しています。

YouTube( “http://youtube.com/watch?v=xxxxxxxxxx” ).streams.first().download()
末尾の部分で、リストの中の一番上のものをダウンロードする。といったオペレーションをしています。

 

感の良い方はお気づきかもしれませんが、こちらのサンプルコードはダウンロード可能なリストの一番上のものに決め打ちしてダウンロードしています。

なので、動画によっては180pという超超低画質なものがダウンロードされる可能性があったり、最悪の場合は音声のみのファイルや、動画のみのファイルがダウンロードされる場合もあります。

また、youtubeのアドレスをファイルを開いて毎回編集するという作業も必要となってしまいます。

そこで、このサンプルコードをベースに改良を加えていきます。

 

引数からのyoutubeアドレス入力に対応させたサンプルコード

先ほどのサンプルコードを改良してコマンドライン引数からyoutubeのアドレスを入力できるようにしてみます。

つまり、

このようにターミナルに入力することで動画をダウンロードできるようにしてみます。

 

 

<解説>

この部分では、引数の数のエラー処理を行なっています。
引数の数が正しくなかった場合にはここで処理を中止します。

 

引数の数が正しかった場合には、引数をダウンロードのリンクとしてpytubeの関数に渡します。

 

ダウンロード可能なリストの中から選択してダウンロードする

次に、ダウンロードできる動画リストを表示して、どれをダウンロードするかを選択できるように改良してみます。

 

先ほどのサンプルからさらに手を加えた所について解説していきます

<解説>

動画の保存先を指定できるようにしてみました。各自保存したい場所に変更して使用してください。
後で使用します。

 

この部分で、ダウンロード可能なリストをコンソールに表示しています。
例えば某動画の場合、リストは以下のような形で表示されます。

このように、動画リストにはitagと呼ばれる識別子がついています。
今回はこのitagを指定することで、ダウンロードする動画を指定します。

ダウンロードできるファイルにも様々なものがあり、mime_type が video/mp4 となっているのが動画ファイルとなります。
audio/mp4 となっているのは音声のみのファイルとなります。
また、video/mp4 となっているものでも、高解像度のものは動画のみのものがあることもありますので注意が必要です。

mime_typeが video/webm となっているものもあり、こちらも動画ファイルなのですが、mp4の方がメジャーで使いやすいと思いますので、特にこだわりがないのであればmp4のものを指定してあげれば良いと思います。

 

この部分では、ユーザのitag入力を読み込む部分となります。

コンソールにはこのように表示されるので、>>>の後にitagを打ち込み、エンターを押します。
例えば、先ほどのリストで video/mp4 の720p ( itag : 136 )の動画が欲しいなら、

136とタイプしてエンターを押します。

 

この部分にて、先ほど入力したitagをもつ動画をダウンロードしてきます。

.download( download_directory )
とすることで、動画の保存先を指定することができます。

 

 

以上、pytubeの使い方でした。