유튜브 동영상을 보다보면 소장하고 싶어지는 경우가 종종 있습니다. 이런 경우, 파이썬을 이용해 유튜브 다운로드를 할 수 있습니다.
유튜브 다운로드라고 검색하면 많은 정보를 만날 수 있습니다. 대부분의 경우 별도의 서비스를 제공하고 있는 사이트를 이용하는 방법입니다.
초창기에는 조건없는 무료서비스를 사람들에게 전해주곤 했지만, 시간이 지남에 따라 부분 유료화 서비스로 전환하는 경우가 많습니다.
파이썬을 익히고 있다면, 편리하게 컴퓨터에서 유튜브 다운로드를 진행하는 것도 재밌는 경험이 될 수 있을 것 같네요. 단, 저작권에 대해서는 알아두셔야 합니다.
❌ 유튜브에서 다운받은 영상, 음원은 저작권 보호를 받습니다.
- 👉 위캐백과 저작권 관련 내용
- 👉 다운받은 영상 혹은 음원은 어떤 이유에서도 공유하지 않는 것이 좋습니다.
파이썬으로 유튜브 다운로드 하는 방법
유튜브는 서버에 있는 동영상을 보여주는 서비스입니다. 다시 말해, 해당 파일은 서버에 존재하게 되겠죠. 다운로드 할 수 있는 주소를 안다면 파일을 받을 수 있을 것입니다.
가령, 웹하드처럼 말이죠. 하지만, 우리는 그 방법에 대해서 깊이 알 필요는 없습니다. 그저, 이미 만들어져 있는 라이브러리를 이용하면 된다는 것이죠.
이것이 파이썬의 재미이며, 매력이라 생각합니다. 잘 찾아보면 웬만한 기능들은 이미 다 구현되어 있을 수 있답니다. 우선은 관련 키워드부터 살펴보겠습니다.
✔ 파이썬 유튜브 다운로드 관련 키워드
- pytube
- qtdesigner
- 그 밖의 파이썬 문법
개인적인 경험으로 관련 내용의 키워드는 무척 소중하다고 생각합니다. 특히, 구글링을 통해 정보를 얻기 위해서는 핵심적인 키워드를 알아두면 도움이 될 수 있습니다.
1️⃣ pytube 이해하기.
본격적으로 프로그램 코딩을 시작하기 위해, 우리가 사용하려는 pytube 라이브러리에 대해서 살펴볼 필요가 있습니다.
다른 라이브러리를 사용할 때도 마찬가지입니다. 사용하려는 라이브러리, 모듈, 프레임워크 공식 사이트를 통해서 ‘사용법’을 살펴보는 것이 좋습니다.
라이브러리에는 다양한 기능을 담고 있습니다. 우리가 원하는 기능을 구현하기 위해 어떤 클래스의 함수를 사용해야하는지 살펴보면 많은 도움이 될 수 있습니다.
만약 설명된 영어가 부담스럽다면 ‘크롬’을 이용해볼 수 있습니다. 크롬을 통해 한글로 번역된 페이지를 활용한다면 초반에 접근하기 좋습니다. 단, 코드들도 번역되니 이 부분에 대해 고려할 필요가 있습니다.
설치부터 api 사용까지 정보를 담고 있습니다. 영상과 음원으로 구분하여 진행할 수 있습니다. pytube에서언급하는 Streams를 통해 audio 또는 MP4로 다운로드를 진행하면 됩니다.
순서는 다음과 같습니다.
- youtube url을 얻어와 입력한다.
- pytube함수에 해당되는 url을 넣어주고, 반환값을 받는다.
- 받아온 반환값에 filter를 적용한다.(선택)
- stream.download()를 통해 파일을 다운로드한다.
- 다운로드한 파일을 지정된 폴더에 저장한다.
어렵게 느껴질 수도 있고, 쉬울 수도 있겠죠. 코딩의 시작은 계획이 세워졌으면 그냥 시작하는 겁니다. 물론, 큰 문제점이 생기지 않는다는 가정하에서 말이죠. 오류나면 다시 하면 되니까요.
앞에서 알려드린 공식문서의 메뉴에서 Downloading Streams 문서를 참고하시면 보다 자세한 내용을 확인할 수 있습니다. 여기에서는 Filtering과 Downloading에 대해 언급되어 있습니다.
👉 여기를 참고하시면 됩니다.
이제부터 간단하게 파이썬 유튜브 다운로드 코드를 작성해 봅니다. 그냥 다운로드와 필터를 적용한 다운로드로 구분할 수 있으며, 플레이리스트를 활용한 다운로드로 응용할 수 있습니다.
from pytube import YouTube
DOWNLOAD_FOLDER = "./"
url = "유튜브 url을 입력하세요"
yt = YouTube(url)
stream = yt.streams.get_highest_resolution()
stream.download(DOWNLOAD_FOLDER)
이것으로 단 몇줄도 안되는 코드로 자체적인 유튜브 다운로더가 완성되었습니다. 참 쉽죠. 위 코드는 최고화질영상을 다운로드받으라는 명령입니다.
- .streams.get_highest_resolution()
만약 audio로 다운받고 싶다면 어떻게하면 좋을까요. filter를 사용하시면 됩니다.
- yt.streams.filter(only_audio=True)
filter에서 반환되는 값 중(list type) 선택하여 download()함수를 적용시키면 원하는 영상의 음원을 다운로드 받을 수 있습니다.
한걸음 더 나아가 재생목록, 채널등의 부가 기능을 적용해볼 수도 있겠죠. 지금부터는 우리의 상상력과 문서를 적극활용하여 프로그램을 완성해가면 됩니다. 개인적으로 일할 때 들을 수 있는 음원 다운로드가 참 마음에 드네요.
2️⃣ pyqt, qtdesigner
위에서 언급한 코드는 동적이지 않습니다. 다시 말해, 고정된 url에 대해서 진행하게 됩니다. 다른 영상을 다운로드 하고 싶다면, url부분을 수정한 후, 코드를 진행시켜야 합니다. 이것으로도 충분히 매력적인 코드이기도 합니다.
하지만, 불편합니다. 그냥 url만 가져다 놓고 실행하면 다운로드가 가능했으면 좋겠습니다. 이런 생각, 저만 하는 것일까요. 이 문제를 해결하기 위해 어떻게 하면 좋을까요.
가볍게 url부분을 input으로 처리할 수도 있습니다. pyinstaller를 이용해 콘솔모드의 윈도우 exe파일을 생성한 후, 실행하면 url을 입력할 수 있게 됩니다. 여기서 복붙을 하면 되겠죠.
한 걸음 더 나아가 ui를 만들어 보는 것도 좋은 경험이 될 수 있습니다. 아니면 django를 이용해 웹애플리케이션에 도전할 수도 있습니다. 다양한 방법이 존재할 수 있을 것 같습니다.
서비스를 배포하는 것이 아니기 때문에 pyqt 또는 qtdesigner를 이용해 윈도우 프로그램을 만드는 것이 더 좋아 보입니다. 개인적으로 qtdesigner를 추천하고 싶네요.
Qt Designer가 처음이라면 아래 공식문서를 참고하시면 좋습니다.
3️⃣ 그 밖의 파이썬 문법
위 코드를 보시면 알겠지만, 굳이 따로 언급할 필요는 없어 보입니다. 기본적인 개념 학습을 마쳤다면 필요한 부분이 보일 수 있기 때문입니다.
list타입에 대한 이해, 함수, 클래스에 대한 이해정도만 있다면 부가적인 기능 또한 추가하여 멋진 코드를 진행할 수 있을 것입니다.
list타입에 대한 이해가 필요한 이유는 반환되는 쿼리값을 원하는 것으로 선택하는 정도가 아닐까 생각합니다.
본 게시글은 핵심이 되는 코드를 직접 알려드리진 않습니다. 단순히 복사붙여넣기는 학습에 도움이 안된다는 생각입니다. 대신, 관련정보를 찾고 계획하는 것에 초점을 맞추고 있습니다.