일하면서 자주 듣는 음악 플레이 리스트가 있습니다. 이것을 유튜브 재생목록에 넣어 듣고 있습니다. 그런데 이 노동요 패턴에 문제가 있습니다. 브라우저를 열면, 함께 열어 놓은 탭들 때문에 컴퓨터의 램이 불필요하게 많이 소모됩니다.
이 문제를 해결하기 위해 유튜브 링크를 mp3로 변환하여 다운로드를 하던 중 갑자기 챗지피티에게 글코딩으로 자동 다운로드 프로그램을 만들어 달라고 하면 어떻게 될지 궁금했습니다. 그래서 실행했고, 결과는 대성공!
아래와 같이 기록으로 남깁니다.
1. 준비물
- vscode가 필요합니다.
- 챗지피티가 필요합니다.
- 윈도우용 ffmpeg 설치가 필요합니다.
<윈도우용 ffmpeg 설치 방법>
Windows에서choco
를 사용하여ffmpeg
를 설치하는 방법은 다음과 같습니다.
-
Chocolatey 설치 확인: 먼저
choco
가 설치되어 있는지 확인합니다. 명령 프롬프트 또는 PowerShell을 열고 다음 명령어를 입력하세요.choco -v
choco
버전이 출력되면 설치된 상태입니다. 만약 설치되지 않았다면 Chocolatey 설치 가이드에서 설치 방법을 참고하여 설치하세요. -
ffmpeg 설치:
choco
를 사용하여ffmpeg
를 설치합니다. 관리자 권한으로 명령 프롬프트나 PowerShell을 실행하고 다음 명령어를 입력하세요.choco install ffmpeg -y
-
설치 확인: 설치가 완료되면
ffmpeg
가 제대로 설치되었는지 확인합니다. 명령 프롬프트나 PowerShell에서 다음 명령어를 입력합니다.ffmpeg -version
ffmpeg
버전 정보가 출력되면 정상적으로 설치된 것입니다.
이제 ffmpeg
가 설치되어 Python 스크립트에서 pydub
를 통해 오디오 파일을 MP3로 변환할 수 있습니다.
2. 글코딩 순서
(입력)
파이썬으로 playlist.txt 파일에 있는 유튜브 링크의 영상을 다운로드 받은 후 mp3의 320kps 음질로 변환하는 실행 프로그램을 만들어줘. 가상환경에서 실행되도록 구성해줘.
(결과)
가상환경을 사용하여 유튜브 링크에서 오디오를 다운로드하고 MP3로 변환하는 스크립트를 작성하려면, 먼저 가상환경을 생성하고 필요한 패키지를 설치한 후 코드를 실행하도록 하면 됩니다. 다음은 단계별 가이드입니다.
가상환경 설정
먼저, 프로젝트 폴더를 생성하고 그 안에서 가상환경을 설정하세요.
# 프로젝트 폴더 생성
mkdir youtube_mp3_downloader
cd youtube_mp3_downloader
# 가상환경 생성
python -m venv venv
# 가상환경 활성화 (Windows)
.\venv\Scripts\activate
# 가상환경 활성화 (MacOS/Linux)
source venv/bin/activate
패키지 설치
가상환경이 활성화된 상태에서 pytube
, pydub
, ffmpeg
를 설치합니다.
pip install pytube pydub
참고:
ffmpeg
는 별도로 설치해야 합니다. Mac에서는brew install ffmpeg
, Ubuntu에서는sudo apt-get install ffmpeg
명령어를 사용하여 설치할 수 있습니다.
파이썬 코드 작성
아래 코드를 download_youtube_playlist.py
라는 이름의 파일로 저장하세요.
import os
from pytube import YouTube
from pydub import AudioSegment
# YouTube 동영상을 다운로드하고 MP3 파일로 변환하는 함수
def download_and_convert_to_mp3(url, output_folder="downloads", bitrate="320k"):
yt = YouTube(url)
title = yt.title.replace(" ", "_").replace("/", "_")
audio_stream = yt.streams.filter(only_audio=True).first()
# 다운로드 폴더 생성
if not os.path.exists(output_folder):
os.makedirs(output_folder)
# 오디오 파일 다운로드
audio_file_path = os.path.join(output_folder, f"{title}.mp4")
audio_stream.download(output_path=output_folder, filename=f"{title}.mp4")
# MP4를 MP3로 변환
mp3_file_path = os.path.join(output_folder, f"{title}.mp3")
audio = AudioSegment.from_file(audio_file_path)
audio.export(mp3_file_path, format="mp3", bitrate=bitrate)
# 원본 MP4 파일 삭제
os.remove(audio_file_path)
print(f"'{title}' 다운로드 및 변환 완료: {mp3_file_path}")
# playlist.txt 파일에 있는 모든 링크 다운로드 및 변환
def process_playlist(file_path="playlist.txt"):
try:
with open(file_path, "r") as file:
urls = [line.strip() for line in file.readlines() if line.strip()]
for url in urls:
download_and_convert_to_mp3(url)
except FileNotFoundError:
print(f"'{file_path}' 파일을 찾을 수 없습니다.")
except Exception as e:
print(f"오류 발생: {e}")
# 실행
if __name__ == "__main__":
process_playlist()
playlist.txt
파일 생성
playlist.txt
파일을 youtube_mp3_downloader
폴더에 생성하고, 다운로드할 유튜브 링크를 각 줄에 하나씩 입력하세요.
예:
https://www.youtube.com/watch?v=video_id1
https://www.youtube.com/watch?v=video_id2
...
가상환경에서 코드 실행
가상환경을 활성화한 상태에서 아래 명령어를 실행하여 스크립트를 실행하세요.
python download_youtube_playlist.py
그런데 돌아가지 않습니다. 그래서 다시 한번 요청했습니다.
(입력)
yt-dlp 이걸 사용해줘.
(결과)
yt-dlp
라이브러리는 pytube
보다 더 안정적으로 유튜브 영상을 다운로드할 수 있으며, 최신 유튜브 페이지 변경 사항에 더 잘 대응합니다. 이를 이용해 playlist.txt
파일의 유튜브 링크를 다운로드하고, MP3 파일로 변환하는 코드를 작성해드리겠습니다.
라이브러리 설치
먼저 yt-dlp
와 pydub
를 설치하세요. 가상환경이 활성화된 상태에서 다음 명령어를 실행합니다.
pip install yt-dlp pydub
pydub
가 ffmpeg
에 의존하기 때문에 ffmpeg
도 설치되어 있어야 합니다. ffmpeg
는 앞서 설명한 대로 choco
등을 이용하여 설치할 수 있습니다.
Python 코드 작성
아래 코드를 download_youtube_playlist.py
파일로 저장하세요. 이 코드는 yt-dlp
를 이용하여 유튜브 영상을 다운로드하고, MP3로 변환하여 320kbps의 비트레이트로 저장합니다.
import os
from yt_dlp import YoutubeDL
from pydub import AudioSegment
def download_and_convert_to_mp3(url, output_folder="downloads", bitrate="320k"):
# 다운로드 폴더 생성
if not os.path.exists(output_folder):
os.makedirs(output_folder)
# yt-dlp 설정
ydl_opts = {
'format': 'bestaudio/best',
'outtmpl': os.path.join(output_folder, '%(title)s.%(ext)s'),
'postprocessors': [{
'key': 'FFmpegExtractAudio',
'preferredcodec': 'mp3',
'preferredquality': '320',
}],
}
try:
# YouTube 다운로드
with YoutubeDL(ydl_opts) as ydl:
info_dict = ydl.extract_info(url, download=True)
title = info_dict.get('title', 'unknown').replace(" ", "_").replace("/", "_")
mp3_file_path = os.path.join(output_folder, f"{title}.mp3")
# MP3 파일 변환 확인
if os.path.exists(mp3_file_path):
print(f"'{title}' 다운로드 및 변환 완료: {mp3_file_path}")
else:
print(f"'{title}' 변환에 실패했습니다.")
except Exception as e:
print(f"'{url}' 다운로드 및 변환 중 오류 발생: {e}")
def process_playlist(file_path="playlist.txt"):
try:
with open(file_path, "r") as file:
urls = [line.strip() for line in file.readlines() if line.strip()]
for url in urls:
download_and_convert_to_mp3(url)
except FileNotFoundError:
print(f"'{file_path}' 파일을 찾을 수 없습니다.")
except Exception as e:
print(f"오류 발생: {e}")
if __name__ == "__main__":
# 현재 디렉토리에서 playlist.txt 파일을 찾음
current_directory = os.path.dirname(os.path.abspath(__file__))
playlist_file = os.path.join(current_directory, "playlist.txt")
process_playlist(playlist_file)
파이썬 코드를 실행했습니다. 1분도 안되어 제가 자주 듣는 mp3 파일이 제 컴퓨터에 만들어졌습니다. 정말 재밌고 신기한 세상입니다. 여러분도 위의 코드를 활용하거나, 챗지피티로 직접 만들어 보세요.