python

파이썬으로 만든 '텍스트 to 음성' 코드

알세지 2024. 6. 28. 20:21

 

Python Code Analysis

이 코드는 텍스트를 음성으로 변환하고 ffmpeg를 사용하여 음성 파일의 속도를 조절하는 프로그램입니다. 주요 기능과 흐름을 설명하겠습니다.

주요 기능

  • ffmpeg 설치 경로 확인 및 설정
  • 디렉토리 생성
  • 텍스트를 음성 파일로 변환 (gTTS 사용)
  • 음성 파일의 속도 조절 (ffmpeg 사용)

코드 분석


import os
from gtts import gTTS
import shutil
import subprocess
import uuid

# ffmpeg 실행 파일 경로 설정 (Windows 기준, 실제 설치 경로에 맞게 수정 필요)
FFMPEG_PATH = r"C:\Users\admin\Downloads\ffmpeg-7.0.1-essentials_build\ffmpeg-7.0.1-essentials_build\bin\ffmpeg.exe"

# 저장할 디렉토리 지정
save_directory = os.path.join(os.path.expanduser("~"), "Desktop", "espeak_outputs")

def ensure_dir_exists(directory):
    """지정된 디렉토리가 존재하지 않으면 생성합니다."""
    if not os.path.exists(directory):
        os.makedirs(directory)
        print(f"Created directory: {directory}")

def check_ffmpeg_installation():
    """ffmpeg가 설치되어 있는지 확인합니다."""
    global FFMPEG_PATH  # 함수의 맨 위에서 global 선언
    if not os.path.exists(FFMPEG_PATH):
        print(f"ffmpeg not found at {FFMPEG_PATH}")
        ffmpeg_in_path = shutil.which("ffmpeg")
        if ffmpeg_in_path:
            FFMPEG_PATH = ffmpeg_in_path
            print(f"Found ffmpeg in PATH: {FFMPEG_PATH}")
        else:
            print("ffmpeg not found in PATH. Please install ffmpeg or update the FFMPEG_PATH.")
            return False
    return True

def change_speed(input_file, output_file, speed):
    """ffmpeg를 사용하여 MP3 파일의 속도를 변경합니다."""
    command = f'"{FFMPEG_PATH}" -i "{input_file}" -filter:a "atempo={speed}" "{output_file}"'
    print(f"Executing command: {command}")
    try:
        result = subprocess.run(command, shell=True, check=True, capture_output=True, text=True)
        print(f"Changed speed of {input_file} and saved as {output_file}")
    except subprocess.CalledProcessError as e:
        print(f"Error occurred during speed change: {e}")
        print(f"Error output: {e.stderr}")

def speak_with_gtts(text, output_file, lang='ko', speed=1.0):
    """gTTS를 사용하여 텍스트를 음성으로 변환하고 MP3 파일로 저장합니다."""
    tts = gTTS(text=text, lang=lang)
    temp_mp3_file = os.path.join(save_directory, "temp_" + output_file)
    final_mp3_file = os.path.join(save_directory, output_file)
    tts.save(temp_mp3_file)
    print(f"Audio saved as {temp_mp3_file}")
    if speed != 1.0:
        change_speed(temp_mp3_file, final_mp3_file, speed)
        os.remove(temp_mp3_file)  # 임시 파일 삭제
    else:
        os.rename(temp_mp3_file, final_mp3_file)  # 속도 조정이 필요 없는 경우

def main():
    if not check_ffmpeg_installation():
        return

    ensure_dir_exists(save_directory)

    print("텍스트를 입력하세요. 종료하려면 'end'를 입력하세요.")
    test_cases = []
    while True:
        text = input("텍스트: ")
        if text.lower() == 'end':
            break
        output_file = input("출력 파일 이름 (예: output.mp3): ")
        lang = input("언어 코드 (예: ko, en): ")
        speed = float(input("속도 조정 값 (예: 1.0, 1.5): "))
        test_cases.append((text, output_file, lang, speed))

    for text, output_file, lang, speed in test_cases:
        speak_with_gtts(text, output_file, lang, speed)

if __name__ == "__main__":
    main()
            

요약

이 코드는 텍스트를 음성 파일로 변환하고, 필요시 ffmpeg를 이용해 음성 파일의 재생 속도를 조절합니다.

주요 기능은 ffmpeg 설치 확인, 디렉토리 생성, 텍스트 음성 변환, 음성 파일 속도 조절입니다.

사용자 입력을 통해 여러 음성 파일을 생성할 수 있습니다.