이 코드는 사용자가 입력한 텍스트를 음성으로 변환하여 mp3 파일로 저장하는 프로그램입니다. 프로그램은 gTTS 라이브러리를 사용하여 텍스트를 음성으로 변환하고, ffmpeg를 사용하여 음성 파일의 속도를 조정할 수 있습니다. 아래는 코드의 주요 부분에 대한 분석입니다.
코드 설명
▶ ffmpeg 설치 확인: check_ffmpeg_installation() 함수는 ffmpeg의 설치 여부를 확인하고 그 결과를 사용자에게 알립니다.
▶ 디렉토리 생성: ensure_dir_exists(save_directory) 함수는 음성 파일을 저장할 디렉토리가 존재하지 않을 경우 생성합니다.
▶ 사용자 입력 처리: 사용자가 텍스트를 입력하고, 'end'를 입력할 때까지 반복합니다. 입력된 텍스트는 리스트에 저장됩니다.
▶ 음성 변환 및 저장: speak_with_gtts() 함수는 입력된 텍스트를 음성 파일로 저장하고, 필요한 경우 속도를 조정합니다.
■ 주요 모듈 및 설정
1. 모듈 임포트
import os
from gtts import gTTS
import shutil
import subprocess
import uuid
2. FFMPEG 경로 설정
FFMPEG_PATH = "/opt/homebrew/bin/ffmpeg"
3. 저장 디렉토리 설정
save_directory = os.path.join(os.path.expanduser("~"), "Desktop", "espeak_outputs")
■ 함수 설명
1. 디렉토리 존재 확인 및 생성 함수
def ensure_dir_exists(directory):
if not os.path.exists(directory):
os.makedirs(directory)
print(f"Created directory: {directory}")
2. ffmpeg 설치 확인 함수
def check_ffmpeg_installation():
global FFMPEG_PATH
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
3. 속도 조정 함수
def change_speed(input_file, output_file, speed):
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}")
4. 텍스트를 음성으로 변환하고 저장하는 함수
def speak_with_gtts(text, output_file, lang='ko', speed=1.6):
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) # 속도 조정이 필요 없는 경우
■ 메인 함수
- ffmpeg 설치 확인
- 저장 디렉토리 존재 확인 및 생성
- 사용자로부터 텍스트 입력 받기
- 입력받은 텍스트를 음성 파일로 변환
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 = f"{uuid.uuid4()}.mp3"
lang = 'ko'
speed = 1.6
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()
'python' 카테고리의 다른 글
Python으로 PowerPoint 프레젠테이션 자동화하기: 장단점 및 실전 가이드 (0) | 2024.07.04 |
---|---|
python이 엑셀보다 나은 10가지 (0) | 2024.07.04 |
파이썬으로 만든 '텍스트 to 음성' 코드 (0) | 2024.06.28 |
텍스트를 음성으로 변환하여 파일로 저장하는 파이썬 스크립트 가이드 (0) | 2024.06.28 |
엑셀 파일 통합: VBA 매크로 vs 파이썬 - 어떤 방법이 더 좋을까? (0) | 2024.06.20 |