공부

파이썬 pytube를 이용한 유튜브 영상, 음원 다운로드

푸쥬 ! 2022. 5. 4. 21:11
반응형

 

pytube를 이용해 유튜브 영상을 다운로드 할 수 있다.

온라인으로 변환하기 귀찮아서 코드를 작성해봤다.

 

실행환경

 

Python 3.9

Windows 10

 

Pytube 설치

 

pip install pytube

 

ffmpeg 설치 (선택)

 

ffmpeg는 mp4 to mp3 변환을 위해 사용한다.

 

아래 링크에서 Windows 버전으로 사용한다.

환경변수를 설정해주면 편하게 사용할 수 있다.

 

 

Download FFmpeg

If you find FFmpeg useful, you are welcome to contribute by donating. More downloading options Git Repositories Since FFmpeg is developed with Git, multiple repositories from developers and groups of developers are available. Release Verification All FFmpe

ffmpeg.org

 

 

또는 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

 

 

 

pytube.exceptions.RegexMatchError: get_throttling_function_name: could not find match for multiple

I used to download songs the following way: from pytube import YouTube video = YouTube('https://www.youtube.com/watch?v=AWXvSBHB210') video.streams.get_by_itag(251).download() Since today there is...

stackoverflow.com

 

728x90