Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python으로 YouTube 영상·오디오 다운로드하기 — pafy 모듈 완벽 가이드

들어가며

이 글에서는 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() 세 가지 핵심 메서드만 기억하면 충분히 응용할 수 있습니다.