ffmpeg切割音頻
我希望對指定音頻切割,按照開始時間,結束時間,切割成新文件,自動保存,非常好用
step1:
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: 開始時間(秒),默認為0end_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_secondsprint(f"原始文件時長: {original_duration:.2f}秒")# 轉換為毫秒start_ms = start_time * 1000end_ms = end_time * 1000# 驗證時間范圍if start_ms < 0:start_ms = 0print(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 Trueexcept Exception as e:print(f"處理出錯: {str(e)}")return Falseif __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 = 0end_time = 60print("音頻文件剪切工具")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處理失敗,請檢查錯誤信息")
修改版本
from pydub import AudioSegment
import os
import subprocess# 配置FFmpeg路徑(確保路徑正確)
ffmpeg_dir = r"C:\Program Files\ffmpeg-8.0-essentials_build\bin"
ffmpeg_path = os.path.join(ffmpeg_dir, "ffmpeg.exe")
ffprobe_path = os.path.join(ffmpeg_dir, "ffprobe.exe")# 檢查并設置路徑
if os.path.exists(ffmpeg_path) and os.path.exists(ffprobe_path):AudioSegment.converter = ffmpeg_pathAudioSegment.ffprobe = ffprobe_path# 添加環境變量確保子進程能找到FFmpegos.environ["PATH"] = ffmpeg_dir + os.pathsep + os.environ["PATH"]
else:print("警告:未找到FFmpeg或FFprobe,將嘗試使用系統路徑中的FFmpeg")# 驗證系統PATH中是否有FFmpegtry:subprocess.run(["ffmpeg", "-version"], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)except Exception:print("錯誤:系統PATH中未找到FFmpeg,請檢查安裝")exit(1)def trim_audio_file(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_secondsprint(f"原始文件時長: {original_duration:.2f}秒")# 轉換為毫秒start_ms = start_time * 1000end_ms = end_time * 1000# 驗證時間范圍if start_ms < 0:start_ms = 0print(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 Trueexcept Exception as e:print(f"處理出錯: {str(e)}")return Falseif __name__ == "__main__":# 固定文件路徑input_path = r"D:\Users\wangrusheng\Downloads\r.mp3"output_path = r"D:\Users\wangrusheng\Downloads\rad.mp3"# 固定時間范圍 (0-10秒)start_time = 0end_time = 10print("音頻文件剪切工具")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