nodo合并多个mp3文件

nodo合并多个mp3文件

  • 会使用到node中的fs - 文件系统
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!');
});
posted @ 2018-11-17 23:46  hid3onbush  阅读(446)  评论(0编辑  收藏  举报