파이썬 실습/유튜브 동영상 다운로드 프로그램 만들기

파이썬 유튜브 동영상 한꺼번에 다운로드 하는 프로그램 만들기

파기차차 2022. 10. 22. 15:06
728x90
반응형
SMALL
728x90

ㅁ 개요

 

O 프로그램 소개
 

 - 이번 프로그램은 이전 프로그램(2022.10.22 - [파이썬 실습/유틸리티] - 파이썬 유튜브 동영상 다운로드 프로그램 만들기)과 유사하나 유튜브 동영상(재생목록)을 한꺼번에 다운로드하는 프로그램입니다.

(본 블로그의 내용은 유튜브 동영상(파이썬 유튜브 동영상 한꺼번에 다운로드하는 프로그램 만들기(making YouTube Download Program all at once by python))에서 더욱 자세히 보실 수 있습니다.)

 

 

O 완성된 프로그램 실행 화면
 
 - 최종 완성된 프로그램의 결과화면은 아래와 같습니다.

(1) 프로그램 실행시 재생목록의 전체 영상 개수를 보여주고, 순차적으로 하나씩 다운로드 진행율을 표시하면서 지정된 폴더로 영상 다운로드가 진행됩니다.

 

 

 

(2) 지정된 폴더(imsi)에 재생목록의 모든 영상(예: 10개)이 저장(다운로드)된 것을 확인 할 수 있습니다.

 

 

 

 


 

ㅁ 세부 내용
 
O 완성된 소스

 

from pytube import Playlist
url = 'https://www.youtube.com/watch?v=4ASVa2HPr6M&list=PL-c3IMzE1Ofo3QFnr2bUYsELEz4wcgTx3'
playlist = Playlist(url)
print('동영상 재생목록 수: %s' % len(playlist.video_urls))
print('재생목록 제목: %s' % playlist.title)
num = len(playlist.video_urls)

def on_progress(vid, chunk, bytes_remaining):
    total_size = vid.filesize
    bytes_downloaded = total_size - bytes_remaining
    percentage_of_completion = bytes_downloaded / total_size * 100
    totalsz = (total_size/1024)/1024
    totalsz = round(totalsz,1)
    remain = (bytes_remaining / 1024) / 1024
    remain = round(remain, 1)
    dwnd = (bytes_downloaded / 1024) / 1024
    dwnd = round(dwnd, 1)
    percentage_of_completion = round(percentage_of_completion,2)

    #print(f'Total Size: {totalsz} MB')
    print(f'Download Progress: {percentage_of_completion}%, Total Size:{totalsz} MB, Downloaded: {dwnd} MB, Remaining:{remain} MB')

path = './imsi'
i = 1
for video in playlist.videos: # playlist의 영상을 하나씩 돌면서
    video.register_on_progress_callback(on_progress) # 다운로드 상태를 보여주기 위해 사용자 정의 함수(on_progress())를 호출하고,
    video.streams.filter(res="360p").first().download(path) # 화질과 다운로드 패스를 지정 후
    print(i," 번째 동영상이 다운로드 되었습니다.","(",video.title,")\n") # 영상이 다운로드 되면 안내 메시지를 보여줌
    i = i + 1

print(num, "개의 동영상이 모두 다우로드 완료되었습니다.")

 

O 소스 다운로드
 - 소스파일 다운로드 후 cmd 또는 파워쉘, 비주얼스튜디오코드 등에서 아래와 같이 실행하시기 바랍니다.
# pytube 모듈 설치
> python -m pip install pytube
# 소스(소스명:pytube_playlist1.py) 실행
> python pytube_playlist1.py
 

pytube_playlist1.py
0.00MB

 

 

 

 


 
 
O 핵심 내용

 

1. from pytube import Playlist <-- 'pytube 패키지에서 Playlist 모듈부분을 사용하겠다' 라는의미

2. len(playlist.video_urls) <-- 재생목록의 영상의 개수 (갯수 확인을 위해 len()함수 사용)

3. playlist.title <-- 재생목록의 제목(영상의 제목이 아님)

4. video.title <-- 재생목록 내 영상의 제목

5. num = len(playlist.video_urls) <-- 최종 다운로드 완료 시 받은 전체 개수를 표시하기 위해 num변수에 저장

6. def on_progress() <-- 영상의 다운로드 진행율을 표시하기 위해 사용자 정의 함수로 만들어 둠

7. path = './imsi' <-- 영상을 다운로드 받을 위치 지정

8. video.register_on_progress_callback(on_progress) <-- 재생목록 내 영상의 다운로드 상태를 표시하기 위해 'register_on_progress_callback(on_progress)'와 같은 표현을 사용

 


 

O 기본 내용

 

 

1. 다른 부분은 이전 영상과 유사하며, for문을 이용하여 재생목록의 내의 영상을 하나씩 확인 후 다운로드 상태를 표시하기 위해 on_progress()함수를 호출하고, 스트림에 화질설정과 다운로드 경로를 지정 후, 영상이 다운로드 될때마다 안내 메시지를 뿌려줍니다.

 

 

 

2. 실제 프로그램 실행 시 재생목록 수, 다운로드 상태(진행율, 영상의 전체 크기/다운로드된 사이즈/남은사이즈)를 보여주고, 다운로드가 진행됩니다.

 

 

 

3. 지정된 폴더에 가서 확인한 결과 동영상이 모두 다운로드된 것을 확인 할 수 있습니다.

 

 

 

 


 

ㅁ 정리
 
O 우리가 배운 내용
 
 - 오늘은 파이썬으로 유튜브 동영상의 재생목록을 한꺼번에 다운로드하는 프로그램을 만들어 보았습니다.
 - 오늘 우리가 배운 내용을 간단히 정리해 보면 다음과 같습니다.
 > 1. 'from pytube import Playlist' 와 같이 모듈 임포트
 > 2. 다운로드할 유튜브 동영상 url 주소 복사 후
 > 3. on_progress()함수 사용자 정의(선택사항)
 > 4. for문을 이용하여 재생목록 내 영상을 하나씩 확인 후
 > 5. 'video.register_on_progress_callback(on_progress)' 구문을 이용하여 다운로드 상태를 보여주고,
 > 6. 유튜브 영상 다운로드시 화질(예: 360p)과 다운로드 폴더를 설정(예: download(path) )
 
올려드린 프로그램이 간혹 작동되지 않는 경우가 있습니다. 이 문제의 대부분의 원인은 pytube 모듈이 업데이트 되었기 때문인데, 아래와 같이 해보시고 그래도 안되시면 댓글을 남겨주시기 바랍니다.
>pip install --upgrade pytube
 
 
 

 

위의 내용이 유익하셨다면, 좋아요와 구독 부탁드립니다.

 

 

감사합니다.

 

728x90
반응형
LIST