본문 바로가기

WAV, MP3 파일을 일정 길이(단위 초)의 WAV 파일로 분할

webnautes 2024. 3. 16.
반응형

WAV 파일 또는 MP3 파일을 일정 길이(단위 초)의 WAV 파일로 분할하는 코드입니다.



2023. 10. 20  최초작성

2024. 3. 16



import os
import librosa
import soundfile as sf

def split_and_save(wav_path, output_dir, segment_length=30):

    """
    - wav_path : 로드할 WAV 파일 또는 MP3 파일의 경로
    - output_dir : WAV 파일들을 저장할 디렉토리 경로
    - segment_length : 분할할 세그먼트의 길이 (초 단위, 기본값은 30초)
    """

    # 출력 디렉토리가 존재하지 않으면 생성
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)

    # WAV 파일 또는 MP3 파일 로드합니다.  sr을 None으로 하면 원본 샘플링 레이트를 사용한다는 의미입니다.
    #
    # 리턴값 :
    # y는 오디오의 시계열 데이터가 저장되어 있는 넘파이 배열입니다.
    # sr은 로드된 오디오 파일에 포함된 총 샘플 수를 나타냅니다.
    y, sr = librosa.load(wav_path, sr=None)

    # 샘플의 총 길이 계산
    total_samples = len(y)

    # 전체 오디오를 segment_length 초 단위로 나눈 각 세그먼트의 샘플 수 계산
    segment_samples = segment_length * sr 

    # 지정된 길이 segment_samples로 분할하여 WAV 파일로 저장
    for start_sample in range(0, total_samples, segment_samples):
        end_sample = start_sample + segment_samples
        output_path = f"{output_dir}/segment_{start_sample // segment_samples}.wav"

        # 여기서는 segment로 분할된 오디오 데이터를 WAV 파일로 저장한다.
        sf.write(output_path, y[start_sample:end_sample], sr)


# 사용 예:
wav_path = "input_file.wav"
output_dir = "output_directory"
split_and_save(wav_path, output_dir)



반응형

시간날때마다 틈틈이 이것저것 해보며 블로그에 글을 남깁니다.

블로그의 문서는 종종 최신 버전으로 업데이트됩니다.
여유 시간이 날때 진행하는 거라 언제 진행될지는 알 수 없습니다.



영화,책, 생각등을 올리는 블로그도 운영하고 있습니다.
https://freewriting2024.tistory.com


제가 쓴 책도 한번 검토해보세요 ^^

댓글