录音档案整理的核心问题在于:文件命名混乱、格式不统一、元数据缺失、检索困难。解决思路是通过自动化工具批量处理,建立标准化命名规则,提取关键元数据,构建可检索的档案库。
安装FFmpeg:
Windows:下载 https://www.gyan.dev/ffmpeg/builds/ffmpeg-release-full.7z,解压后将bin目录添加到系统PATH
macOS:brew install ffmpeg
Linux:sudo apt install ffmpeg(Ubuntu/Debian)
安装ExifTool:
所有平台下载 https://exiftool.org/ 的对应版本,Windows解压后重命名为exiftool.exe
将所有录音转换为标准WAV格式(无损,便于后续处理):
ffmpeg -i "输入文件.mp3" -acodec pcm_s16le -ar 44100 -ac 2 "输出文件.wav"
批量处理脚本(Windows批处理):
@echo off
for %%a in (.mp3) do (
ffmpeg -i "%%a" -acodec pcm_s16le -ar 44100 -ac 2 "%%~na.wav"
)
采用“日期_项目_发言人_序号”格式:
示例:20240315_项目会议_张三_01.wav
PowerRename规则设置:
.wav20240315_项目会议_张三_??使用ExifTool批量写入元数据:
exiftool -Title="项目会议录音" -Artist="张三" -DateTimeOriginal="2024:03:15 14:30:00" -Keywords="项目会议,需求讨论" .wav
创建元数据配置文件metadata.txt:
-title=项目会议录音
-artist=张三
-datetimeoriginal=2024:03:15 14:30:00
-keywords=项目会议
-keywords=需求讨论
-comment=本次会议主要讨论项目第一阶段需求

批量应用:exiftool -config metadata.txt 20240315_项目会议_张三_01.wav
创建标准目录:
录音档案/
├── 原始文件/
├── 处理完成/
│ ├── 2024年/
│ │ ├── 03月/
│ │ │ ├── 项目A/
│ │ │ └── 项目B/
│ │ └── 04月/
│ └── 2023年/
└── 元数据索引/
使用tree命令生成目录树文档:
tree 录音档案 /F > 目录结构.txt
import os
import subprocess
from datetime import datetime
def process_audio_files(input_dir, output_dir, project_name, speaker):
创建输出目录
os.makedirs(output_dir, exist_ok=True)
获取当前日期
current_date = datetime.now().strftime("%Y%m%d")
遍历所有音频文件
for index, filename in enumerate(os.listdir(input_dir)):
if filename.lower().endswith(('.mp3', '.wav', '.m4a')):
input_path = os.path.join(input_dir, filename)
生成新文件名
new_name = f"{current_date}_{project_name}_{speaker}_{index+1:02d}.wav"
output_path = os.path.join(output_dir, new_name)
转换格式
subprocess.run([
'ffmpeg', '-i', input_path,
'-acodec', 'pcm_s16le',
'-ar', '44100',
'-ac', '2',
'-y', output_path
])
添加元数据
subprocess.run([
'exiftool',
f'-Title={project_name}录音',
f'-Artist={speaker}',
f'-DateTimeOriginal={datetime.now().strftime("%Y:%m:%d %H:%M:%S")}',
f'-Keywords={project_name}',
'-overwrite_original',
output_path
])
print(f"已处理:{new_name}")
使用示例
process_audio_files(
input_dir="原始录音",
output_dir="处理完成/2024年/03月/项目会议",
project_name="项目会议",
speaker="张三"
)
创建config.yaml配置文件:
projects:
- name: "项目会议"
speaker: "张三"
keywords: ["会议", "讨论"]
output_dir: "处理完成/2024年/03月/项目会议"
- name: "客户访谈"
speaker: "李四"
keywords: ["客户", "需求"]
output_dir: "处理完成/2024年/03月/客户访谈"
defaults:
sample_rate: 44100
channels: 2
format: "wav"
import os
import subprocess
import argparse
def search_recordings(directory, keyword):
results = []
for root, dirs, files in os.walk(directory):
for file in files:
if file.endswith('.wav'):
filepath = os.path.join(root, file)
检查文件名
if keyword.lower() in file.lower():
results.append(filepath)
continue
检查元数据
try:
metadata = subprocess.run(
['exiftool', '-s', '-Title', '-Artist', '-Keywords', filepath],
capture_output=True,
text=True
)
if keyword.lower() in metadata.stdout.lower():
results.append(filepath)
except:
pass
return results
使用示例
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("--dir", required=True, help="搜索目录")
parser.add_argument("--keyword", required=True, help="关键词")
args = parser.parse_args()
found = search_recordings(args.dir, args.keyword)
for file in found:
print(file)
robocopy 录音档案 D:\备份\录音档案 /MIR1. FFmpeg命令执行失败:检查PATH环境变量是否正确设置
2. 元数据写入失败:确保文件没有只读属性,使用-overwrite_original参数
3. 批量重命名错乱:先在小样本上测试正则表达式
4. 存储空间不足:处理前检查目标磁盘剩余空间,df -h(Linux/macOS)或wmic logicaldisk get size,freespace,caption(Windows)
检查单个文件的完整信息:exiftool -a -G1 -s 文件名.wav
验证音频质量:ffmpeg -i 文件名.wav -f null -(无输出表示正常)
使用Whisper进行语音识别(需要Python环境):
pip install openai-whisper
whisper "录音文件.wav" --language zh --output_dir "文字记录"
将文字记录与录音文件关联存储,创建统一的索引文件index.csv:
文件名,日期,项目,发言人,文字记录路径,关键词
20240315_项目会议_张三_01.wav,2024-03-15,项目会议,张三,文字记录/20240315_项目会议.txt,需求,设计