goodthings4me.tistory.com
예전에 파이썬 라이브러리로 유튜브 영상을 추출하는 소스코드를 올렸다가 라이브러리의 코드 에러가 발생하여 사용을 못했는데 라이브러리가 수정되어 최근에 다시 반영하였다. 이에 유튜브 영상 다운로드하는 프로그램을 파이썬 tkinter로 만들어보고 소스코드와 프로그램을 올려본다.
※이전 포스팅 글
유튜브 다운로드 에러 - 파이썬 pytube 오류 조치
유튜브 영상 다운로드 (파이썬 라이브러리 pytube.YouTube)
(위 포스팅은 참고 사이트이며, 소스코드와 프로그램은 여기를 참고하면 됨)
유튜브 동영상 추출 및 저장하는 소스코드와 다운로드 프로그램
☞ 프로그램 다운로드 : 네이버 MyBox에서 공유
[유튜브 영상 다운로드(파일 1개씩) 파이썬 소스 코드]
from tkinter import *
import tkinter.messagebox as msgbox
import os
import webbrowser
from pytube import YouTube
from pytube.cli import on_progress
root = Tk()
root.title('Youtube 영상 추출')
root.geometry('450x410+700+100')
root.resizable(False, False)
def youtube_download(file_url):
# 저장 폴더 만들기
save_folder = './youtube_download'
if not os.path.exists(save_folder):
os.mkdir(save_folder)
else:
pass
yt = YouTube(file_url, on_progress_callback=on_progress)
print(yt.title)
list_content_view.delete(0, END) # 리스트박스 내 모든 item 제거
list_content_view.insert(END, '다운로드 파일명 : ')
if len(yt.title) <= 40:
title1 = yt.title
list_content_view.insert(END, title1)
else:
title1 = yt.title[:41]
title2 = yt.title[41:]
list_content_view.insert(END, title1)
list_content_view.insert(END, title2)
list_content_view.insert(END, f'영상 길이 : {yt.length} sec. [{str(yt.length // 60).zfill(2)}:{str(yt.length % 60).zfill(2)}]')
list_content_view.update()
list_content_view.insert(END, '=============================================')
list_content_view.insert(END, '파일을 받는중입니다. 하단 "실행중..." 표시가')
list_content_view.insert(END, '"추출 작업 완료!!"로 변경될 때까지 조금만 기다리세요.')
list_content_view.insert(END, '=============================================')
list_content_view.update()
down_clip = yt.streams.get_highest_resolution().download(save_folder)
list_content_view.insert(END, '파일 다운로드 완료...')
list_content_view.update()
# 프로그램 닫기
def func_quit():
root.quit() # root.destroy()
# 시작 버튼
def start():
# 입력란이 비었는지 확인
if not len(txt_entry_url.get()):
msgbox.showwarning('Info', '유튜브 주소(URL)를 입력하세요!')
return
url = txt_entry_url.get()
if len(txt_entry_url.get()):
state_var.set(f'실행중.....')
root.update_idletasks()
file_list = youtube_download(url) # 함수 호출
state_var.set('추출 작업 완료..!!')
else:
msgbox.showerror('오류', '내용을 정확하게 입력하세요!')
return
def read_me():
msgbox.showwarning('Info', '유튜브 주소(URL)의 영상을 추출하여 파일로 저장합니다.\n\n'
'유튜브 주소(URL)를 마우스로 드래그하여 복사하거나,\n'
'유튜브 영상 위에서 마우스 우클릭 후 "동영상 URL 복사"를\n'
'클릭합니다.\n\n'
'프로그램 입력란("유튜브 URL:")에 붙여넣기(Ctrl+V) 한 후\n'
'"추출 시작" 버튼을 클릭하면 실행이 됩니다.\n\n'
'유튜브 웹페이지 소스 코드가 바뀌면 실행이 안 될수 있습니다.\n\n'
'잘못된 URL을 입력하면 영상 추출이 안되거나 오류가 발생하여\n'
'프로그램이 중지될 수 있습니다.\n\n'
'궁금한 사항은 haemil40@nate.com 으로 문의해주세요.')
def callback(url):
webbrowser.open_new(url)
# 사용법 표시 들어갈 공간
lbl_use_frame = Frame(root)
lbl_use_frame.pack(fill='x', padx=2, pady=2)
txt_url = '유튜브 영상 다운로드 >>>'
lbl_url_txt = Label(lbl_use_frame, text=txt_url, font=('Helveticabold', 11, 'bold'), justify='left', fg='blue', cursor='hand2')
lbl_url_txt.pack(side='left', fill='x', padx=7, pady=5, ipadx=1)
lbl_url_txt.bind('<Button-1>', lambda e: callback('https://blog.naver.com/borame365/222594667168'))
# URL 입력 설명 LabelFrame
url_frame = LabelFrame(root, text="유튜브 URL 입력 후 '추출 시작' 버튼을 클릭하세요.")
url_frame.pack(fill="x", padx=10, pady=5, ipady=5)
# URL 입력 레이블
lbl_url = Label(url_frame, text='유튜브 URL :', width=10)
lbl_url.configure(font=('Arial', 10, 'bold'))
lbl_url.pack(side='left', padx=5, pady=5)
# URL 입력 란
txt_entry_url = Entry(url_frame)
txt_entry_url.insert(0, '')
txt_entry_url.pack(side='left', fill='x', expand=True, padx=5, pady=5)
# URL 추출 - 텍스트 파일 저장 알림
lbl_ex_frame = Frame(root)
lbl_ex_frame.pack(fill='x', padx=8, pady=0)
lbl_ex_url1 = Label(lbl_ex_frame, text='* youtube_download 폴더에 영상 다운로드됨')
lbl_ex_url1.pack(side='left')
# URL 입력 레이블 - 오른쪽(Read Me)
btn_url = Button(lbl_ex_frame, text='Read Me', width=7, command=read_me)
btn_url.pack(side='right', padx=5, pady=5)
# 리스트 프레임 - 데이터 추출 시 보이게 하는 Listbox 공간의 프레임
list_frame = Frame(root)
list_frame.pack(fill='both', padx=10, pady=5)
# 리스트박스 우측 스크롤
scrollbar = Scrollbar(list_frame)
scrollbar.pack(side='right', fill='y')
# 리스트박스 - 데이터 출력 현황 보이게 하는 곳
list_content_view = Listbox(list_frame, height=8, yscrollcommand=scrollbar.set)
list_content_view.pack(side='left', fill='both', expand=True)
scrollbar.config(command=list_content_view.yview)
# 프로그램 실행 표시 들어갈 공간
lbl_execute_frame = Frame(root)
lbl_execute_frame.pack(fill='x', padx=5, pady=5)
state_var = StringVar()
state_var.set(' ')
lbl_state_txt = Label(lbl_execute_frame, textvariable=state_var)
lbl_state_txt.configure(font=('Arial', 12, 'bold', 'italic'))
lbl_state_txt.pack(side='right', fill='x', padx=5, pady=5)
# 실행 프레임 - 시작, 닫기
frame_run = Frame(root)
frame_run.pack(fill='x', padx=10, pady=5)
btn_close = Button(frame_run, padx=5, pady=5, text='닫기', width=12, fg='black', cursor='hand2', command=func_quit)
btn_close.pack(side='right', padx=5, pady=5)
btn_start = Button(frame_run, padx=5, pady=5, text='추출 시작', width=12, fg='black', cursor='hand2', command=start)
btn_start.configure(font=('Arial', 10, 'bold'))
btn_start.pack(side='right', padx=5, pady=5)
root.mainloop()
위 소스코드는
- 유튜브 동영상을 추출하는 파이썬 라이브러리인 pytube를 사용하여 유튜브 영상 1개씩을 저장할 수 있는 코드와
- 파이썬 Tkinter 모듈을 사용해서 일반 사용자들이 사용할 수 있도록 프로그램으로 만들었다.
- 물론, 유튜브 영상 저장 라이브러리에 문제가 발생하면 실행이 안 될 수 있다.
- 유튜브 영상 추출하는 파이썬 라이브러리는 pytube는 pip install pytube 명령으로 설치한다.
[실행 결과 - 터미널]
(venv) D:\python\pyinstaller>d:/python/pyinstaller/venv/Scripts/python.exe d:/python/pyinstaller/youtube_movie_download2_tkinter_posting.py
[케스코 원데이 시공] 봄날 샷시 교체만으로 집안이 확 밝아집니다!
↳ |████████████████████| 100.0%
(venv) D:\python\\pyinstaller>
※ 유튜브 다운로드 프로그램 사용법
☞ 프로그램 다운로드 : 네이버 MyBox에서 공유
Windows 10 이나 11에서 프로그램 실행 시 다음과 같은 메시지 창이 뜰 경우,

"추가 정보"를 클릭하고 "실행"을 클릭한다.

▶ 프로그램 사용법

파일 다운로드 후 실행하면 위 이미지처럼 보인다.
(간혹, 특정 보안프로그램에서 바이러스가 있는 것으로 오인하는 경우가 있는데, 바이러스 확인 사이트(https://www.virustotal.com/)에서 체크 후 올리는 프로그램이며, 하단에 체크 결과 이미지 있음)

유튜브 URL 란에 유튜브 주소(URL)를 입력하지 않고 추출 시작 버튼을 클릭한 경우이며, URL을 정확하게 입력한 후 "추출 시작" 버튼을 클릭한다.

유튜브 주소(URL)의 영상을 추출하여 파일로 저장합니다
- 유튜브 주소(URL)를 마우스로 드래그하여 복사하거나, 유튜브 영상 위에서 마우스 우클릭 후 "동영상 URL 복사"를 클릭합니다.
- 프로그램 입력란("유튜브 URL:")에 붙여넣기(Ctrl+V) 한 후 "추출 시작" 버튼을 클릭하면 실행이 됩니다.
- 유튜브 웹페이지 소스 코드가 바뀌면 실행이 안 될수 있습니다.
- 잘못된 URL을 입력하면 영상 추출이 안되거나 오류가 발생하여 프로그램이 중지될 수 있습니다.

※ 영상 주소 : https://www.youtube.com/watch?v=PR-pT2_mlVY&t=4s
위 영상 주소(URL)을 입력하고 "추출 시작" 버튼을 클릭하면 아래 이미지처럼 실행된다.

유튜브 동영상 파일을 다운로드하는 시간이 필요하다.
중간 메시지 내용에서 설명하고 있듯이 하단에 "실행중...."이라고 표시가 되고 파일 받기가 완료되면 "추출 작업 완료!!" 메시지가 나타날 때까지 기다려야 한다.

유뷰브 동영상 저장이 완료되었다.
추가로 더 받으려면, 유튜브 URL에 다시 URL을 복사하여 붙여넣고 "추출 시작" 버튼을 클릭한다.
※ 바이러스 오인 프로그램 1개





블로그 인기글
엑셀 시트 분리 저장 - 엑셀 파일의 시트를 분리하여 저장하기
엑셀을 사용하다 보면 엑셀 시트를 분리해서 저장해야 할 때가 있다. 최근에도 이런 경우가 발생하여 구글링 후 엑셀 시트 분리 업무를 수행하고 내친김에 다른 사람들도 사용할 수 있도록 파이썬 tkinter로 프로그램으로 만들어 보았다. Excel Sheets 분리 저장하는 프로그램(with 파이썬 Tkinter) ※ 프로그램 다운로드(네이버 MYBOX에서 공유) : ExcelSeparateSheets.zip ▶ 프래그램을 실행하면 다음과 같이 초기 화면이 보인다. 찾아보기 : 엑셀 파일이 있는 폴더를 선택한다. (프로그램이 있는 최상위 디렉터리가 열린다) 실행하기 : 프로그램 실행 버튼 상태 변경 순서 : 실행전 → 실행 중 → Sheet "OOO" 분리 저장 중 → 실행 완료 실행 결과 확인 : 엑셀 파..
goodthings4me.tistory.com
유튜브 영상 등의 URL 주소를 QR코드로 만들기
네이버 QR코드, makeQR, MUST QRcode, 무료 온라인 QRCode 생성기 등의 웹사이트에서 유튜브 영상 등의 URL을 입력하여 QR코드를 만들 수 있다. QR코드를 생성할 수 있는 사이트와 프로그램 URL 주소를 붙여넣기 한 후 "QR 코드 생성" 버튼을 클릭하면 큐알코드가 이미지로 생성되고, 다운로드도 할 수 있는 사이트 https://truedoum.com/useful/qrcode/ # 유튜브에서 동영상 URL을 복사하는 방법 유튜브에서 QR코드를 만들 동영상을 검색한다. 해당 동영상을 클릭한다. 동영상 위에서 마우스 우클릭 후 나오는 팝업창에서 “동영상 URL 복사”를 클릭하거나 영상 하단의 “공유”를 클릭하여 나온 창에서 URL를 복사한다. 아래의 웹사이트 중 하나를 선택한 후 복사..
goodthings4me.tistory.com
[국세청] 현금영수증가맹점으로 가입바랍니다. 메시지 해결방법(개인사업자)
▶ 현금영수증 가맹점 가입 메시지를 받고... 온라인 쇼핑몰 사업을 시작하려고 사업자등록증을 발급받고 난 후 얼마 안 있어서 국세청으로부터 어느 시점까지 '현금영수증 가맹점'으로 가입하라는 문자메시지가 받았었다. 그 메시지 기한이 오늘 도래했는데, 인터넷에서 찾아보니 홈택스에서 현금영수증 발급 사업자 신청을 할 수가 있었다. [관련내용] 홈>국세정책/제도>전자(세금)계산서/현금영수증/신용카드>현금영수증∙신용카드>가맹점가입 ▶ 홈택스 사이트에서 신청하는 절차는 다음과 같다. 우선, 홈택스에 로그인을 해야 합니다. 세상이 좋아져서 공인인증서 없이도 손쉽게 간편인증 로그인이 가능하다. 여러 인증방법 중 카카오톡 인증이 가장 편리한 거 같다. 간편인증 로그인 후 상단 '조회/발급' 탭 클릭 후 '현금영수증>현금..
goodthings4me.tistory.com
'코딩 연습' 카테고리의 다른 글
엑셀 시트 분리 저장 - 엑셀 파일의 시트를 분리하여 저장하기 (2) | 2022.09.25 |
---|---|
유튜브 음원 추출 다운로드(유뷰브 음악 추출하는 2가지 방법) (0) | 2022.09.19 |
리눅스 가상서버 환경에서 장고(django) 서버 구동을 위한 nginx, gunicorn 설치해보기 (0) | 2022.08.21 |
cafe24 가상서버호스팅 신청하고 서버 셋팅과 파이썬 장고 설치하기 (0) | 2022.08.13 |
하위 폴더 전체 파일 복사하기 (1) | 2022.08.10 |
댓글