본문 바로가기
Study/Python

python으로 유튜브영상 다운로드하기 📺

by uiydlop 2022. 2. 23.

youtube_dl 라이브러리를 이용하여 간단한 python 코드를 짜면 원하는 유튜브 영상을 다운로드할 수 있다.
라이브러리만 잘 설치하고, 경로 설정 잘해주면 간편히 따라할 수 있을 것이다.
나는 나중에 다운로드한 영상을 이미지 프레임으로 저장하는 실습을 하기 위해
경로 설정을 통해 폴더에다가 영상을 다운로드하였지만,
그냥 바로 영상만 다운로드하고 싶은 경우 더 간단한 코드도 준비했다. (맨 밑으로 이동)

** 작업은 vs code에서 하는 것을 권장한다.


youtube_dl 설치

(터미널에서 진행)

pip install youtube_dl

youtube_dl : 유튜브 동영상 다운로드할 수 있게 하는 라이브러리

https://github.com/ytdl-org/youtube-dl

 

GitHub - ytdl-org/youtube-dl: Command-line program to download videos from YouTube.com and other video sites

Command-line program to download videos from YouTube.com and other video sites - GitHub - ytdl-org/youtube-dl: Command-line program to download videos from YouTube.com and other video sites

github.com


② 필요한 라이브러리 불러오기

import os 
import youtube_dl

③ 경로 설정

pathIn = "./videos/" 
pathUid = "./uid/uid.txt"


상대 경로를 설정해주는 것이다.
pathIn : 비디오 저장 경로 -> videos 폴더를 생성하고, 폴더 안에 비디오 파일을 저장한다.

코드 실행 시 자동으로 폴더가 생성됨

pathUid : 유튜브 uid 파일 경로 -> uid 폴더 안에 uid.txt 파일을 불러온다.

uid.txt 파일 안에 uid주소를 입력해야 하므로... 폴더와 파일을 먼저 만들어 줘야 함


※ 여기서 uid 란 각 사용자를 구별하기 위한 사용자 식별자 뜻.
따라서 원하는 youtube 영상 주소의 뒤 고유 번호를 가져오면 된다.

ㄴ uid = gdZLi9oWNZg


영상 uid -> uid.txt 입력 (INPUT)

-> 나중에 이 파일만 수정하면 됨.

1개든 몇 개든 다운로드하고 싶은 영상 uid를 한 줄에 하나씩 입력한다.


⑤ down_video 함수 생성

 

def down_video(i, pathIn):
    outdir = os.path.join(pathIn+'/%s.mp4'%i) 
    print('outdir',outdir)
    ydl_opt = { 'outtmpl' :outdir,'format':'bestvideo/best'}
    with youtube_dl.YoutubeDL(ydl_opt) as ydl:
      ydl.download(['https://www.youtube.com/watch?v=%s'%i])   
 print('down')

def 함수명(매개변수):
<수행할 문장1>
<수행할 문장2>
. . .
(함수 이름 down_video로 지정, 만드는 사람이 임의로 만들 수 있음)

def down_video(i, pathIn):
                    ⬆️ ⬆️
                   uid ./videos
⑥ 에서 down_video(uid, pathIn)
⬇️ %s ← i (=uid)

outdir = os.path.join(pathIn+'/%s.mp4'%i)
(비디오파일) 저장경로 설정.

ㄴ pathIn(./videos/) 경로 안에 '/%s.mp4'%i 형식으로 다운로드
=> %s 안에 i를 넣는것이다.


print('outdir',outdir)
저장경로 출력

 

ydl_opt = { 'outtmpl' :outdir,'format':'bestvideo/best'}
영상 다운 시 설정하고 싶은 옵션
- 'outtmpl' : 위에서 설정한 저장경로
- 'format' : (해상도설정) 최상품질 비디오 형식 선택

with youtube_dl.YoutubeDL(ydl_opt) as ydl
ydl_opt 를 YoutubeDL 파라미터로 넘겨주고 ydl로 지정

ydl.download(['https://www.youtube.com/watch?v=%s'%i])
영상 다운로드

유튜브 영상 주소창 주소는 이렇게 생겼음
그래서 v=%s 안에 ← uid가 들어가서 같아짐.


down_video 함수 호출

f = open(pathUid, 'r') 
while True:
    uid = f.readline()[:-1]
    down_video(uid, pathIn)
    if not uid: break 
f.close()


f = open(pathUid, 'r')
"./uid/uid.txt" 경로에 있는 파일을 읽기 모드로 열어 줌

while True:
무한 루프 안에서

uid = f.readline()[:-1] ⭐️
f.readline()을 사용해 파일을 계속해서 한 줄씩 읽어 들임

※ 한 줄씩 읽어 출력할 때 줄 끝에 \n 문자가 있으므로 빈 줄도 같이 출력된다. https://wikidocs.net/26

f.readline() f.readline() [:-1]

=> 빈 줄도 같이 출력됨 => 줄 바꿈 제거함


down_video(uid, pathIn)
⑤ 함수 실행

if not uid: break
만약 더 이상 읽을 줄이 없으면 break를 수행

f.close()
열려 있는 파일 객체를 닫아줌


⑦ 다운로드 완료

비디오 저장경로인 videos 폴더 안에 영상이 다운로드되었다.

컴퓨터 폴더에서 확인해보면 .mp4 형태의 비디오 파일이 있고, 재생해보면 원하는 영상이 잘 다운로드된 걸 확인할 수 있다.



[21/22 PL] 맨시티 vs 토트넘 MVP 해리 케인 https://youtu.be/0VOUk6bpXco
BTS (방탄소년단) 'Dynamite' Official MV https://youtu.be/gdZLi9oWNZg

[전체 코드]


더 간단한 코드로 경로 설정 없이 바로 다운로드

import os 
import youtube_dl

outdir = os.path.join('./', '%(title)s.%(ext)s')

download_list = [
    'https://youtu.be/0VOUk6bpXco',
    'https://youtu.be/gdZLi9oWNZg'
                 ]
ydl_opt = {'outtmpl' :outdir, 'format':'bestvideo/best'}
with youtube_dl.YoutubeDL(ydl_opt) as ydl:
    ydl.download([download_list])

download_list = [] 안에 유튜브 영상 주소만 넣어주면 된다.



** 간단한 방법으로 다운로드해도 되지만, 나중에 더 많은 작업을 하기위해선 경로 설정하여 폴더에 다운로드 해주는게 좋다.

댓글