들어가며
이 글에서는 pafy 모듈을 사용해 YouTube 동영상의 세부 정보를 추출하고, 다양한 형식으로 영상과 오디오를 다운로드하는 방법을 단계별로 살펴봅니다. 공식 문서는 pafy 공식 GitHub 저장소에서 확인할 수 있습니다.
pafy 모듈 설치하기
먼저 아래 명령어를 실행해 pafy 모듈을 설치합니다.
pip install pafy
명령어가 정상적으로 실행되면 모듈 설치 성공 시 다음과 같은 결과가 출력됩니다.
Collecting pafy Using cached https://files.pythonhosted.org/packages/b0/e8/3516f761558525b00d3eaf73744eed5c267db20650b7b660674547e3e506/pafy-0.5.4-py2.py3-none-any.whl Installing collected packages: pafy Successfully installed pafy-0.5.4
설치가 완료되었다면 아래 명령어로 pafy 모듈이 정상적으로 임포트되는지 확인합니다.
import pafy
에러 없이 실행된다면 준비가 끝난 것입니다. 만약 오류가 발생한다면 아래 모듈을 추가로 설치하면 문제를 해결할 수 있습니다.
pip install youtube-dl
youtube-dl 설치가 완료되면 다음과 같은 결과가 출력됩니다.
Collecting youtube-dl Using cached https://files.pythonhosted.org/packages/b1/ec/fe552181d6bd05a9e5b6b51f6f7ea4fed9f121ce595d788217e59318e47c/youtube_dl-2019.7.30-py2.py3-none-any.whl Installing collected packages: youtube-dl Successfully installed youtube-dl-2019.7.30
참고: YouTube 정책 변경으로 인해 최신 버전의 youtube-dl에서는 오류가 발생할 수 있습니다. 이 경우
yt-dlp사용을 고려해 보세요.
YouTube 동영상 정보 추출하기
동영상 링크만 있으면 해당 영상의 상세 정보를 손쉽게 가져올 수 있습니다. 순서는 다음과 같습니다.
pafy 모듈을 임포트합니다.
동영상 링크(url)를 변수에 저장합니다.
pafy.new(url) 메서드를 호출한 뒤 그 결과를 변수에 담습니다.
해당 변수를 통해 영상의 모든 정보를 조회합니다.
실제 예제 코드를 살펴보겠습니다.
## 모듈 임포트
import pafy
## 동영상 url
url = "https://www.youtube.com/watch?v=cr3-J5wDLsM"
## pafy의 new 메서드 호출
result = pafy.new(url)
## 제목, 조회수, 작성자, 길이, 좋아요 등 상세 정보 출력
print(f"Title: {result.title}")
print(f"Viewcount {result.viewcount}")
print(f"Author: {result.author}")
print(f"Video Length: {result.length}")
print(f"Likes: {result.likes}")
print(f"Dislikes: {result.dislikes}")
print(f"Description: {result.description}")위 프로그램을 실행하면 다음과 같은 결과를 얻을 수 있습니다.
Title: Indexing Overview Viewcount 862 Author: Tutorials Point (India) Pvt. Ltd. Video Length: 167 Likes: 6 Dislikes: 1 Description: Indexing Overview Watch more Videos at https://www.tutorialspoint.com/videotutorials/index.htm Lecture By: Mr. Arnab Chakraborty, Tutorials Point India Private Limited
최고 화질로 영상 다운로드하기
최고 품질의 영상을 다운로드하는 절차는 다음과 같습니다.
pafy 모듈을 임포트합니다.
동영상 링크를 변수에 저장합니다.
pafy.new(url) 메서드를 호출하고 결과를 변수에 담습니다.
앞서 만든 변수에서 getbest() 메서드를 호출해 최고 화질 스트림을 가져와 새 변수에 저장합니다.
해당 변수에 대해 download() 메서드를 호출해 다운로드를 시작합니다.
아래 예제 코드를 확인하세요.
## 모듈 임포트 import pafy ## 동영상 url url = "https://www.youtube.com/watch?v=cr3-J5wDLsM" ## pafy의 new 메서드 호출 result = pafy.new(url) ## getbest()로 result에서 최고 화질 영상 가져오기 best_quality_video = result.getbest() ## 출력해서 영상 품질 확인 가능 print(best_quality_video) ## download()로 다운로드 best_quality_video.download()
위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.
normal:mp4@1280x720 26,638,008 Bytes [100.00%] received. Rate: [ 820 KB/s]. ETA: [0 secs]
getbest() 메서드에 preftype 인자를 전달하면 3gp, mp4, WebM 등 원하는 형식으로 영상을 받을 수도 있습니다. 아래 문법을 참고해 직접 테스트해 보세요.
## 앞선 과정은 동일 best_quality_video = result.getbest(preftype = "mp4") ## 이후 과정도 동일
최고 음질로 오디오 다운로드하기
오디오 다운로드 역시 영상 다운로드와 과정이 거의 같습니다. getbest() 대신 getbestaudio()를 호출한 뒤, 마찬가지로 download() 메서드로 파일을 내려받으면 됩니다. 먼저 스스로 구현해 본 후 어렵다면 아래 코드를 참고하세요.
## 모듈 임포트 import pafy ## 동영상 url url = "https://www.youtube.com/watch?v=cr3-J5wDLsM" ## pafy의 new 메서드 호출 result = pafy.new(url) ## getbestaudio()로 최고 음질 오디오 가져오기 best_quality_audio = result.getbestaudio() ## 출력해서 오디오 품질 확인 가능 print(best_quality_audio) ## download()로 다운로드 best_quality_audio.download()
위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.
audio:m4a@128k 27,518 Bytes [100.00%] received. Rate: [ 306 KB/s]. ETA: [0 secs] 'Indexing Overview.m4a'
마무리
이처럼 pafy 모듈을 활용하면 몇 줄의 코드만으로 YouTube 영상의 메타데이터를 조회하고, 원하는 화질·형식의 영상 또는 오디오 파일을 간편하게 다운로드할 수 있습니다. getbest(), getbestaudio(), download() 세 가지 핵심 메서드만 기억하면 충분히 응용할 수 있습니다.