import os import gradio as gr from moviepy.editor import VideoFileClip from datetime import datetime import time def convert_mp4_to_mp3(video_file_path, output_dir): # MP3 변환 과정 video = VideoFileClip(video_file_path) audio = video.audio output_path = os.path.join(output_dir, os.path.splitext(os.path.basename(video_file_path))[0] + ".mp3") audio.write_audiofile(output_path) audio.close() video.close() return output_path def mp4_to_mp3_converter(video_file): # 비디오 파일이 없을 때 처리 if video_file is None: return "오류: 업로드된 비디오 파일이 없습니다.", None # 파일 확장자 체크 allowed_extensions = ['mp4', 'webm', 'avi', 'mov', 'mkv'] file_extension = os.path.splitext(video_file.name)[1][1:].lower() if file_extension not in allowed_extensions: return f"오류: 지원되지 않는 파일 형식입니다. 다음 확장자 중 하나의 파일을 업로드하세요: {', '.join(allowed_extensions)}", None # 저장 경로 설정 modeltarget = "mp4_to_mp3_conversion" save_path = os.path.join("/home/user/app", modeltarget) os.makedirs(save_path, exist_ok=True) # MP3 변환 및 결과 반환 try: mp3_file_path = convert_mp4_to_mp3(video_file.name, save_path) return f"변환 완료! MP3 파일이 생성되었습니다.", mp3_file_path except Exception as e: return f"변환 중 오류가 발생했습니다: {str(e)}", None # Gradio 인터페이스 설정 iface = gr.Interface( fn=mp4_to_mp3_converter, inputs=gr.File(label="비디오 파일 업로드"), outputs=[ gr.Markdown(label="상태"), gr.File(label="다운로드 MP3") ], title="비디오에서 음성 파일로 변환기", description="비디오 파일을 MP3 형식으로 변환합니다.", allow_flagging=False, ) if __name__ == "__main__": iface.launch()