Contents

[Python] Youtube 영상 다운로드(with youtube_dl)

youtube-dl 라이브러리

  • youtube-dl은 CLI 기반의 유투브 영상 다운로드 프로그램이다.
  • 설치 후, 터미널 환경에서 명령어 형태로 실행이 가능하며 Python 코드로도 실행 가능하다.
  • youtube-dl의 장점은 다양한 options을 통해 자막, Thumbnail 이미지, 원하는 화질의 영상 선택 등이 가능하다는 점과 현재까지 꾸준히 코드가 업데이트 되고 있다는 점이다.
  • youtube 영상을 다운로드 받을 수 있는 또 다른 Python 패키지로 pytube가 있으나 github 업데이트가 중단된지 오래되었다.

예제 코드

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import os
import youtube_dl

VIDEO_DOWNLOAD_PATH = './'  # 다운로드 경로

def download_video_and_subtitle(output_dir, youtube_video_list):

    download_path = os.path.join(output_dir, '%(id)s-%(title)s.%(ext)s')

    for video_url in youtube_video_list:

        # youtube_dl options
        ydl_opts = {
            'format': 'best/best',  # 가장 좋은 화질로 선택(화질을 선택하여 다운로드 가능)
            'outtmpl': download_path, # 다운로드 경로 설정
            'writesubtitles': 'best', # 자막 다운로드(자막이 없는 경우 다운로드 X)
            'writethumbnail': 'best',  # 영상 thumbnail 다운로드
            'writeautomaticsub': True, # 자동 생성된 자막 다운로드
            'subtitleslangs': 'en'  # 자막 언어가 영어인 경우(다른 언어로 변경 가능)
        }

        try:
            with youtube_dl.YoutubeDL(ydl_opts) as ydl:
                ydl.download([video_url])
        except Exception as e:
            print('error', e)


if __name__ == '__main__':

    youtube_url_list = [  # 유투브에서 다운로드 하려는 영상의 주소 리스트(아래는 Sample Video 리스트)
        "https://www.youtube.com/watch?v=dP15zlyra3c",
        "https://www.youtube.com/watch?v=0EiV-ERKRRs",
        "https://www.youtube.com/watch?v=-CoApUAZFf8",
        "https://www.youtube.com/watch?v=M25AP_KPwlI"
    ]
    download_video_and_subtitle(VIDEO_DOWNLOAD_PATH, youtube_url_list)
    print('Complete download!')

youtube_dl을 활용하여 영상과 자막, Thumbnail을 다운로드 받는 간단한 예제 코드를 작성해보았다. 유투브 영상의 Video ID값이 포함된 주소 리스트를 넘겨주면 option에 설정된 조건에 맞는 데이터(영상, 자막, 이미지)를 다운로드 받게 된다. youtube_dl 사용법은 굉장히 간단하지만, options 값을 어떻게 설정해주어야 하는지 다소 어려움이 있었다. youtube_dl 도큐먼트와 구글 검색을 통해 필요한 options 값을 넣어주면 원하는 조건의 데이터를 다운로드 받을 수 있다. 굉장히 간단한 코드이지만 향후 원하는 영상을 손쉽게 다운로드 받을 수 있는 영상 크롤러로 코드를 확장할 계획이다. 또한, PyQT5를 활용하여 GUI 형태로도 구현해보고자 한다.

format options(영상 화질선택 옵션)

  • format key에 넣는 값에 따라 각각 다른 화질의 영상을 선택적으로 다운로드 할 수 있다.
  • 지원되는 화질 중 가장 좋은 화질로 받으려면 앞서 언급한 예제 코드와 같이 'format': 'best/best'로 설정하면 된다.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
format code extension resolution  note
140         m4a       audio only  DASH audio , audio@128k (worst)
160         mp4       144p        DASH video , video only
133         mp4       240p        DASH video , video only
134         mp4       360p        DASH video , video only
135         mp4       480p        DASH video , video only
136         mp4       720p        DASH video , video only
17          3gp       176x144     
36          3gp       320x240     
5           flv       400x240     
43          webm      640x360     
18          mp4       640x360     
22          mp4       1280x720    (best)

[Reference]

[1] youtube-dl
[2] https://github.com/choidslab/youtube-video-downloader