59 lines
2.1 KiB
Python
59 lines
2.1 KiB
Python
import os
|
||
import librosa # 用于获取音频时长
|
||
from pathlib import Path
|
||
|
||
|
||
def get_audio_duration(file_path):
|
||
"""获取音频文件的时长(秒)"""
|
||
try:
|
||
# 加载音频文件并获取时长(不加载音频数据,仅获取元信息)
|
||
duration = librosa.get_duration(path=file_path)
|
||
return duration
|
||
except Exception as e:
|
||
print(f"无法处理文件 {file_path}:{str(e)}")
|
||
return None
|
||
|
||
|
||
def filter_short_audios(folder_path, max_seconds=3):
|
||
"""筛选出目录中时长小于指定秒数的音频文件"""
|
||
# 支持的音频格式(可根据需要扩展)
|
||
audio_extensions = ('.wav', '.mp3', '.flac', '.ogg', '.m4a')
|
||
|
||
# 存储符合条件的文件路径
|
||
short_audios = []
|
||
|
||
# 遍历目录中的所有文件
|
||
for root, dirs, files in os.walk(folder_path):
|
||
for file in files:
|
||
# 检查文件扩展名是否为音频格式
|
||
if file.lower().endswith(audio_extensions):
|
||
file_path = os.path.join(root, file)
|
||
duration = get_audio_duration(file_path)
|
||
|
||
if duration is not None and duration < max_seconds:
|
||
short_audios.append({
|
||
'path': file_path,
|
||
'duration': round(duration, 2) # 保留两位小数
|
||
})
|
||
|
||
return short_audios
|
||
|
||
|
||
if __name__ == "__main__":
|
||
# 替换为你的音频文件目录
|
||
audio_folder = "/Users/linhong/Desktop/a_PythonProjects/cat_translator_v2/cat_intents/emotions/等待喂食"
|
||
|
||
# 检查目录是否存在
|
||
if not os.path.isdir(audio_folder):
|
||
print(f"错误:目录 {audio_folder} 不存在")
|
||
else:
|
||
# 筛选出低于3秒的音频
|
||
short_files = filter_short_audios(audio_folder, max_seconds=3)
|
||
|
||
if short_files:
|
||
print(f"共找到 {len(short_files)} 个低于3秒的音频文件:")
|
||
for item in short_files:
|
||
print(f"• {item['path']} (时长:{item['duration']}秒)")
|
||
else:
|
||
print("未找到低于3秒的音频文件")
|