안녕하세요! 오늘은 AI 모델 학습의 핵심인 무료 한국어 음성 데이터를 찾고 계신 분들을 위해 아주 유용한 정보를 가져왔습니다. 바로 AI Hub에서 제공하는 대규모 데이터셋, KsponSpeech를 활용해 압도적인 퀄리티의 AI 목소리를 만드는 과정입니다.
보통 우리가 구할 수 있는 무료 음성 파일들은 문장이 너무 짧거나 주변 소음이 섞여 있어, 결과물이 흔히 말하는 ‘기계음’처럼 들리기 쉽습니다. 하지만 이 데이터셋을 잘 활용하면 훨씬 자연스러운 한국어 목소리를 얻을 수 있습니다.
1. 무료 한국어 음성이 필요한 경 KsponSpeech 활용하기
KsponSpeech는 한국어 음성 인식(Automatic Speech Recognition, ASR) 기술의 발전을 위해 구축된 국내 최대 규모의 한국어 구어체 음성 데이터셋입니다.
일반적으로 음성 데이터는 뉴스나 대본을 읽는 ‘문어체’가 많지만, KsponSpeech는 실제 사람들이 일상에서 대화하는 자연스러운 구어체(자유 대화)를 담고 있다는 점이 가장 큰 특징입니다. 우리가 흔히 구하는 데이터는 문장이 짧거나 노이즈가 섞여 있어 모델이 ‘기계음’처럼 말하기 쉽습니다. 하지만 KsponSpeech는 실제 한국인들의 대화 1,000시간 분량을 담고 있어 다음과 같은 장점이 있습니다.
- 자연스러운 억양: 서울 및 수도권의 표준 대화체가 풍부합니다.
- 방대한 양: 데이터가 많을수록 모델의 ‘말맛’이 살아납니다.
- 합법적 활용: 학습 결과물에 대한 영리적 활용이 보장됩니다.
음성 이용 방법 및 참고사항
- 회원가입 필요: 국가 데이터 자산이므로 AI 허브 계정이 있어야 다운로드 권한을 신청할 수 있습니다.
- 승인 절차: 보통 신청 후 바로 승인되거나 짧은 심사 후 내려받을 수 있습니다.
- 데이터 규모: 전체 용량이 수백 GB에 달하므로 하드디스크 공간을 충분히 확보(약 500GB 이상 추천)한 뒤 전용 다운로더를 사용하는 것이 좋습니다.
2. 한국어 음성 전체 작업 프로세스 (5단계)
STEP 1: 데이터 다운로드 및 구조 파악
먼저 AI Hub에서 데이터를 다운로드합니다. 용량이 매우 크므로 하드디스크의 여유 공간(최소 500GB 이상 추천)을 확인하세요.
- 음성 파일:
.pcm형식 (수십만 개) - 스크립트:
train.trn등 (텍스트 대본)
STEP 2: 음성 파일 포맷 변환 (PCM → WAV)
Bert-VITS2는 .pcm을 직접 읽지 못합니다. 따라서 모든 파일을 학습에 최적화된 형태로 변환해야 합니다.
- 설정값: 16-bit PCM, Mono, 44100Hz (사용자님의 현재 설정 기준)
- Tip: 파이썬의
pydub이나ffmpeg라이브러리를 이용해 자동 변환 스크립트를 돌려야 합니다.
STEP 3: 텍스트 정제 및 G2P 보정 (가장 중요)
스크립트 파일(train.trn)에는 (n/)/(b/) 같은 잡음 태그와 철자/발음 형태의 이중 전사가 섞여 있습니다.
- 정제 작업: 잡음 태그 삭제 및 실제 발음 텍스트 추출
- G2P 적용: 앞서 작성한 사용자 정의 발음 사전(custom_dict)을 적용하여 ‘사건’을 [사껀]으로, ‘신라’를 [실라]로 읽도록 전처리를 수행합니다.
STEP 4: 학습 리스트(train.list) 생성
변환된 WAV 파일 경로와 정제된 텍스트를 하나로 묶어 Bert-VITS2용 학습 리스트를 만듭니다.
- 형식:
파일경로|화자이름|언어|텍스트 - 주의: 2060 12GB 사양을 고려하여, 전체 데이터 중 품질이 가장 좋은 1만 개 내외를 먼저 선별하는 것이 효율적입니다.
STEP 5: Fine-tuning (미세 조정) 시작
0부터 새로 학습하는 대신, 기존에 ‘허접한 데이터’로 돌리고 있던 체크포인트를 베이스로 깔고 학습을 시작합니다.
- 이점: 기존 모델이 배운 기본 발음 구조 위에 고품질 데이터를 덮어씌우므로 학습 시간이 획기적으로 단축됩니다.
이 작업은 크게 두 부분으로 나뉩니다. 첫째는 오디오 포맷 변환, 둘째는 .trn 파일의 지저분한 태그를 지우는 것입니다.
3. 사전 준비물 (라이브러리 설치)
가장 먼저 터미널(CMD 또는 PowerShell)을 열고 아래 라이브러리들을 설치해 주세요. 대량의 파일을 빠르게 처리하기 위해 pydub과 tqdm(진행 바 표시용)을 사용합니다.
pip install pydub tqdm
참고: pydub은 내부적으로 ffmpeg를 사용합니다. 컴퓨터에 ffmpeg가 설치되어 있지 않다면 설치 후 환경 변수(Path)에 추가되어 있어야 합니다.
4. PCM → WAV 변환 및 정제 통합 스크립트
아래 코드는 KsponSpeech의 특성을 반영하여 제작되었습니다. 데이터를 다운로드받은 폴더 경로만 지정하면 자동으로 작동하도록 설계했습니다.
import os
from pydub import AudioSegment
from tqdm import tqdm
import re
# ==========================================
# 설정 구간 (본인의 경로에 맞게 수정하세요)
# ==========================================
SOURCE_DIR = r"C:\KsponSpeech_원본_경로" # 다운로드 받은 PCM 폴더
TARGET_DIR = r"C:\KsponSpeech_WAV_변환" # WAV가 저장될 폴더
TRN_FILE = r"C:\...\train.trn" # 아까 보여주신 .trn 파일 경로
OUTPUT_LIST = "train.list" # 최종 생성될 학습 리스트 파일명
# ==========================================
def clean_text(text):
"""KsponSpeech 특수 태그 및 이중 전사 정제"""
# 1. 이중 전사 처리 (철자/발음) -> 발음만 남김
# 예: (70%)/(칠십 퍼센트) -> 칠십 퍼센트
text = re.sub(r"\((.*?)\)\/\((.*?)\)", r"\2", text)
# 2. 노이즈 태그 제거 (b/, n/, l/, o/ 등)
text = re.sub(r"(([a-z])\/)", "", text)
# 3. 특수문자 제거
text = re.sub(r"[^가-힣0-9\s\.\,\!\?\~]", "", text)
return text.strip()
def process_data():
if not os.path.exists(TARGET_DIR):
os.makedirs(TARGET_DIR)
with open(TRN_FILE, 'r', encoding='utf-8') as f:
lines = f.readlines()
final_list = []
print("변환 및 정제 작업을 시작합니다...")
for line in tqdm(lines):
try:
# .trn 파일 구조: 파일명 :: 텍스트
if " :: " not in line: continue
file_rel_path, raw_text = line.split(" :: ")
# 1. 텍스트 정제
cleaned_text = clean_text(raw_text)
if not cleaned_text: continue # 비어있는 문장 패스
# 2. 오디오 변환 (PCM -> WAV)
# 원본 pcm 파일명 (보통 확장자 없이 들어있거나 .pcm임)
source_file = os.path.join(SOURCE_DIR, file_rel_path.strip())
target_filename = file_rel_path.strip().replace("/", "_").replace(".pcm", "") + ".wav"
target_file = os.path.join(TARGET_DIR, target_filename)
# 이미 변환된 파일이 있으면 건너뛰기 (시간 단축)
if not os.path.exists(target_file):
# KsponSpeech PCM 설정: 16bit, 16000Hz (또는 파일 사양에 맞춰 수정)
audio = AudioSegment.from_raw(
source_file, sample_width=2, frame_rate=16000, channels=1
)
# Bert-VITS2용 44100Hz로 리샘플링하여 저장
audio = audio.set_frame_rate(44100)
audio.export(target_file, format="wav")
# 3. 리스트 추가 (파일경로|화자|언어|텍스트)
# 화자 이름은 KsponSpeech로 통일하거나 파일명에서 추출
final_list.append(f"{target_file}|Kspon|KO|{cleaned_text}")
except Exception as e:
# 오류 발생 시 건너뛰고 계속 진행
continue
# 최종 train.list 저장
with open(OUTPUT_LIST, 'w', encoding='utf-8') as f:
f.write("\n".join(final_list))
print(f"\n작업 완료! 생성된 파일: {OUTPUT_LIST}")
if __name__ == "__main__":
process_data()
5. 진행 순서 및 주의사항
- 샘플 테스트: 전체 데이터를 돌리기 전에
train.trn파일에서 상위 10줄만 따로 빼서 위 코드를 돌려보세요. 파일 경로가 맞는지, 소리가 잘 나오는지 확인해야 합니다. - 용량 관리: PCM을 WAV로 변환하면 용량이 약 2~3배로 늘어납니다. 저장 공간이 충분한지 꼭 확인하세요.
- 데이터 선별: KsponSpeech 전체(60만 개 이상)를 다 하는 것보다,
tqdm(lines[:10000])정도로 슬라이싱해서 최상급 데이터 1만 개만 먼저 확보하는 것이 RTX 2060 환경에서는 훨씬 효율적입니다.
이 코드를 파이썬 파일(.py)로 저장해 두시고, 데이터 다운로드가 완료되는 즉시 경로만 수정해서 실행하시면 됩니다.
여성 아나운서 음성 파일 다운받기
대량의 오디오 데이터 관리: 하위 폴더 파일 추출 및 볼륨 평준화
Bert-VITS2 모델 학습이나 데이터셋 구축을 하다 보면, 여러 하위 폴더에 흩어져 있는 수천 개의 .wav 파일을 하나로 모으거나 제각각인 볼륨을 일정하게 맞춰야 할 때가 있습니다.
이 스크립트는 수작업으로 파일을 하나하나 옮길 필요 없이, 터미널 명령 한 줄로 모든 하위 디렉터리의 음성 파일을 추출하고 학습에 최적화된 볼륨(-16 LUFS)으로 통합 관리하고 싶을 때 사용합니다.
1. 하위 폴더의 모든 WAV 파일 한곳으로 모으기 (PowerShell용)
여러 폴더에 분산된 데이터셋을 하나의 학습용 폴더로 취합할 때 사용합니다.
- 사용 방법: PowerShell 창을 열고 아래 명령어를 순서대로 입력합니다.
PowerShell
# 1. 파일을 모을 대상 폴더 생성
mkdir all_wavs
# 2. 모든 하위 폴더의 wav 파일을 찾아 all_wavs 폴더로 복사
# (파일이 많아도 자동으로 모든 경로를 탐색합니다)
Get-ChildItem -Path ".\*" -Include *.wav -Recurse | Copy-Item -Destination ".\all_wavs\"
2. 모든 WAV 파일 볼륨 평준화 (CMD/DOS 전용)
파일명의 숫자는 유지하면서, 작게 들리거나 너무 크게 녹음된 파일들을 AI 학습 표준 규격에 맞춰 평준화(Normalization)합니다. ffmpeg를 활용하여 음량만 최적화합니다.
- 사용 조건:
ffmpeg.exe경로가 올바른지 확인하세요. - 사용 방법: CMD(명령 프롬프트) 창에 아래 내용을 복사하여 실행합니다.
DOS
# 1. 결과물을 저장할 폴더 생성
if not exist cleaned_wavs mkdir cleaned_wavs
# 2. 모든 하위 폴더의 wav를 찾아 볼륨 최적화 후 저장
# loudnorm 필터를 사용하여 표준 방송 레벨(-16 LUFS)로 맞춥니다.
for /r %f in (*.wav) do "G:\naver_ai\Bert-VITS2\ffmpeg.exe" -i "%f" -af "loudnorm=I=-16:TP=-1.5:LRA=11" "cleaned_wavs\%~nxf"
- 복사 대신 이동: 파일을 옮기고 싶다면
Copy-Item대신Move-Item을 사용하세요. - 볼륨 기준:
-16 LUFS는 딥러닝 음성 합성 모델 학습 시 가장 대중적으로 권장되는 음량 레벨입니다. - 경로 주의:
ffmpeg.exe가 들어있는 실제 경로가 코드와 일치하는지 꼭 확인해 주세요.
