Divide and Conquer

[Python] from pytube import Playlist로 유튜브 영상 정보 확인 본문

성장캐/기타

[Python] from pytube import Playlist로 유튜브 영상 정보 확인

10살 2023. 4. 28. 14:21
728x90

정보 받아서 출력

설명과 내용을 잘 담았군... 하필 링크를 애매한 걸 썼네 ㅋㅋㅋ

from pytube import Playlist

# 심층강화학습(Deep Reinforcement Learning)
url = 'https://youtube.com/playlist?list=PLalDxVXf3NHe8s6o7crR0F2yFKpGhNJZw'

playlist = Playlist(url)
print('동영상 재생목록 수: %s' % len(playlist.video_urls)) 
print('재생목록 제목: %s' % playlist.title) 
print('-------------------------------------------------\n')

def detail(yt, output):
    contents = {"조회수": yt.views, 
                "길이": yt.length, 
                "설명": yt.description
                }.get(output, "알 수 없습니다.") 
    print(f'\n제목>>> {yt.title} \n{output}>>> {contents}')
    
for video in playlist.videos:
    detail(video, "설명")

video라는 Playlist 객체에서 비디오가 어떻게 구성되어 있는지 확인 가능


구성 요소 출력

심층강화학습(Deep Reinforcement Learning) 제1강. 배경, 목적, Q-Learning, MDP, DQN
c:\Users\Automation\Downloads\pytube_playlist3.py:9: DeprecationWarning: Call to deprecated function all (This object can be treated as a list, all() is useless).
  for e in video.streams.all(): # 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="136" mime_type="video/mp4" res="720p" fps="30fps" vcodec="avc1.64001f" progressive="False" type="video">
<Stream: itag="247" mime_type="video/webm" res="720p" fps="30fps" vcodec="vp9" progressive="False" type="video">
<Stream: itag="135" mime_type="video/mp4" res="480p" fps="30fps" vcodec="avc1.4d400a" progressive="False" type="video">
<Stream: itag="244" mime_type="video/webm" res="480p" fps="30fps" vcodec="vp9" 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="133" mime_type="video/mp4" res="240p" fps="30fps" vcodec="avc1.4d400c" progressive="False" type="video">
<Stream: itag="242" mime_type="video/webm" res="240p" fps="30fps" vcodec="vp9" progressive="False" type="video">
<Stream: itag="160" mime_type="video/mp4" res="144p" fps="30fps" vcodec="avc1.4d400b" progressive="False" type="video">
<Stream: itag="278" mime_type="video/webm" res="144p" fps="30fps" vcodec="vp9" progressive="False" type="video">
<Stream: itag="140" mime_type="audio/mp4" abr="128kbps" acodec="mp4a.40.2" progressive="False" type="audio">
<Stream: itag="251" mime_type="audio/webm" abr="160kbps" acodec="opus" progressive="False" type="audio">
""" 출처
https://012vision.tistory.com/798
https://seolin.tistory.com/93?category=762768
"""

from pytube import Playlist

url = 'https://youtube.com/playlist?list=PLalDxVXf3NHe8s6o7crR0F2yFKpGhNJZw'
playlist = Playlist(url)
    
for video in playlist.videos:
    print('\n\n', video.title)
    for e in video.streams.all():
        print(str(e))

streams는 Query 객체로 처리, all()이나 first()를 같이 사용해야 함
mp4 확장자만 추출하기 위해 filter()를 사용할 수 있음

for e in video.streams.filter(file_extension='mp4').all():
	print(str(e))
 심층강화학습(Deep Reinforcement Learning) 제1강. 배경, 목적, Q-Learning, MDP, DQN
c:\Users\Automation\Downloads\pytube_playlist3.py:9: DeprecationWarning: Call to deprecated function all (This object can be treated as a list, all() is useless).
  for e in video.streams.filter(file_extension='mp4').all(): #
<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="136" mime_type="video/mp4" res="720p" fps="30fps" vcodec="avc1.64001f" progressive="False" type="video">
<Stream: itag="135" mime_type="video/mp4" res="480p" fps="30fps" vcodec="avc1.4d400a" progressive="False" type="video">
<Stream: itag="134" mime_type="video/mp4" res="360p" fps="30fps" vcodec="avc1.4d401e" progressive="False" type="video">
<Stream: itag="133" mime_type="video/mp4" res="240p" fps="30fps" vcodec="avc1.4d400c" progressive="False" type="video">
<Stream: itag="160" mime_type="video/mp4" res="144p" fps="30fps" vcodec="avc1.4d400b" progressive="False" type="video">
<Stream: itag="140" mime_type="audio/mp4" abr="128kbps" acodec="mp4a.40.2" progressive="False" type="audio">

가장 아래를 보면 mime_type="video/mp4"와 mime_type="audio/mp4"를 확인할 수 있음 
"audio/mp4"는 음성만 있는 파일

<Stream: itag="22" mime_type="video/mp4" res="720p" fps="30fps" vcodec="avc1.64001F" acodec="mp4a.40.2" progressive="True" type="video">
<Stream: itag="136" mime_type="video/mp4" res="720p" fps="30fps" vcodec="avc1.64001f" progressive="False" type="video">

비디오도 뭐는 acodec이 있고 뭐는 없음 
acodec이 없는 파일은 영상만 존재하는 파일(음성이 없음)

반응형
Comments