Node.js用fluent-ffmpeg提取静音时间戳并导出CSV/JSON
获取音频静音片段并导出结果的Node.js实现
核心思路
ffmpeg的silencedetect滤镜会将检测结果输出到标准错误流(stderr),所以需要通过监听fluent-ffmpeg的stderr事件捕获这些日志,解析出静音的开始/结束时间,最后过滤出5-7秒的片段并导出为JSON/CSV。
完整代码实现
const ffmpeg = require('fluent-ffmpeg'); const fs = require('fs'); const audioPath = './your-audio-file.mp3'; // 替换为你的音频文件路径 // 存储符合要求的静音片段 const validSilenceSegments = []; ffmpeg(audioPath) .audioFilters('silencedetect=n=-50dB:d=5') // 仅做分析,不生成输出文件(Windows系统将/dev/null替换为NUL) .output('/dev/null') // 监听ffmpeg的标准错误流,捕获silencedetect日志 .on('stderr', (line) => { // 匹配静音开始时间 const startMatch = line.match(/silence_start: (\d+\.?\d*)/); // 匹配静音结束时间和持续时长 const endMatch = line.match(/silence_end: (\d+\.?\d*) \| silence_duration: (\d+\.?\d*)/); if (startMatch) { validSilenceSegments.push({ start: parseFloat(startMatch[1]) }); } else if (endMatch) { const latestSegment = validSilenceSegments[validSilenceSegments.length - 1]; if (latestSegment) { latestSegment.end = parseFloat(endMatch[1]); latestSegment.duration = parseFloat(endMatch[2]); // 过滤掉时长不在5-7秒范围内的片段 if (latestSegment.duration < 5 || latestSegment.duration > 7) { validSilenceSegments.pop(); } } } }) // 分析完成后的处理逻辑 .on('end', () => { console.log('符合要求的静音片段:', validSilenceSegments); // 导出为JSON文件 fs.writeFileSync('silence-segments.json', JSON.stringify(validSilenceSegments, null, 2)); console.log('已导出JSON文件:silence-segments.json'); // 导出为CSV文件 const csvContent = [ 'start,end,duration', ...validSilenceSegments.map(seg => `${seg.start},${seg.end},${seg.duration}`) ].join('\n'); fs.writeFileSync('silence-segments.csv', csvContent); console.log('已导出CSV文件:silence-segments.csv'); }) // 错误处理 .on('error', (err) => { console.error('分析失败:', err.message); }) .run();
关键细节说明
- 噪声阈值调整:
n=-50dB是静音判断的音量阈值,如果音频存在较多零星噪声,可提高阈值(比如n=-40dB)减少误判;若噪声极小,可降低阈值(比如n=-60dB)提升检测精度。 - 无输出文件配置:添加
.output('/dev/null')是为了让ffmpeg有合法输出目标,避免报错且不生成无用文件,Windows用户需替换为NUL。 - ffmpeg路径配置:如果系统找不到ffmpeg,需在代码开头添加以下语句指定路径:
ffmpeg.setFfmpegPath('/path/to/ffmpeg.exe'); // 替换为你的ffmpeg可执行文件路径
内容的提问来源于stack exchange,提问作者Eugene
相关产品推荐
相关产品推荐

