本文目录导读:

方法1:去除开头静音(自动检测)
import os
from pydub import AudioSegment
def remove_initial_silence(input_dir, output_dir, silence_thresh=-50.0, chunk_size=10):
"""
批量去除音频文件开头静音
参数:
input_dir: 输入文件夹路径
output_dir: 输出文件夹路径
silence_thresh: 静音阈值(dBFS),越小越敏感
chunk_size: 检测静音的块大小(ms)
"""
if not os.path.exists(output_dir):
os.makedirs(output_dir)
for filename in os.listdir(input_dir):
if filename.endswith(('.mp3', '.wav', '.m4a', '.ogg', '.flac')):
file_path = os.path.join(input_dir, filename)
print(f"处理: {filename}")
# 加载音频文件
audio = AudioSegment.from_file(file_path)
# 检测并去除开头静音
start_trim = detect_leading_silence(audio, silence_thresh, chunk_size)
trimmed_audio = audio[start_trim:]
# 保存处理后的文件
output_path = os.path.join(output_dir, filename)
trimmed_audio.export(output_path, format=os.path.splitext(filename)[1][1:])
print(f" - 去除 {start_trim/1000:.2f} 秒静音")
def detect_leading_silence(sound, silence_thresh=-50.0, chunk_size=10):
"""
检测音频开头的静音长度
返回需要剪切的毫秒数
"""
trim_ms = 0
while trim_ms < len(sound):
if sound[trim_ms:trim_ms+chunk_size].dBFS > silence_thresh:
break
trim_ms += chunk_size
return trim_ms
# 使用示例
if __name__ == "__main__":
input_folder = "input_audio" # 输入文件夹
output_folder = "output_audio" # 输出文件夹
remove_initial_silence(input_folder, output_folder)
方法2:去除固定长度开头
import os
from pydub import AudioSegment
def remove_fixed_duration(input_dir, output_dir, remove_seconds=1.0):
"""
批量去除音频文件开头固定长度
参数:
input_dir: 输入文件夹路径
output_dir: 输出文件夹路径
remove_seconds: 去除开头的秒数
"""
if not os.path.exists(output_dir):
os.makedirs(output_dir)
remove_ms = int(remove_seconds * 1000) # 转换为毫秒
for filename in os.listdir(input_dir):
if filename.endswith(('.mp3', '.wav', '.m4a', '.ogg', '.flac')):
file_path = os.path.join(input_dir, filename)
print(f"处理: {filename}")
# 加载音频文件
audio = AudioSegment.from_file(file_path)
# 去除开头固定长度
trimmed_audio = audio[remove_ms:] if len(audio) > remove_ms else audio
# 保存处理后的文件
output_path = os.path.join(output_dir, filename)
trimmed_audio.export(output_path, format=os.path.splitext(filename)[1][1:])
print(f" - 去除前 {remove_seconds} 秒")
# 使用示例
if __name__ == "__main__":
input_folder = "input_audio"
output_folder = "output_audio"
remove_fixed_duration(input_folder, output_folder, remove_seconds=2.0)
方法3:高级版本(带多种选项)
import os
import argparse
from pydub import AudioSegment
class AudioTrimmer:
def __init__(self):
self.supported_formats = {'.mp3', '.wav', '.m4a', '.ogg', '.flac', '.aac'}
def batch_process(self, input_dir, output_dir, mode='silence', **kwargs):
"""
批量处理音频文件
参数:
mode: 'silence' - 去除静音, 'fixed' - 固定长度去除
"""
if not os.path.exists(output_dir):
os.makedirs(output_dir)
processed = 0
for filename in os.listdir(input_dir):
ext = os.path.splitext(filename)[1].lower()
if ext in self.supported_formats:
file_path = os.path.join(input_dir, filename)
try:
audio = AudioSegment.from_file(file_path)
if mode == 'silence':
trimmed_audio = self._remove_silence(audio, **kwargs)
elif mode == 'fixed':
trimmed_audio = self._remove_fixed(audio, **kwargs)
# 保存文件
output_path = os.path.join(output_dir, filename)
trimmed_audio.export(output_path, format=ext[1:])
processed += 1
removed = len(audio) - len(trimmed_audio)
print(f"✓ {filename}: 去除 {removed/1000:.2f} 秒")
except Exception as e:
print(f"✗ {filename}: 错误 - {str(e)}")
print(f"\n完成! 共处理 {processed} 个文件")
def _remove_silence(self, audio, silence_thresh=-50.0, chunk_size=10):
"""去除开头静音"""
trim_ms = 0
while trim_ms < len(audio):
if audio[trim_ms:trim_ms+chunk_size].dBFS > silence_thresh:
break
trim_ms += chunk_size
return audio[trim_ms:]
def _remove_fixed(self, audio, remove_seconds=1.0):
"""去除固定长度"""
remove_ms = int(remove_seconds * 1000)
return audio[remove_ms:] if len(audio) > remove_ms else audio
# 命令行版本
def main():
parser = argparse.ArgumentParser(description='批量去除音频文件开头')
parser.add_argument('input_dir', help='输入文件夹路径')
parser.add_argument('output_dir', help='输出文件夹路径')
parser.add_argument('-m', '--mode', choices=['silence', 'fixed'], default='silence',
help='处理模式: silence(自动检测静音), fixed(固定长度)')
parser.add_argument('-t', '--threshold', type=float, default=-50.0,
help='静音阈值(dBFS),仅silence模式有效')
parser.add_argument('-d', '--duration', type=float, default=1.0,
help='去除固定长度(秒),仅fixed模式有效')
args = parser.parse_args()
trimmer = AudioTrimmer()
trimmer.batch_process(
args.input_dir,
args.output_dir,
mode=args.mode,
silence_thresh=args.threshold,
remove_seconds=args.duration
)
if __name__ == "__main__":
# 如果是命令行使用
# main()
# 或者直接调用
trimmer = AudioTrimmer()
trimmer.batch_process(
"input_audio",
"output_audio",
mode='silence', # 或 'fixed'
silence_thresh=-50.0,
remove_seconds=1.0
)
安装依赖
pip install pydub ffmpeg-python
还需要安装ffmpeg:
- Windows: 下载ffmpeg并添加到系统PATH
- macOS:
brew install ffmpeg - Linux:
sudo apt-get install ffmpeg
使用说明
-
创建文件夹:
input_audio/- 放入要处理的音频文件output_audio/- 处理后的文件将保存在这里
-
选择模式:
silence模式:自动检测并去除开头的静音段fixed模式:去除开头固定长度的音频
-
调整参数:
silence_thresh:静音检测阈值,-50dBFS是默认值,数值越小对静音越敏感remove_seconds:固定模式下需要去除的秒数
脚本会自动处理所有常见音频格式,并保留原文件格式。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播