- 이번 프로그램은 파이썬을 이용하여 유튜브 동영상을 다운로드 하는 프로그램으로 프로그램 실행 시 다운로드 진행율을 표시해 주고, 다운로드가 완료되면 해당 동영상의 다운로드가 완료되었다고 보여주는 간단한 프로그램입니다.
(본 블로그의 내용은 유튜브 동영상(파이썬 유튜브 동영상 다운로드 프로그램 만들기(making YouTube Download Program by python))에서 더욱 자세히 보실 수 있습니다.)
(1) 프로그램 실행시 다운로드 진행율을 알려주고, 지정된 폴더에 유튜브 동영상을 다운로드 해줍니다.
from pytube import YouTube
url = 'https://www.youtube.com/watch?v=4ASVa2HPr6M&t=9s'
yt = YouTube(url)
title = yt.title
print("[영상 제목]", yt.title) # 영상제목
print("[영상 게시자]", yt.author) # 영상 게시자
print("[조회수]", yt.views)
print("[평균평점]", yt.rating) # 평균 평점
print("[영상길이(초)]", yt.length)
print("[연령제한여부]", yt.age_restricted)
print("[영상 설명]", yt.description) # 영상 설명
print("[썸네일URL]", yt.thumbnail_url,"\n\n") # 썸네일 url 주소
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')
yt = YouTube(url, on_progress_callback=on_progress).streams.filter(res="720p").first().download('./imsi')
print(title,"(",url,")", " 가 다운로드 완료 되었습니다.\n")
print("#############################################################\n")
# pytube 모듈 설치
> python -m pip install pytube
# 소스(소스명:pytube3.py) 실행
> python pytube3.py
1. from pytube import YouTube <-- 'pytube 패키지에서 YouTube 모듈부분을 사용하겠다' 라는의미
2. yt = YouTube(url) <-- 유튜브 영상의 정보를 뽑아내서 yt변수에 저장
3. title = yt.title <-- 하단의 다운로드 완료 메시지를 뿌리는데 사용하기 위해 keep해 둠
4. print("[영상 제목]", yt.title) <-- 영상의 각종 정보를 보여줌
5. def on_progress() <-- 영상의 다운로드 진행율을 표시하기 위해 사용자 정의 함수로 만들어 둠
6. on_progress_callback=on_progress <-- 콜백에 내가 만든 사용자 정의 함수(on_progress)를 지정, 만일 사용자 정의 함수가 없는 경우 디폴드 함수(on_progress로 이름이 동일함)가 실행됨
7. streams.filter(res="720p") <-- 영상의 화질을 지정
8. download('./imsi') <-- 다운로드 폴더를 지정
아래 세부 설명을 위해 단계별(Part I, Part II, Part III)로 나누어서 설명드리겠습니다.
Part I. 기본
-기본적인 유튜브 동영상 다운로드 버전입니다.
from pytube import YouTube
from pytube.cli import on_progress
link = 'https://www.youtube.com/watch?v=4ASVa2HPr6M&t=9s'
# link=input('enter url:')
yt=YouTube(link,on_progress_callback=on_progress) # on_progress_callback 으로 on_progress를 지정하거나, 사용자 정의 함수를 지정할 수 있음
videos=yt.streams.first() # 첫번째 스트림을 가져옴
videos.download()
print("################# 다운로드 완료 #############################")
1.아래 사이트에서 pytube 모듈의 전반적인 사용방법을 보실 수 있으며, 자세한 내용은 pytube.io 에서 확인 가능합니다.
먼저, 모듈을 pip로 설치하셔야 합니다.
https://github.com/pytube/pytube
2. 아래와 같이 소스를 작성합니다.
from pytube.cli import on_progress <-- 디폴트 함수 on_progress 을 사용해야 하므로 모듈을 선언해 줍니다.
그리고, 다운로드 받을 유튜브 주소를 복사하여 link변수에 할당 후 유튜브 모듈(YouTube(link, on_progress_callback=on_progress) )을 yt변수에 할당합니다. 그리고 스트림을 가져와서 다운로드 합니다.
3. 실제 실행하면 아래와 같이 진행상태 bar가 나타나고 완료됩니다.
4. 폴더에 가서 확인한 결과 프로그램을 실행한 폴더에 잘 다운로드 된 것을 확인할 수 있습니다.
5. 그런데, 문제가 있습니다. 실제 동영상을 확인해 보니 화질이 너무 좋지 않아 내용을 확인하기가 어렵습니다.
아래에서 우리는 이문제를 해결할 것입니다.
Part II. 응용
-기본적인 유튜브 동영상 다운로드 버전을 응용한 버전입니다.
from pytube import YouTube
# from pytube.cli import on_progress #this module contains the built in progress bar.
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')
#
url = 'https://www.youtube.com/watch?v=4ASVa2HPr6M&t=9s'
# yt = YouTube(url, on_progress_callback=on_progress)
yt = YouTube(url, on_progress_callback=on_progress).streams.filter(res="720p").first().download()
1. def on_progress(vid, chunk, bytes_remaining): <-- 사용자 정의 함수를 지정하였습니다. 사실 이 함수는 없어도 무방합니다. 만일 이 함수가 없으면 pytube의 내장 기본 함수인 on_progress(함수 이름이 동일함)가 실행됩니다.
아래에서는 내가 만든 사용자정의 함수인 on_progress()를 만들어 지정하였고(따라서 from pytube.cli import on_progress <-- 모듈을 임포트할 필요가 없음), 화질도 720p(streams.filter(res="720p"))로 올려 줬습니다.
2. 실제 실행 결과 다운로드 시 파일이 얼마나 받아졌는지 진행율과 전체크기, 다운로드된 사이즈 및 남은 사이즈를 보여주고 있습니다.
3. 최종 완료 이후 프로그램을 실행한 폴더에 가서 확인한 결과 해당 경로에 잘 받아진 것을 확인할 수 있습니다. 화질을 높였더니 '.mp4' 확장자로 받아진 것으로 알 수 있습니다.
4. 영상을 실행해 보니 이전보다 화질이 많이 좋아진 것을 확인할 수 있습니다.
Part III. 응용2
-기본적인 유튜브 동영상 다운로드 버전을 응용한 버전을 다시 몇가지 기능을 추가한 버전입니다.
from pytube import YouTube
url = 'https://www.youtube.com/watch?v=4ASVa2HPr6M&t=9s'
yt = YouTube(url)
title = yt.title
print("[영상 제목]", yt.title) # 영상제목
print("[영상 게시자]", yt.author) # 영상 게시자
print("[조회수]", yt.views)
print("[평균평점]", yt.rating) # 평균 평점
print("[영상길이(초)]", yt.length)
print("[연령제한여부]", yt.age_restricted)
print("[영상 설명]", yt.description) # 영상 설명
print("[썸네일URL]", yt.thumbnail_url,"\n\n") # 썸네일 url 주소
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')
yt = YouTube(url, on_progress_callback=on_progress).streams.filter(res="720p").first().download('./imsi')
print(title,"(",url,")", " 가 다운로드 완료 되었습니다.\n")
print("#############################################################\n")
1. 다른 부분은 Part II와 동일하며, 다운로드 시 폴더를 지정할 수 있도록 download('./imsi') 와 같이 imsi폴더를 지정해 주었습니다.
2. 영상 다운로드 시 다운받은 영상의 기본적 정보를 표시해주고, 다운로드 상태를 보여준 다음 다운로드가 완료되었습니다.
3. 지정한 './imsi' 폴더에 잘 다운로드 된 것을 확인 할 수 있습니다.
>pip install --upgrade pytube
위의 내용이 유익하셨다면, 좋아요와 구독 부탁드립니다.
감사합니다.
'파이썬 실습 > 유튜브 동영상 다운로드 프로그램 만들기' 카테고리의 다른 글
파이썬 유튜브 동영상 한꺼번에 다운로드 하는 프로그램 만들기 (0) | 2022.10.22 |
---|