PythonでYouTubeから動画をDLしたい
研究に使用する為にYouTubeから動画をDLしたい。
特にPythonであれば簡単にできるということが分かったので、メモしておこうと思う。
※2018/06/05時点での最新バージョン8.0.2でも動作確認済み
※著作権には気を付けて使用してください。
sudo pip3 install pytube
pytube : For Downloding YouTube Videos
基本的に、対話モードで実行しています。もちろん、システムに組み込む事もできます。
現在のディレクトリにYouTubeからファイルをDLする場合。
アップロードされている動画の種類によっては、.webm形式の動画か、.mp4形式の動画がDLされるようです。
from pytube import YouTube YouTube('DLしたいURL').streams.first().download()
画質を選択してDLする場合
まず最初にどの画質まで対応しているのか確認を行う。
from pytube import YouTube yt = YouTube('DLしたいURL') yt.streams.all() #もしくは,yt.fmt_streams
[<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="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">]
from pytube import YouTube yt = YouTube('DLしたいURL') yt.streams.desc().first().download()
で、いけます。
フィルター例
yt.streams.filter(mime_type="video/mp4").desc().first().download() #動画形式を選択 yt.streams.filter(fps="30fps").desc().fisrt().download() #FPSを選択
追記:
1080p対応の動画をダウンロードしたい場合は,
yt.streams.filter(adaptive=True).desc().first().download() yt.streams.filter(adaptive=True, mime_type="video/mp4").desc().first().download() #mp4を指定する場合
で行けます。
これでとりあえず1080p対応の物がダウンロードできるはずです。