個人的なまとめ。

てきとーに何か書きます。

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対応の物がダウンロードできるはずです。