如何用Node.js从MP4/MKV视频URL提取所有音轨
从MP4/MKV视频URL提取所有音轨的Node.js实现
核心思路
要批量提取视频中所有音轨,需先通过ffprobe探测视频的音频流数量,再为每个音轨单独设置FFmpeg输出任务,利用-map参数指定提取对应索引的音轨。
修改后的完整代码
const ffmpeg = require('fluent-ffmpeg'); app.post('/convert', (req, res) => { const { inputPath, outputPath } = req.body; if (!inputPath || !outputPath) { return res.status(400).json({ error: '请求无效,inputPath和outputPath均为必填项。' }); } // 探测视频媒体元数据,获取音轨信息 ffmpeg.ffprobe(inputPath, (err, metadata) => { if (err) { console.error('媒体信息探测失败:', err); return res.status(500).json({ error: '无法获取视频音轨信息' }); } // 筛选所有音频流 const audioStreams = metadata.streams.filter(stream => stream.codec_type === 'audio'); if (audioStreams.length === 0) { return res.status(400).json({ error: '视频中未检测到音轨' }); } // 初始化FFmpeg命令实例 const command = ffmpeg(inputPath); // 为每个音轨添加输出任务 audioStreams.forEach((_, index) => { // 生成带音轨编号的输出路径(如output_1.mp3、output_2.mp3) const fileExt = outputPath.split('.').pop(); const trackOutput = outputPath.replace(`.${fileExt}`, `_${index + 1}.${fileExt}`); command .output(trackOutput) .noVideo() .format('mp3') .outputOptions('-ab', '192k') .outputOptions(`-map 0:a:${index}`); // 指定提取第index个音轨 }); // 监听任务完成与错误 command .on('end', () => { const outputFiles = audioStreams.map((_, i) => { const ext = outputPath.split('.').pop(); return outputPath.replace(`.${ext}`, `_${i + 1}.${ext}`); }); console.log('所有音轨提取完成'); res.json({ message: '所有音轨提取完成', outputFiles }); }) .on('error', (err) => { console.error('音轨提取失败:', err); res.status(500).json({ error: '音轨提取失败' }); }) .run(); }); });
关键说明
- 音轨探测:通过
ffmpeg.ffprobe读取视频元数据,筛选出codec_type为audio的流,确定音轨总数。 - 多输出配置:遍历每个音轨,为每个音轨单独设置输出路径,并通过
-map 0:a:${index}精准指定要提取的音轨(0:a:0代表第1条音轨,0:a:1代表第2条,以此类推)。 - 输出路径处理:在原输出路径基础上添加音轨编号,避免文件覆盖。
- 转码与复制可选:
- 如果需要转码为MP3(延续原代码逻辑),保持
.format('mp3')和-ab 192k参数。 - 如果需要无损复制原音轨,删除
.format('mp3')和-ab 192k,添加-c:a copy参数,代码片段如下:command .output(trackOutput) .noVideo() .outputOptions('-c:a copy') // 直接复制原音频流,无转码 .outputOptions(`-map 0:a:${index}`);
- 如果需要转码为MP3(延续原代码逻辑),保持
内容的提问来源于stack exchange,提问作者md server
相关产品推荐
相关产品推荐

