유튜브 쇼츠 자동 다운로드 – 간단한 코드로 한 번에 끝내기!

요즘 유튜브 쇼츠, 정말 핫하죠? 스크롤 한 번만 하면 시간 가는 줄 모르고 여러 개를 쭉쭉 보게 되죠. 그런데 내가 직접 유튜브에 올린 동영상을 관리차원에서 직접 다운로드하려고 하면 수작업으로 하나하나 클릭해서 다운로드 하려면 너무 번거롭죠?

유튜브 쇼츠 자동 다운로드, 출처: Asoso's K-pop Vault
( 유튜브 쇼츠 자동 다운로드, 출처: Asoso’s K-pop Vault )

그래서 오늘은 지인의 채널에 있는 유튜브 쇼츠 자동 다운로드 기능을 수행하는 간단한 파이썬 코딩을 준비했어요! 초보자도 쉽게 따라 할 수 있도록 라인별로 친절하게 설명해 드릴게요.

1. 준비물: YouTube API와 yt-dlp 설정하기

먼저, 유튜브 쇼츠 자동 다운로드를 위한 YouTube APIyt-dlp가 필요합니다. YouTube API 키는 Google Cloud Console에서 발급받을 수 있습니다. yt-dlp는 유튜브 등 여러 사이트의 동영상을 다운로드하는 데 매우 유용한 도구입니다. YouTube API 키  확보는 유튜브 리스트 추출: API와 파이썬으로 자동화하는 방법 포스트를 꼭 확인하세요!

설치 명령어

VS code 등 IDE 프로그램 터미널에서 yt-dlp 설치를 위한 명령어를 아래와 같이 실행하시면 됩니다.

pip install yt-dlp
유튜브 쇼츠 자동 다운로드를 위한 패키지 설치 - VS code 터미널 화면
( 유튜브 쇼츠 자동 다운로드를 위한 패키지 설치 – VS code 터미널 화면 )

2. 유튜브 쇼츠 자동 다운로드 파이썬 코딩하기

유튜브 쇼츠 자동 다운로드
( 유튜브 쇼츠 자동 다운로드 파이썬 코딩 프로세스 개요 )

이제 기본 준비가 됐으니 파이썬 코딩을 시작해 보시죠! 아래의 스크립트(코드)로 유튜브 쇼츠를 자동으로 다운로드 할 수 있습니다. 각 동영상의 제목을 기준으로 파일명을 저장하고, 연령 제한이 있는 쇼츠도 잘 다운로드할 수 있어요.

from googleapiclient.discovery import build
import yt_dlp
import re

# API 키 입력
API_KEY = '여기에_API_키_입력'

# YouTube API 빌드 설정
youtube = build('youtube', 'v3', developerKey=API_KEY)

# 쇼츠 목록과 ID 가져오기 함수 정의
def get_shorts_titles_and_ids(channel_id, max_results=100):
    shorts_info = []
    next_page_token = None

    while len(shorts_info) < max_results:
        request = youtube.search().list(
            part='snippet',
            channelId=channel_id,
            maxResults=min(50, max_results - len(shorts_info)),
            type='video',
            videoDuration='short',
            pageToken=next_page_token
        )
        response = request.execute()

        for item in response['items']:
            title = item['snippet']['title']
            video_id = item['id']['videoId']
            shorts_info.append((title, video_id))

        next_page_token = response.get('nextPageToken')
        if not next_page_token:
            break

    return shorts_info[:max_results]

# 동영상 다운로드 함수
def download_shorts(shorts_info):
    for idx, (title, video_id) in enumerate(shorts_info, 1):
        url = f"https://www.youtube.com/watch?v={video_id}"
        try:
            sanitized_title = re.sub(r'[\\/*?:"<>|]', "", title)
            filename = f"{idx}. {sanitized_title}.mp4"

            ydl_opts = {
                'format': 'best[ext=mp4]',
                'outtmpl': filename,
                'noplaylist': True,
            }

            with yt_dlp.YoutubeDL(ydl_opts) as ydl:
                print(f"Downloading: {filename}")
                ydl.download([url])
                print(f"Downloaded: {filename}")

        except Exception as e:
            print(f"Failed to download {title}: {e}")

# 채널 ID 입력 및 실행
channel_id = '여기에_채널_ID_입력'
shorts_info = get_shorts_titles_and_ids(channel_id)
download_shorts(shorts_info)

3. 코드 라인별 설명 – 유튜브 쇼츠 자동 다운로드의 모든 것

이제 파이썬 코딩 내역 각 줄을 한 줄씩 살펴보며 어떻게 동작하는지 알아보겠습니다!

  • API_KEY는 YouTube API 키를 입력하는 곳입니다. Google Cloud Console에서 발급받은 키를 사용하세요.
  • youtube = build('youtube', 'v3', developerKey=API_KEY): YouTube API에 연결하는 단계입니다.
  • get_shorts_titles_and_ids 함수:
    • channel_id: 다운로드할 유튜브 채널의 ID를 지정합니다.
    • max_results: 가져올 쇼츠의 최대 개수를 지정합니다. 기본값은 100개로 설정됩니다.
    • next_page_token: 여러 페이지의 쇼츠를 가져오기 위해 nextPageToken을 사용합니다.
    • video_id, title: 각 쇼츠 동영상의 ID와 제목을 추출하여 리스트에 추가합니다.
  • download_shorts 함수:
    • yt_dlp.YoutubeDL(ydl_opts) as ydl: yt-dlp 라이브러리로 쇼츠 동영상을 다운로드합니다.
    • ydl_opts 설정: mp4 형식으로 다운로드하고, outtmpl로 파일명을 설정합니다.

이 코드를 실행하면 지정한 유튜브 채널에서 쇼츠가 자동으로 다운로드됩니다. 파일명은 쇼츠의 제목을 기준으로 저장되니, 원하는 대로 쉽게 찾아볼 수 있습니다.

4. FAQ – 자주 묻는 질문들

Q1. 동영상 다운로드가 안 될 때 어떻게 해야 하나요?

먼저 API_KEY와 channel_id가 올바르게 설정되었는지 확인해 주세요. 그리고 yt-dlp가 최신 버전인지 확인하고, 필요하다면 터미널에서 pip install --upgrade yt-dlp를 통해 업데이트하세요.

Q2. 유튜브 쇼츠가 아닌 일반 동영상도 다운로드할 수 있나요?

네, 가능합니다. get_shorts_titles_and_ids 함수에서 videoDuration='short' 옵션을 제거하면 채널에 업로드된 모든 동영상을 가져와 다운로드할 수 있습니다.

Q3. 특정 해상도나 화질로만 다운로드하고 싶을 때는 어떻게 하나요?

ydl_opts의 'format' 옵션을 수정해 원하는 해상도를 지정할 수 있습니다. 예를 들어, 'format': 'best[height<=720]'처럼 설정하면 720p 이하 해상도로만 다운로드합니다.

Q4. 동영상 제목 대신 사용자 정의 파일명으로 저장할 수 있나요?

네, filename 변수를 변경하여 원하는 파일명으로 설정할 수 있습니다. 예를 들어, "{idx}. CustomName.mp4" 형식으로 파일명을 지정하면 쇼츠마다 고유의 사용자 정의 파일명으로 저장됩니다.

Q5. 연령 제한이 있는 동영상은 어떻게 다운로드하나요?

yt-dlp는 연령 제한이 있는 동영상도 대부분 우회하여 다운로드할 수 있습니다. 그러나 일부 영상은 추가 인증이 필요할 수 있습니다. 이 경우, yt-dlp의 문서에서 자세한 설정 방법을 참고하세요.

Q6. 한번에 더 많은 쇼츠를 다운로드하고 싶다면 어떻게 하나요?

기본적으로 max_results 매개변수를 조정하여 가져올 쇼츠 수를 늘릴 수 있습니다. 그러나 YouTube API의 요청 제한을 고려하여 최대 500개까지 다운로드하는 것이 좋습니다.

Q7. 다운로드 속도를 높일 수 있는 방법이 있을까요?

yt-dlp는 기본적으로 최적화된 속도로 동영상을 다운로드하지만, 네트워크 환경에 따라 속도가 달라질 수 있습니다. 다운로드 속도가 느릴 경우, 다른 네트워크로 전환하거나 인터넷 연결 상태를 점검해 보세요.

Q8. 이 코드로 재생목록에 있는 동영상도 다운로드할 수 있나요?

현재 코드에서는 특정 채널의 쇼츠만 다운로드하도록 설정되어 있습니다. 재생목록을 다운로드하려면 channelId 대신 playlistId를 지정하고 yt-dlp의 재생목록 옵션을 활용하면 됩니다.

Q9. 파일이 겹치거나 덮어쓰여서 다운로드될 위험이 있나요?

코드에서 각 동영상의 고유 번호를 파일명에 추가하므로 파일이 겹칠 가능성은 거의 없습니다. 하지만 제목이 동일한 경우가 있을 수 있으니, "{idx}. {sanitized_title}.mp4" 형식처럼 고유 번호를 추가하는 방식을 유지하세요.

Q10. 코드 실행 시 'Bad Request' 오류가 발생합니다. 이유가 무엇인가요?

'Bad Request' 오류는 API 요청에 문제가 있거나, YouTube 측의 정책 변경으로 인해 발생할 수 있습니다. 이 경우 API 설정을 다시 확인하거나, yt-dlp를 업데이트한 후 다시 시도해 보세요.

#용어 해설

YouTube API: YouTube에서 제공하는 프로그래밍 인터페이스로, 개발자가 YouTube의 기능을 자신의 애플리케이션에 통합할 수 있게 해주는 도구입니다[1].

yt-dlp: YouTube 등 다양한 웹사이트에서 동영상을 다운로드할 수 있게 해주는 명령줄 프로그램입니다.

Google Cloud Console: Google에서 제공하는 웹 기반 인터페이스로, 개발자가 Google Cloud 프로젝트와 리소스를 관리할 수 있는 플랫폼입니다.

pip: Python 패키지를 설치하고 관리하는 도구입니다.

IDE: 통합 개발 환경(Integrated Development Environment)의 약자로, 코드 작성, 디버깅, 실행 등 개발에 필요한 도구들을 하나의 프로그램에서 제공하는 소프트웨어입니다.

채널 ID: YouTube에서 각 채널을 고유하게 식별하는 문자열입니다.

API 키: 애플리케이션이 API를 사용할 때 인증을 위해 필요한 고유한 식별자입니다.

함수: 특정 작업을 수행하는 코드 블록으로, 재사용이 가능하고 프로그램의 구조를 개선하는 데 도움을 줍니다.

예외 처리: 프로그램 실행 중 발생할 수 있는 오류를 관리하는 프로그래밍 기법입니다.

해상도: 디스플레이나 이미지의 선명도를 나타내는 지표로, 보통 가로x세로 픽셀 수로 표현됩니다 (예: 1920×1080).

유사한 게시물