글쓰는 개발자

[유튜브 영상 다운로드] pytube 를 yt_dlp로 변경하기 본문

IT 서비스 제작과정/개발

[유튜브 영상 다운로드] pytube 를 yt_dlp로 변경하기

세가사 2024. 4. 30. 20:36
반응형

https://gran007.tistory.com/entry/%EC%9C%A0%ED%8A%9C%EB%B8%8C-%EB%8B%A4%EC%9A%B4%EB%A1%9C%EB%93%9C-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8-%EC%9B%B9-%EC%84%9C%EB%B9%99

 

유튜브 다운로드 프로그램 웹 서빙

https://gran007.tistory.com/entry/%EC%9C%A0%ED%8A%9C%EB%B8%8C-%EC%98%81%EC%83%81-%EC%B6%94%EC%B6%9C-%EB%8B%A4%EC%9A%B4%EB%A1%9C%..

gran007.tistory.com

이전글에 pytube로 유튜브를 다운받고 시간별로 잘라서 다운받는 웹 서버 개발까지 진행해 보았다.

 

처음 pytube를 사용하는 글에 적어두었지만 pytube는 만들어진지가 오래된것인지 일단 라이브러리의 직접적인 수정이 필요할 뿐아니라 고화질의 유튜브 영상을 다운받지 못하는 문제가 있다.

 

따라서 이번에는 다른 라이브러리인 yt_dlp를 사용해서 유튜브 다운로드를 구현해보도록 하자.

 

https://github.com/yt-dlp/yt-dlp

 

GitHub - yt-dlp/yt-dlp: A feature-rich command-line audio/video downloader

A feature-rich command-line audio/video downloader - yt-dlp/yt-dlp

github.com

yt_dlp는 위 사이트에서 직접 release를 다운받아 command 명령어 형태로 실행할수도 있고 pip install문을 사용해 파이썬 내부에서 사용할수도 있다. 문제는 둘다 ffmpeg를 내부에서 사용하기 때문에 ffmpeg가 환경변수에 포함되어있어야 한다.

 

내 PC에 마우스 우클릭 - 속성에 들어가서 고급 시스템 설정 버튼을 누르고 환경변수를 버튼을 찾아 창을 띄운다.

환경변수 창에 사용자 변수화면에 path를 더블클릭해서 환경 변수 편집창에 내 ffmpeg가 설치된 폴더에 bin 폴더를 path에 추가해서 cmd 어디에서도 ffmepg가 실행되도록 한뒤 확인을 누르고 적용해준다.

pycharm을 사용중이었다면 pycharm내부에 터미널을 끄거나 pycharm을 껏다켜서 cmd의 변경이 적용될수 있도록 하고 yt_dlp를 설치해서 유튜브를 다운받을수 있는지 테스트해본다.

pip install yt-dlp

 

import yt_dlp

...

if __name__ == "__main__":
    ydl = yt_dlp.YoutubeDL(
            {
                "format": f'best[height<=1080][ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best',
                "merge_output_format": 'mp4',
                "outtmpl": {"default": '<다운로드 파일 PATH ex) h:/youtube/test.mp4>'},
                "overwrites": True,
            })
    video_url = 'https://www.youtube.com/watch?v=<유튜브영상ID>'
    ydl.download([video_url])

위와 같은 샘플 코드가 잘 동작하는지 확인하고 앞의 pytube의 다운로드 부분을 교체해주면 이제 높은 화질의 영상도 끊김없이 다운받고 편집할수 있는 유튜브 영상 다운로드 프로그램이 완성된다.

 

유튜브 주소로 타이틀을 얻어올때는 extract_info 함수를 사용한다.

info_dict = ydl.extract_info(video_url, download=False)
video_title = info_dict.get('title', None) + '.mp4'

 

 

yt_dlp 라이브러리에는 화질옵션뿐아니라 다운로드 실패시 혹은 스트리밍시, 혹은 나눠서 다운받기 등 다양한 옵션이 존재하니 더욱 세부적인 기능이 필요한 분들은 yt_dlp github에 가서 메뉴얼을 한번씩 보고 연구해 보는것도 좋을것 같다.

반응형