본문 바로가기
일반IT

🐍 파이썬으로 동영상에서 오디오만 쏙! 초간단 추출 자동화 🎧

by gasbugs 2025. 8. 18.

안녕하세요! 코딩의 즐거움을 나누는 블로거입니다. 😊 오늘은 파이썬(Python)을 이용해 여러 개의 동영상 파일에서 오디오(mp3)만 한 번에 추출하고, 원본 영상과 추출된 오디오 파일을 깔끔하게 정리하는 자동화 스크립트를 소개해 드리려고 해요.

강의 영상에서 음성만 따로 듣고 싶을 때, 뮤직비디오에서 노래만 저장하고 싶을 때 정말 유용하답니다! 그럼, 차근차근 알아볼까요? 🚀

 

 


✨ 왜 필요할까요?

가끔 동영상은 필요 없고 소리만 듣고 싶을 때가 있죠?

  • 강의/강연 영상 📖: 이동 중에 음성만 반복해서 듣고 싶을 때
  • 뮤직비디오 🎵: 좋아하는 가수의 노래를 mp3 파일로 만들고 싶을 때
  • 인터뷰 영상 🎤: 내용을 텍스트로 옮기거나 팟캐스트처럼 듣고 싶을 때

이럴 때마다 동영상 편집 프로그램을 열어서 하나씩 작업하려면 번거롭잖아요? 오늘 배울 파이썬 스크립트 하나면 폴더에 있는 모든 영상을 한 번에 처리할 수 있답니다!


💻 준비물

스크립트를 실행하기 전에 딱 한 가지만 준비하면 됩니다. 바로 moviepy라는 파이썬 라이브러리인데요, 동영상과 오디오를 쉽게 다룰 수 있게 해주는 아주 강력한 도구랍니다.

 

아래 명령어를 터미널이나 명령 프롬프트에 입력해서 간단하게 설치해주세요.

pip install moviepy

📜 전체 코드 살펴보기

오늘 우리가 함께 만들어 볼 전체 코드입니다. 한 줄 한 줄 어떤 역할을 하는지 바로 아래에서 상세히 설명해 드릴게요!

import os
import shutil
from moviepy.editor import VideoFileClip

# 1. 파일들을 저장할 기본 디렉토리와 하위 디렉토리를 설정해요.
base_dir = "audio_split"
video_dir = os.path.join(base_dir, "video")
audio_dir = os.path.join(base_dir, "audio")

# 2. 위에서 설정한 폴더들이 없다면 자동으로 만들어줘요.
os.makedirs(video_dir, exist_ok=True)
os.makedirs(audio_dir, exist_ok=True)

# 3. 처리할 동영상 파일의 확장자를 지정해요.
video_exts = ('.mp4', '.mkv', '.avi', '.mov', '.webm')

# 4. 현재 폴더에 있는 모든 파일을 하나씩 확인해요.
for filename in os.listdir('.'):
    # 5. 파일이 우리가 지정한 동영상 확장자로 끝나는지 확인해요. (대소문자 구분 없이!)
    if filename.lower().endswith(video_exts):
        try:
            # 6. 원본 영상 파일을 'video' 폴더에 복사해서 백업해요.
            shutil.copy2(filename, video_dir)
            
            # 7. 동영상 파일을 열고 오디오를 추출해요.
            video = VideoFileClip(filename)
            output_name = os.path.splitext(filename)[0] + '.mp3'
            audio_path = os.path.join(audio_dir, output_name)
            video.audio.write_audiofile(audio_path)
            
            print(f"✅ 오디오 추출 완료: {audio_path}")
            
        except Exception as e:
            # 8. 만약 문제가 생기면 에러 메시지를 출력해요.
            print(f"❌ 에러 발생({filename}): {e}")

🔍 코드 한 줄 한 줄 뜯어보기

1️⃣ 라이브러리 불러오기 & 폴더 설정

 
import os
import shutil
from moviepy.editor import VideoFileClip

# 저장 디렉토리 설정
base_dir = "audio_split"
video_dir = os.path.join(base_dir, "video")
audio_dir = os.path.join(base_dir, "audio")
  • os: 폴더나 파일을 다루는 기본 기능(폴더 생성, 파일 목록 읽기 등)을 사용하기 위해 필요해요.
  • shutil: 파일을 복사하는 등 조금 더 고수준의 파일 작업을 위해 사용해요.
  • moviepy.editor.VideoFileClip: 오늘의 주인공! 🦸‍♂️ 동영상 파일을 불러와 편집하는 역할을 해요.
  • 그 아래에서는 결과물을 저장할 폴더 경로를 미리 변수로 만들어 둡니다. audio_split이라는 부모 폴더 아래에, 원본 영상을 보관할 video 폴더와 추출된 오디오를 저장할 audio 폴더를 만들기로 계획했어요.

2️⃣ 폴더 자동 생성 📁

# 폴더 없으면 생성
os.makedirs(video_dir, exist_ok=True)
os.makedirs(audio_dir, exist_ok=True)
  • os.makedirs()는 폴더를 만드는 함수예요.
  • exist_ok=True 옵션 덕분에 폴더가 이미 있어도 에러 없이 그냥 넘어간답니다. 스크립트를 여러 번 실행해도 걱정 없겠죠?

3️⃣ 동영상 파일 찾기 🎬

video_exts = ('.mp4', '.mkv', '.avi', '.mov', '.webm')

for filename in os.listdir('.'):
    if filename.lower().endswith(video_exts):
        # ... (추출 작업)
  • video_exts: 우리가 오디오를 추출할 동영상 파일의 종류(확장자)를 미리 정해둬요. 여기에 다른 확장자를 추가할 수도 있어요!
  • os.listdir('.'): 현재 스크립트가 있는 폴더의 모든 파일과 폴더 목록을 가져와요.
  • for filename in ...: 가져온 목록을 하나씩 filename 변수에 넣으며 반복해요.
  • filename.lower().endswith(video_exts): 파일 이름(filename)을 모두 소문자로 바꾼 뒤(lower()), 우리가 정해둔 동영상 확장자(video_exts) 중 하나로 끝나는지(endswith()) 확인해요. 이렇게 하면 'Video.MP4'처럼 대문자가 섞여 있어도 잘 찾아낼 수 있어요.

4️⃣ 핵심! 오디오 추출 및 저장

try:
    # 원본 영상 파일 복사
    shutil.copy2(filename, video_dir)
    
    # 오디오 추출 및 저장
    video = VideoFileClip(filename)
    output_name = os.path.splitext(filename)[0] + '.mp3'
    audio_path = os.path.join(audio_dir, output_name)
    video.audio.write_audiofile(audio_path)
    
    print(f"오디오 추출 완료: {audio_path}")
except Exception as e:
    print(f"에러 발생({filename}): {e}")
  • try...except: 가장 중요한 부분이에요. 혹시 파일이 깨졌거나 지원하지 않는 형식이라서 오류가 나더라도 프로그램이 멈추지 않고, 어떤 파일에서 문제가 생겼는지 알려준 뒤 다음 파일로 넘어가게 해주는 안전장치랍니다.
  • shutil.copy2(filename, video_dir): 원본 동영상 파일을 우리가 만든 video 폴더로 복사해요. 원본은 소중하니까요! 😉
  • video = VideoFileClip(filename): moviepy를 이용해 동영상 파일을 열어요.
  • os.path.splitext(filename)[0] + '.mp3': 파일 이름에서 확장자를 떼어낸 뒤(.mp4 제거), .mp3를 붙여서 저장할 오디오 파일 이름을 만들어요. (예: my_video.mp4 -> my_video.mp3)
  • audio_path = os.path.join(audio_dir, output_name): audio 폴더 경로와 방금 만든 mp3 파일 이름을 합쳐서 최종 저장 경로를 완성해요.
  • video.audio.write_audiofile(audio_path): 바로 이 부분이 마법을 부리는 코드입니다! 🧙‍♂️ 불러온 비디오 객체(video)에서 오디오 부분(audio)만 지정된 경로(audio_path)에 파일로 저장(write_audiofile)해요.

🚀 스크립트 사용법

  1. 위 코드를 extract_audio.py 와 같이 .py 확장자로 저장하세요.
  2. 오디오를 추출하고 싶은 동영상 파일들을 extract_audio.py 파일과 같은 폴더에 넣어주세요.
  3. 터미널(명령 프롬프트)을 열고 해당 폴더로 이동한 뒤, 아래 명령어를 실행하세요.
python extract_audio.py

잠시 기다리면 터미널에 "오디오 추출 완료" 메시지가 뜨고, audio_split 이라는 새 폴더가 생겼을 거예요. 그 안의 audio 폴더에 mp3 파일들이, video 폴더에 원본 영상들이 정리된 것을 확인하실 수 있습니다! 🎉

이제 여러분도 파이썬으로 반복적인 파일 처리 작업을 멋지게 자동화할 수 있게 되셨습니다. 이 스크립트를 응용해서 여러분만의 편리한 도구를 만들어보는 건 어떨까요?

궁금한 점이 있다면 언제든지 댓글로 남겨주세요!