반응형
pytube를 이용해 유튜브 영상을 다운로드 할 수 있다.
온라인으로 변환하기 귀찮아서 코드를 작성해봤다.
실행환경
Python 3.9
Windows 10
Pytube 설치
pip install pytube
ffmpeg 설치 (선택)
ffmpeg는 mp4 to mp3 변환을 위해 사용한다.
아래 링크에서 Windows 버전으로 사용한다.
환경변수를 설정해주면 편하게 사용할 수 있다.
또는 python pip 설치가 가능하다.
pip install ffmpeg-python
pip 모듈로는 뭔가 잘 안되서 그냥 첫 번째 방법을 이용했다.
영상 다운로드만을 원한다면 굳이 이용할 필요가 없다.
영상 다운로드 및 MP3 변환 코드
from pytube import YouTube
from pytube.cli import on_progress
import os
import subprocess
yt = YouTube('https://www.youtube.com/watch?v=TnK5aAXuJU4', on_progress_callback=on_progress)
print(f'==================================================================')
print(f'* 제작자\t: {yt.author}')
print(f'* 채널 ID\t: {yt.channel_id}')
print(f'* 채널 URL\t: {yt.channel_url}')
print(f'==================================================================')
print(f'* 영상 ID\t: {yt.video_id}')
print(f'* 영상 URL\t: {yt.watch_url}')
print(f'* 썸네일 URL\t: {yt.thumbnail_url}')
print(f'* 나이 제한\t: {yt.age_restricted}')
print(f'* 영상 제목\t: {yt.title}')
print(f'* 영상 길이\t: {str(yt.length // 60).zfill(2)}:{str(yt.length % 60).zfill(2)} / {yt.length} 초.')
print(f'* 영상 조회수\t: {yt.views}')
print(f'==================================================================')
print(f'* 영상 키워드\t: {yt.keywords}\n')
print(f'* 영상 설명\n\n{yt.description}')
print(f'==================================================================')
ytvid = yt.streams.all()
for i in range(len(ytvid)):
print(f'{ytvid[i]}')
itagnum = int(input("다운로드 itag 번호 입력 : "))
dpath = "D:\TEST" # 자유롭게 변경
#오디오 파일만 다운로드
yt.streams.filter(only_audio=True)
yt.streams.get_by_itag(itagnum).download(dpath)
#비디오 다운로드 아래 코드 이용
'''
yt.streams.filter(file_extension='mp4')
yt.streams.get_by_itag(itagnum).download(dpath)
'''
## MP4 -> MP3 변환 ##
dfile = yt.streams.get_by_itag(itagnum).default_filename
subprocess.call(["ffmpeg", '-i', os.path.join(dpath, dfile), os.path.join(dpath, dfile[:-3]+'mp3')])
mp4 to mp3 변환이 필요없다면, 코드에서 마지막 두 줄을 지우면 된다.
Troubleshooting
혹시나 아래와 같은 에러가 뜬다면 다음 링크를 참고하자.
pytube.exceptions.RegexMatchError: get_throttling_function_name: could not find match for multiple
728x90