대학교 자유 연구 때 다루던 Spleeter에 관한 내용이 생각나서 작성
기본적으로 음원을 분리해주는 툴이라고 생각하며 좋다.
2stems로 분리한다는 설정을 주면, 음원을 vocals.wav
와 accompaniment.wav
로 분리해준다.
엄청 깔끔하게 분리되는 편은 아니지만 나름 들을만 한 정도이다. (포스트 하단에 결과 첨부)
로컬에서 Spleeter로 음원 분리 환경 구현
python 환경에서 작동하며, 조금 검색을 해 보면 Google Colab에서도 사용할 수 있도록 마련된 환경이 보이는데, 어째서인지 런타임이 강제로 종료되는 등 잘 작동하지 않아 로컬 환경에서 구현하였다.
선행하여 해 주어야 할 것이 두 가지 있다.
pip install spleeter
를 통한 spleeter 패키지의 설치FFmpeg
의 설치. 공식 FFmpeg 웹사이트에서 운영체제에 맞는 설치 지침을 확인 할 수 있다.- Windows의 경우, FFmpeg의 바이너리(zip) 파일을 다운로드하고, 압축을 해제한 후, ffmpeg.exe가 포함된 디렉토리를 시스템의 환경 변수 Path에 추가한다.
- 설치가 완료된 후, 터미널이나 커맨드 프롬프트에서 ffmpeg -version 명령어를 실행하여 FFmpeg가 올바르게 설치되었는지 확인할 수 있다.
위 내용이 선행되었다면, 아래와 같은 내용의 Python 파일을 작성하여 실행한다.
여러가지 옵션을 줄 수 있지만, 일단은 아래와 같이 작성하여 잘 작동하는지 확인한다.
from spleeter.separator import Separator
def main():
# 오디오 파일 분리 설정
separator = Separator('spleeter:2stems')
# 분리할 오디오 파일 경로
audio_path = './song.mp3'
# 결과물을 저장할 디렉토리
output_path = 'output/'
# 오디오 파일 분리 실행
separator.separate_to_file(audio_path, output_path)
# 결과 확인 등의 추가 코드
if __name__ == '__main__':
main()
if __name__ == '__main__':
의 형식을 사용하지 않는다면 Python의 multiprocessing 모듈을 사용할 때 발생하는 문제를 겪게 된다.
Windows 환경에서 multiprocessing을 사용할 때, 스크립트의 메인 블록이 올바르게 보호되지 않기 때문이라고 한다.
다른 변수가 없다면, main.py
와 song.mp3
이외에 아래와 같은 파일구조가 만들어졌을 것이다.
음원소스는 다음의 유튜브 동영상을 사용하였다.
song.mp3와 이로부터 생성된 vocals.wav(보컬), accompaniment.wav(반주)는 아래와 같다.
성능을 보여주기 위해 첨부하는데, 출력된 파일 크기가 각각 20메가를 넘어, 부득이하게 크기를 줄여 첨부하였다.
사용한다면 vocal쪽보다 반주쪽이 더 사용하기에 자연스러울 것 같다.
Colab 에서 Spleeter로 음원 분리 환경 시도
더하여, Colab에서 시도했던 내용은 아래와 같다.(공유)
# 스플리터와 ffmpeg 설치
# 필요한 패키지들 설치
!apt install ffmpeg
!pip install spleeter
# Spleeter 사용하여 음원 분리
# 파일 업로드
from google.colab import files
uploaded = files.upload()
# 업로드한 파일 목록 중 첫 번째 파일의 이름을 가져옵니다.
file_name = next(iter(uploaded))
# spleeter를 사용하여 파일 분리
!spleeter separate -o output/ "$file_name"
from IPython.display import Audio, display
# 보컬 파일 재생
vocals_path = 'output/song/vocals.wav' # spleeter가 저장한 보컬 파일 경로
display(Audio(vocals_path))
# # 반주 파일 재생
# accompaniment_path = 'output/song/accompaniment.wav' # spleeter가 저장한 반주 파일 경로
# display(Audio(accompaniment_path))
마지막 블럭을 실행하면, 런타임 연결이 끊겨 실행할 수가 없게 된다. 아무래도 Colab 유료 플랜을 사용하고 있지 않은것이 문제라고 예상된다.
'Dev > Try & Projects' 카테고리의 다른 글
스팀웍스(Steamworks) 파트너 등록 완료 (0) | 2024.03.06 |
---|---|
midi 음계를 상하반전 시켜주거나 음계 일괄조정(Inverting MIDI Scales Vertically or Bulk Adjusting Pitch) (0) | 2024.02.20 |
첫 오픈소스 프로젝트 `kemono-dl`과 트러블슈팅 (0) | 2024.02.02 |
[ChatGPT로 AI 여자친구 만들기] 따라해보기 (3) | 2023.12.09 |
Arcacon GIF Downloader (아카콘 GIF 다운로더) 크롬 확장프로그램 (0) | 2023.08.07 |