64 lines
2.1 KiB
Python
64 lines
2.1 KiB
Python
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 |