티스토리 뷰
유튜브에서 특정 채널의 shorts영상만 일괄로 다운받고 싶을 때가 있다.
아래의 코드로 받을 수 있다. 코드를 응용하면 다른 조건의 영상들도 한번에 받을 수 있다.
import os
import google.auth
from googleapiclient.discovery import build
from pytube import YouTube
def download_shorts(channel_id):
# Authenticate with YouTube Data API
credentials, project = google.auth.default()
youtube = build('youtube', 'v3', credentials=credentials)
# Retrieve channel's uploads playlist
channel_response = youtube.channels().list(part='contentDetails', id=channel_id).execute()
uploads_playlist_id = channel_response['items'][0]['contentDetails']['relatedPlaylists']['uploads']
# Retrieve playlist items and download "short" videos
playlistitems_request = youtube.playlistItems().list(part='snippet', playlistId=uploads_playlist_id, maxResults=50)
while playlistitems_request is not None:
playlistitems_response = playlistitems_request.execute()
for playlist_item in playlistitems_response['items']:
video_id = playlist_item['snippet']['resourceId']['videoId']
video_response = youtube.videos().list(part='snippet', id=video_id).execute()
video_tags = video_response['items'][0]['snippet']['tags']
if 'Shorts' in video_tags:
print(f'Downloading {video_id}')
video_url = f'https://www.youtube.com/watch?v={video_id}'
yt = YouTube(video_url)
yt.streams.filter(adaptive=True, file_extension='mp4').first().download()
playlistitems_request = youtube.playlistItems().list_next(playlistitems_request, playlistitems_response)
if __name__ == '__main__':
channel_id = 'INSERT_YOUTUBE_CHANNEL_ID_HERE'
download_shorts(channel_id)
이 코드를 활용해서 영상제작을 자동화하기 위한 재료를 쉽게 수집할 수가 있다.
영상 다운로드 툴을 쓰지 않고도 가능하니 별도로 유료 서비스를 사용하지 않아도 된다.
아래 코드의 yt.streams.filter()
를 사용하여 영상 확장자 및 품질을 선택할 수 있는데 관련 내용은 이곳에 좀더 자세히 나와있다.
아래 코드는 최상 품질 MP4로 받는 조건이다.
특정 채널의 영상을 거르기 위해서 유튜브 API를 사용해야 하는데, API키는 Google 개발자 콘솔에서 받을 수 있다.
관련된 글
좀 더 다양한 다운로드 옵션이나 특정 영상 한개만 받는 방법 등에 대해서 이곳에서 확인할 수 있다.
반응형
'Programming > Python' 카테고리의 다른 글
(scikit learn 경고문)The default of the `iid` parameter will change from True to False in version 0.22 and will be removed in 0.24. (0) | 2019.08.12 |
---|---|
파이썬 2차원 배열 울렁증 극복하기(numpy, pandas) (2) | 2019.07.27 |
Virtualenv사용 방법 메모 (0) | 2019.05.24 |
pip update하는 방법 (0) | 2019.04.27 |
댓글