
유튜브 영상을 다운로드하는 것 자체는 불법이 아니지만, 다운로드한 영상을 상업적으로 사용하면 불법입니다
이 점에 유의하여 활용하길 바란다
$pip install pytube pydub
pydub를 사용하려면, ffmpeg나 libav가 필요하다고 한다
gpt에게 둘의 차이와 용량을 물어보니 다음과 같이 대답해줬다
libav와 ffmpeg 모두 멀티미디어 파일 처리에 사용될 수 있으며, 용량은 약 100MB에서 300MB 정도입니다.
설치 및 사용 편의성 측면에서는 ffmpeg가 더 많이 사용됩니다.
pydub와 함께 사용할 때도 ffmpeg가 일반적으로 권장됩니다.
본인은 터미널에서 brew로 ffmpeg를 설치해줬다 (macOS)
설치하는데 꽤 오래걸린다
$brew install ffmpeg
처음에 gpt로 간단하게 코드를 짰다
처음 다운로드 받아오는 영상의 길이가 2배가 되면서 음원의 길이도 2배가 되는 이슈가 있었다
구글링해서 영상을 다운받아오는 부분의 코드만 약간 수정했다
다른 부분은 filter 부분 뿐인데, 왜인지 해결이 되었다
// 이전 코드
video_stream = yt.streams.filter(only_audio=True).first()
// 수정한 코드
video_stream = yt.streams.filter(res="720p").first()
대충 뜯어보면, 이전 코드는 영상을 다운받을 때부터 음원만 다운을 받고, mp3로 확장자를 변환해주는 느낌이었다
수정한 코드는 영상 자체를 720p로 다운받고, mp3로 확장자만 변환해준다
어차피 화면이 필요없는거면, 144p로 다운받는 게 속도는 더 빠를 듯 하다
본인은 음원을 간단히 몇 개만 다운받으려고 한거라
영상 길이도 확인하고, 잘 추출되었는지 볼 겸 원본 파일(mp4) 삭제 코드를 주석 처리 해두었다
영상 필요없는 분들은 os.remove(downloaded_file) 코드를 주석 해제하면 자동으로 원본 파일(mp4)이 삭제될 것이다
전체 코드
import os
from pytube import YouTube
from pydub import AudioSegment
def download_audio_from_youtube(youtube_url, output_folder):
# 유튜브 영상 다운로드
yt = YouTube(youtube_url)
video_stream = yt.streams.filter(res="720p").first()
if not video_stream:
print("오디오 스트림을 찾을 수 없습니다.")
return
downloaded_file = video_stream.download(output_path=output_folder)
# 다운로드된 파일의 확장자를 변경하여 파일명 가져오기
base, ext = os.path.splitext(downloaded_file)
new_file = base + '.mp3'
# AudioSegment를 사용하여 mp4를 mp3로 변환
audio = AudioSegment.from_file(downloaded_file)
# 오디오의 길이가 원본 영상의 길이와 일치하는지 확인
video_length = yt.length * 1000 # 비디오 길이를 밀리초로 변환
audio = audio[:video_length] # 비디오 길이만큼 오디오를 자름
# mp3로 내보내기
audio.export(new_file, format='mp3')
# 원본 파일 삭제 (mp4)
# os.remove(downloaded_file)
print(f"MP3 파일이 다음 경로에 저장되었습니다: {new_file}")
# 예시 사용법
youtube_url = 'https://www.youtube.com/watch?v=YOUR_VIDEO_ID'
output_folder = './downloads' # 저장할 폴더 경로
os.makedirs(output_folder, exist_ok=True)
download_audio_from_youtube(youtube_url, output_folder)
2025.02.02.
오랜만에 코드를 실행시켰더니 403 오류가 나서 수정했다
해당 코드를 실행시키기 위해서는 yt_dlp라는 라이브러리 설치해야한다
전체 코드
import os
import shutil
from yt_dlp import YoutubeDL
from pydub import AudioSegment
def check_ffmpeg_installed():
"""FFmpeg가 설치되어 있는지 확인하는 함수"""
if shutil.which("ffmpeg") is None:
print("⚠ FFmpeg가 설치되지 않았습니다. 'pydub'을 사용하려면 FFmpeg가 필요합니다.")
print("설치 방법:")
print(" - Windows: https://ffmpeg.org/download.html 에서 다운로드 후 환경 변수 설정")
print(" - macOS: brew install ffmpeg (Homebrew 필요)")
print(" - Linux: sudo apt install ffmpeg 또는 sudo yum install ffmpeg")
exit(1)
def download_audio(youtube_url, output_folder):
"""유튜브에서 오디오를 다운로드하고 MP3로 변환하는 함수"""
# FFmpeg 설치 확인
check_ffmpeg_installed()
os.makedirs(output_folder, exist_ok=True)
# yt-dlp 다운로드 옵션 설정
ydl_opts = {
'format': 'bestaudio/best', # 가장 좋은 오디오 품질 선택
'outtmpl': f"{output_folder}/%(title)s.%(ext)s", # 파일명 지정
'postprocessors': [{
'key': 'FFmpegExtractAudio',
'preferredcodec': 'mp3',
'preferredquality': '192',
}],
}
# yt-dlp 실행
with YoutubeDL(ydl_opts) as ydl:
print("🔽 유튜브 오디오 다운로드 중...")
info = ydl.extract_info(youtube_url, download=True)
filename = f"{output_folder}/{info['title']}.mp3"
print(f"✅ MP3 파일이 저장되었습니다: {filename}")
# 예시 사용법
youtube_url = "https://www.youtube.com/watch?v=YOUR_VIDEO_ID"
output_folder = "./downloads"
# 유튜브 오디오 다운로드 및 MP3 변환 실행
download_audio(youtube_url, output_folder)
깃허브에 올라와 있으니 참고하세요
[깃허브] 유튜브 음원 추출 프로그램
이 코드로 반복문을 돌리던, 크롤링과 함께 쓰던 활용할 수 있는 부분이 꽤 있을 것이라 생각한다
그러나 엄연히 상업적 이용은 불법이니, 법이 허용하는 범위 내에서만 활용하도록 하자