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:
@@ -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 }
|
||||
|
||||
Reference in New Issue
Block a user