import logging import os import subprocess from logging.handlers import RotatingFileHandler # 配置日志 logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s', handlers=[ logging.StreamHandler(), # 控制台日志 RotatingFileHandler('app.log', maxBytes=1024 * 1024 * 5, backupCount=3) # 日志文件 ]) def mp4_to_wav(mp4_file): try: mp4_dir = os.path.dirname(mp4_file) mp4_filename = os.path.splitext(os.path.basename(mp4_file))[0] wav_file = os.path.join(mp4_dir, f"{mp4_filename}.wav") command = [ 'ffmpeg', '-y', '-i', mp4_file, '-vn', # 去除视频流 '-acodec', 'pcm_s16le', # 使用 PCM 16 位有符号小端编码 '-ar', '44100', # 设置采样率为 44100 Hz '-ac', '2', # 设置声道数为 2(立体声) wav_file ] subprocess.run(command, check=True) logging.info(f"成功将 {mp4_file} 转换为 {wav_file}") return wav_file except subprocess.CalledProcessError as e: logging.error(f"转换失败: {e}") return None except FileNotFoundError: logging.error("未找到 FFmpeg,请确保已安装并配置好 FFmpeg 环境。") return None def mp4_to_mp3(mp4_file): try: mp4_dir = os.path.dirname(mp4_file) mp4_filename = os.path.splitext(os.path.basename(mp4_file))[0] mp3_file = os.path.join(mp4_dir, f"{mp4_filename}.mp3") command = [ 'ffmpeg', '-y', '-i', mp4_file, '-vn', # 去除视频流 mp3_file ] print(command) subprocess.run(command, check=True) logging.info(f"成功将 {mp4_file} 转换为 {mp3_file}") return mp3_file except subprocess.CalledProcessError as e: logging.error(f"转换失败: {e}") return None except FileNotFoundError: logging.error("未找到 FFmpeg,请确保已安装并配置好 FFmpeg 环境。") return None