유튜브 쇼츠 자동 다운로드 – 간단한 코드로 한 번에 끝내기!
요즘 유튜브 쇼츠, 정말 핫하죠? 스크롤 한 번만 하면 시간 가는 줄 모르고 여러 개를 쭉쭉 보게 되죠. 그런데 내가 직접 유튜브에 올린 동영상을 관리차원에서 직접 다운로드하려고 하면 수작업으로 하나하나 클릭해서 다운로드 하려면 너무 번거롭죠?
그래서 오늘은 지인의 채널에 있는 유튜브 쇼츠 자동 다운로드 기능을 수행하는 간단한 파이썬 코딩을 준비했어요! 초보자도 쉽게 따라 할 수 있도록 라인별로 친절하게 설명해 드릴게요.
1. 준비물: YouTube API와 yt-dlp 설정하기
먼저, 유튜브 쇼츠 자동 다운로드를 위한 YouTube API와 yt-dlp가 필요합니다. YouTube API 키는 Google Cloud Console에서 발급받을 수 있습니다. yt-dlp
는 유튜브 등 여러 사이트의 동영상을 다운로드하는 데 매우 유용한 도구입니다. YouTube API 키 확보는 유튜브 리스트 추출: API와 파이썬으로 자동화하는 방법 포스트를 꼭 확인하세요!
설치 명령어
VS code 등 IDE 프로그램 터미널에서 yt-dlp
설치를 위한 명령어를 아래와 같이 실행하시면 됩니다.
pip install yt-dlp
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).