컴퓨터/Python

Python (27) - PC에서 유튜브 음악을 실행해보자 (pytubefix)

달서비 2025. 3. 10. 12:50

디스코드에서 유튜브 링크를 올리면 오디오로 실행해 주는 챗봇이 있습니다. 해당 프로그램처럼 PC에서 유튜브 음악 플레이어로 실행 방법을 소개하려고 합니다. 파이썬을 이용해서 쉽게 유튜브 비디오를 다운로드 및 활용하는 방법이 있어 공유하려고 합니다. 

유튜브 로고

글을 시작하기 전 유튜브 영상을 다운로드 후 개인소장 하는 것은 불법이 아니지만 영리를 목적으로 동영상을 이용하면 저작권 위반에 걸릴 수 있습니다.

 

사용하는 라이브러리

라이브러리 이름 사용이유
pytubefix 유튜브 동영상을 다운로드하기 위함
os 폴더 처리 관련 
pydub 오디오 파일 변환 및 처리 작업을 위함
simpleaudio 오디오를 실행하기 위함

 

유튜브 다운로드 및 실행

1. CMD에 명령어를 입력하여 패키지를 다운로드합니다.

pip install pytubefix pydub simpleaudio

 

2. pytube를 이용하여 유튜브 동영상을 다운로드합니다.

import os
from pytubefix import YouTube


def downloadYouTube(videourl, path):
    yt = YouTube(videourl)
    yt = yt.streams.filter(progressive=True, file_extension='mp4').order_by('resolution').desc().first()
    if not os.path.exists(path):
        os.makedirs(path)
    yt.download(path)

video_path = 'https://youtu.be/D9syciL3Xsg?si=ek8gwbWBnvZniotV'
downloadYouTube(video_path, 'videos')

프로그램을 실행시켜 아래 이미지처럼 비디오 파일이 나옵니다.

 

 

3. 동영상을 mp3 파일로 확장자를 변경합니다.

import os
from pydub import AudioSegment

def convert2Audio(video_file, audio_file):
    # 출력 파일이 이미 존재하는지 확인
    if os.path.exists(audio_file):
        return
    
    #파일 변경
    audio = AudioSegment.from_file(video_file, format="mp4")
    audio.export(audio_file, format="mp3")

convert2Audio('./videos/example.mp4', './example.mp3')

pydub은 FFmpeg 소프트웨어 기반으로 돌아갑니다. 프로그램이 없는 경우 설치 및 환경변수 설정을 하도록 합니다.

https://ffmpeg.org/

 

FFmpeg

Converting video and audio has never been so easy. $ ffmpeg -i input.mp4 output.avi     News September 30th, 2024, FFmpeg 7.1 "Péter" FFmpeg 7.1 "Péter", a new major release, is now available! A full list of changes can be found in the release changelo

ffmpeg.org

더보기

 

FFmpeg 다운로드 (윈도우)

운영체제가 윈도우인경우 해당 파일을 다운로드 하고 압축을 푼뒤 bin파일을 환경변수로 설정합니다.

 

 

4. 오디오를 실행합니다.

from pydub import AudioSegment
import simpleaudio as sa

def playAudio(audio_file):
    audio = AudioSegment.from_file(audio_file)
    play_obj = sa.play_buffer(audio.raw_data, num_channels=audio.channels, bytes_per_sample=audio.sample_width, sample_rate=audio.frame_rate)
    play_obj.wait_done()

playAudio('example.mp3')

 

CSV 파일로 관리하는 유튜브 플레이어를 만들어보자

스피커 - pixabay

시스템 흐름

  1. CSV 파일(playlist.csv)을 준비하고 유튜브 링크 및 제목을 입력한다. (init)
  2. CSV 파일의 내용을 프로그램이 불러온다.
  3. 유튜브 영상을 다운로드한다.
  4. 동영상 파일을 오디오 파일로 변환한다.
  5. 오디오 파일을 재생한다.
  6. CSV 파일의 다음 곡을 순차적으로 실행한다.

 

CSV 파일 포맷

CSV 파일을 작성하여 순서대로 음악을 실행할 수 있도록 설정합니다. CSV 파일 형식은 다음과 같습니다.

순번 제목 링크
1 Faded-AlanWalker https://youtu.be/D9syciL3Xsg?si=ek8gwbWBnvZniotV
2 Alone-AlanWalker https://youtu.be/WMSvUGlqWrY?si=knC1Pvubu3EIoZ4P
순번,제목,링크
1,Faded-AlanWalker,https://youtu.be/D9syciL3Xsg?si=ek8gwbWBnvZniotV
2,Alone-AlanWalker,https://www.youtube.com/watch?v=WMSvUGlqWrY

 

소스코드

유튜브 영상다운로드 내용에 더하여 pandas를 이용한 CSV 파일 처리 하는 내용을 적었습니다.

import os
import pandas as pd
from pytubefix import YouTube
from pydub import AudioSegment
import simpleaudio as sa

# 유튜브 동영상 다운로드 함수
def downloadYouTube(videourl, path='videos'):
    yt = YouTube(videourl)
    yt = yt.streams.filter(progressive=True, file_extension='mp4').order_by('resolution').desc().first()
    if not os.path.exists(path):
        os.makedirs(path)
    video_file = yt.download(path)
    return video_file

# 비디오 파일을 오디오 파일로 변환하는 함수
def convert2Audio(video_file, audio_file):
    if os.path.exists(audio_file):
        print(f"{audio_file} 이미 존재합니다.")
        return
    audio = AudioSegment.from_file(video_file, format="mp4")
    audio.export(audio_file, format="mp3")
    print(f"{audio_file}로 변환 완료")

# 오디오 파일을 실행하는 함수
def playAudio(audio_file):
    audio = AudioSegment.from_file(audio_file)
    play_obj = sa.play_buffer(audio.raw_data, num_channels=audio.channels, bytes_per_sample=audio.sample_width, sample_rate=audio.frame_rate)
    play_obj.wait_done()
    print(f"{audio_file} 재생 완료")

# CSV 파일에서 정보를 읽고 순차적으로 처리하는 함수
def process_csv(csv_file):
    df = pd.read_csv(csv_file)
    for index, row in df.iterrows():
        print(f"현재 재생 중: {row['제목']}")
        # 유튜브 다운로드
        video_file = downloadYouTube(row['링크'])
        audio_file = video_file.replace('.mp4', '.mp3')
        # 비디오 파일을 오디오로 변환
        convert2Audio(video_file, audio_file)
        # 오디오 파일 재생
        playAudio(audio_file)

if __name__ == "__main__":
    csv_file = "playlist.csv"  # CSV 파일명
    process_csv(csv_file)

 

마지막으로

여기서는 음악을 관리하고 실행하는 부분으로 설명하였습니다. 유튜브 뮤직 같은 서비스를 만들기 어렵습니다. 하지만 유튜브에는 많은 영상이 있고 아이디어가 있다면 해당 영상을 쉽게 이용할 수 있습니다.