yt.streams.get_by_resolution() returns None even though stream exists

Question:

I’m using pytube to download youtube videos as a part of a larger project.
This is the problem causing part:

from pytube import YouTube
yt = YouTube('https://www.youtube.com/watch?v=LXb3EKWsInQ&t=7s')
x = yt.streams.get_by_resolution('144p')
print(x) # output of this line is None

However if I run:

y = yt.streams.streams.all() 
print(y) # the output of this shows that several streams with res = '144p' exist

The output is:

<Stream: itag="22" mime_type="video/mp4" res="720p" fps="30fps" vcodec="avc1.64001F" acodec="mp4a.40.2" progressive="True" type="video">
<Stream: itag="313" mime_type="video/webm" res="2160p" fps="30fps" vcodec="vp9" progressive="False" type="video">
<Stream: itag="315" mime_type="video/webm" res="2160p" fps="60fps" vcodec="vp9" progressive="False" type="video">
<Stream: itag="337" mime_type="video/webm" res="2160p" fps="60fps" vcodec="vp9.2" progressive="False" type="video">
<Stream: itag="401" mime_type="video/mp4" res="None" fps="30fps" vcodec="av01.0.13M.10.0.110.09.16.09.0" progressive="False" type="video">
<Stream: itag="271" mime_type="video/webm" res="1440p" fps="30fps" vcodec="vp9" progressive="False" type="video">
<Stream: itag="308" mime_type="video/webm" res="1440p" fps="60fps" vcodec="vp9" progressive="False" type="video">
<Stream: itag="336" mime_type="video/webm" res="1440p" fps="60fps" vcodec="vp9.2" progressive="False" type="video">
<Stream: itag="400" mime_type="video/mp4" res="None" fps="30fps" vcodec="av01.0.12M.10.0.110.09.16.09.0" progressive="False" 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="335" mime_type="video/webm" res="1080p" fps="60fps" vcodec="vp9.2" progressive="False" type="video">
<Stream: itag="399" mime_type="video/mp4" res="None" fps="30fps" vcodec="av01.0.09M.10.0.110.09.16.09.0" 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="334" mime_type="video/webm" res="720p" fps="60fps" vcodec="vp9.2" progressive="False" type="video">
<Stream: itag="398" mime_type="video/mp4" res="None" fps="30fps" vcodec="av01.0.08M.10.0.110.09.16.09.0" 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="333" mime_type="video/webm" res="480p" fps="60fps" vcodec="vp9.2" progressive="False" type="video">
<Stream: itag="397" mime_type="video/mp4" res="None" fps="30fps" vcodec="av01.0.04M.10.0.110.09.16.09.0" 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="332" mime_type="video/webm" res="360p" fps="60fps" vcodec="vp9.2" progressive="False" type="video">
<Stream: itag="396" mime_type="video/mp4" res="None" fps="30fps" vcodec="av01.0.01M.10.0.110.09.16.09.0" 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="331" mime_type="video/webm" res="240p" fps="60fps" vcodec="vp9.2" progressive="False" type="video">
<Stream: itag="395" mime_type="video/mp4" res="None" fps="30fps" vcodec="av01.0.00M.10.0.110.09.16.09.0" 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="330" mime_type="video/webm" res="144p" fps="60fps" vcodec="vp9.2" progressive="False" type="video">
<Stream: itag="394" mime_type="video/mp4" res="None" fps="30fps" vcodec="av01.0.00M.10.0.110.09.16.09.0" 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">

Now, I can’t understand why yt.streams.get_by_resolution('144p') returns None even though stream exists.

More: It seems that for all resolutions on this video, other than 360p, None is returned.

Asked By: Suyash

||

Answers:

As per the docs, stream must be a progressive mp4.
If a progressive stream isn’t available, None is returned.

Answered By: Suyash
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.