ffmpeg切割音频
我希望对指定音频切割,按照开始时间,结束时间,切割成新文件,自动保存,非常好用
step1:
python
from pydub import AudioSegment
import os
# 配置FFmpeg路径(确保路径正确)
ffmpeg_path = r"C:\ffmpeg\bin\ffmpeg.exe"
if os.path.exists(ffmpeg_path):
AudioSegment.converter = ffmpeg_path
else:
print("警告:未找到FFmpeg,将尝试使用系统路径中的FFmpeg")
def trim_audio_file(input_path, output_path, start_time=0, end_time=20):
"""
剪切单个音频文件的指定时间段
参数:
input_path: 输入文件路径
output_path: 输出文件路径
start_time: 开始时间(秒),默认为0
end_time: 结束时间(秒),默认为20
"""
try:
# 验证输入文件存在
if not os.path.exists(input_path):
raise FileNotFoundError(f"输入文件不存在: {input_path}")
# 获取文件扩展名
ext = os.path.splitext(input_path)[1].lower()
supported_extensions = ['.mp3', '.wav', '.flac', '.ogg', '.m4a']
if ext not in supported_extensions:
raise ValueError(f"不支持的音频格式: {ext}")
print(f"正在处理: {os.path.basename(input_path)}")
# 加载音频文件
audio = AudioSegment.from_file(input_path)
original_duration = audio.duration_seconds
print(f"原始文件时长: {original_duration:.2f}秒")
# 转换为毫秒
start_ms = start_time * 1000
end_ms = end_time * 1000
# 验证时间范围
if start_ms < 0:
start_ms = 0
print(f"警告: 开始时间调整为0秒")
if end_ms > len(audio):
end_ms = len(audio)
print(f"警告: 结束时间调整为文件末尾 ({end_ms / 1000:.2f}秒)")
if start_ms >= end_ms:
raise ValueError(f"无效的时间范围: {start_time}s-{end_time}s")
# 剪切音频
trimmed_audio = audio[start_ms:end_ms]
# 确保输出目录存在
os.makedirs(os.path.dirname(output_path), exist_ok=True)
# 导出文件
trimmed_audio.export(output_path, format=ext[1:])
print(f"成功剪切: {start_time}s - {end_time}s")
print(f"输出文件时长: {trimmed_audio.duration_seconds:.2f}秒")
print(f"已保存至: {output_path}")
return True
except Exception as e:
print(f"处理出错: {str(e)}")
return False
if __name__ == "__main__":
# 固定文件路径
input_path = r"D:\Users\wangrusheng\Downloads\r.mp3" # TXT文件路径
output_path = r"D:\Users\wangrusheng\Downloads\rad.mp3" # TXT文件路径
# 固定时间范围 (0-20秒)
start_time = 0
end_time = 60
print("音频文件剪切工具")
print("=" * 40)
print(f"输入文件: {input_path}")
print(f"输出文件: {output_path}")
print(f"剪切范围: {start_time}秒 - {end_time}秒")
# 处理文件
print("\n开始处理...")
success = trim_audio_file(input_path, output_path, start_time, end_time)
if success:
print("\n处理完成!")
else:
print("\n处理失败,请检查错误信息")
end