refactor(video-pipeline): 用 music-metadata 替换 ffprobe 测量音频时长

ffprobe 在 Mac 上有路径/权限兼容性问题,改用纯 JS 的 music-metadata
实现跨平台音频时长测量,零外部依赖。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-05-02 14:58:37 +08:00
parent 6097a809bf
commit 3e79e46041
3 changed files with 221 additions and 12 deletions

View File

@@ -8,7 +8,7 @@
const axios = require('axios')
const path = require('path')
const fs = require('fs')
const { execFile } = require('child_process')
const mm = require('music-metadata')
const US = 1_000_000
@@ -78,17 +78,14 @@ function getResolution(format) {
return map[format] || map['9:16']
}
function getAudioDurationSec(filePath) {
return new Promise((resolve) => {
execFile('ffprobe', [
'-v', 'quiet', '-show_entries', 'format=duration',
'-of', 'csv=p=0', filePath
], (err, stdout) => {
if (err) { resolve(null); return }
const dur = parseFloat(stdout.trim())
resolve(dur > 0 ? dur : null)
})
})
async function getAudioDurationSec(filePath) {
try {
const metadata = await mm.parseFile(filePath)
const dur = metadata.format.duration
return dur > 0 ? dur : null
} catch (_) {
return null
}
}
module.exports = { US, getConfig, BASE_URL, api, parseArgs, getResolution, getAudioDurationSec }