nodo合并多个mp3文件
import fs from 'fs';
//读取目录下的文件,返回文件名数组[0x2.mp3,f0k.mp3];
const files = fs.readdirSync('./files');
//遍历文档数组重命名
files.forEach((item,index)=>{
fs.rename(`./files/${item}`, `./files/MEC Loading_${index}.mp4`,(err)=>{
if (err) throw err;
console.log(`文件${item}--renamed!`);
});
});
// 通过流的形式合并文件
let currentfile;
let stream;
//在当前目录创建一个流文件.将其他文件流写入其中
let dhh = fs.createWriteStream('./done.mp4');
function main() {
if (!files.length) {
dhh.end("Done");
return;
}
// 删除文件数组中的第一个元素,并返回第一个元素
currentfile = './files/' + files.shift();
// 获取第一个文件的流
stream = fs.createReadStream(currentfile);
// 写入创建好的流文件中
stream.pipe(dhh, {end: false});
// 当前文件写入完成回调
stream.on("end", function() {
console.log(currentfile + ' appended');
main();
});
}
// 递归合并所有流
main();
参考文档
nodo合并多个视频文件
import fs from 'fs';
import path from 'path';
import ffmpeg from 'fluent-ffmpeg';
//使用ffmpeg工具
ffmpeg.setFfmpegPath(path.join(__dirname, '/ffmpeg/bin/ffmpeg.exe'));
ffmpeg.setFfprobePath(path.join(__dirname, '/ffmpeg/bin/ffprobe.exe'));
ffmpeg()
.input('./files/MEC Loading_0.mp4') //需要合并的视频part1
.input('./files/MEC Loading_1.mp4') //需要合并的视频part2
.on('end', function() {
console.log('Merging finished !');
})
.mergeToFile('./Merging.mp4'); //输出目录
};
/*
使用fluent-ffmpeg合并视频文件
*/
let videoNames = [];
// 注意文件排序
files.forEach(item => {
videoNames.push(`./files/${item}`);
});
var fluent_ffmpeg = require("fluent-ffmpeg");
var mergedVideo = fluent_ffmpeg();
videoNames.forEach(function(videoName){
mergedVideo = mergedVideo.addInput(videoName);
});
mergedVideo.mergeToFile('./mergedVideo.ts', './tmp/')
.on('error', function(err) {
console.log('Error ' + err.message);
})
.on('end', function() {
console.log('Finished!');
});