Ccmmutty logo
Commutty IT
5 min read

Pythonを使ってYoutube APIを取得せずに動画をダウンロードする方法(pytube)

https://cdn.magicode.io/media/notebox/d1abd71e-5145-470c-bf5f-039aedeba952.jpeg
1.Pytubeのインストール
!pip install pytube
Mac/Linuxの場合はpip3でどうぞ。
from pytube import YouTube
def downloadvideo(id):
    yt=YouTube(id)   
    yt.streams.filter(subtype='mp4').first().download('./path/where/you/want/to/save')
これだけです。
idをYouTube開いてリンクから持ってきます。((v=47dh4_d)みたいなやつ)
引数にぶち込みます。 後はダウンロードが終わるのを待つだけです。(物によりますが遅くはないと思います。)
ファイル名もタイトルなので分かりやすいです。
タイトルとかサムネイルのURLとかも取得できます。詳しくはドキュメント見てください。
pytubeのドキュメントを見ていると解像度別でダウンロードもできるみたいです。
>>> yt = YouTube('http://youtube.com/watch?v=2lAe1cqCOXo')
>>> yt.streams.filter(file_extension='mp4')
[<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="394" mime_type="video/mp4" res="None" fps="30fps" vcodec="av01.0.00M.08" progressive="False" type="video">,
<Stream: itag="140" mime_type="audio/mp4" abr="128kbps" acodec="mp4a.40.2" progressive="False" type="audio">]
>>> stream = yt.streams.get_by_itag(22)
>>> stream.download()
この場合itagが22のものをダウンロードしているので720pのものをダウンロードしていますね。
まあ他の動画でもやってみた感じitagは固定なのでしょうか? 18は360pの30fpsでした。 299/399は1080p/60fpsみたいです。
[<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="299" mime_type="video/mp4" res="1080p" fps="60fps" vcodec="avc1.64002a" progressive="False" type="video">, 
<Stream: itag="399" mime_type="video/mp4" res="1080p" fps="60fps" vcodec="av01.0.09M.08" progressive="False" type="video">, 
<Stream: itag="298" mime_type="video/mp4" res="720p" fps="60fps" vcodec="avc1.4d4020" progressive="False" type="video">, 
<Stream: itag="398" mime_type="video/mp4" res="720p" fps="60fps" vcodec="av01.0.08M.08" progressive="False" type="video">, 
<Stream: itag="135" mime_type="video/mp4" res="480p" fps="30fps" vcodec="avc1.4d401f" progressive="False" type="video">, 
<Stream: itag="397" mime_type="video/mp4" res="480p" fps="30fps" vcodec="av01.0.04M.08" progressive="False" type="video">, 
<Stream: itag="134" mime_type="video/mp4" res="360p" fps="30fps" vcodec="avc1.4d401e" progressive="False" type="video">, 
<Stream: itag="396" mime_type="video/mp4" res="360p" fps="30fps" vcodec="av01.0.01M.08" progressive="False" type="video">, 
<Stream: itag="133" mime_type="video/mp4" res="240p" fps="30fps" vcodec="avc1.4d4015" progressive="False" type="video">, 
<Stream: itag="395" mime_type="video/mp4" res="240p" fps="30fps" vcodec="av01.0.00M.08" progressive="False" type="video">, 
<Stream: itag="160" mime_type="video/mp4" res="144p" fps="30fps" vcodec="avc1.4d400c" progressive="False" type="video">, 
<Stream: itag="394" mime_type="video/mp4" res="144p" fps="30fps" vcodec="av01.0.00M.08" progressive="False" type="video">, 
<Stream: itag="139" mime_type="audio/mp4" abr="48kbps" acodec="mp4a.40.5" progressive="False" type="audio">, 
<Stream: itag="140" mime_type="audio/mp4" abr="128kbps" acodec="mp4a.40.2" progressive="False" type="audio">]
音声のみも指定できるみたいです。
ちなみに10分ほどの動画でitag:299でダウンロードしてみたら341MBありました。結構ありますね。
まとめ
とりあえずPytube有能。

Discussion

コメントにはログインが必要です。