nodejs转换音频文件格式并压缩导出zip格式(vscode语音插件开发)

 更新时间:2023年05月30日 10:05:03   作者:拾荒李  
FFmpeg是一套开源的音视频处理工具,通俗地讲,可以对音视频文件进行剪切、拼接、水印、转码等处理,这篇文章主要介绍了nodejs转换音频文件格式并压缩导出zip格式(vscode语音插件开发),需要的朋友可以参考下

继我的上一篇文章:!vscode录音及语音实时转写插件开发并在工作区生成本地mp3文件 踩坑日记

音频格式转换这里我使用的是ffmpeg第三方库,官网文档

ffmpeg简介

FFmpeg是一个跨平台的自由软件,用于实时音频、视频流以及音频、视频文件的录制、转换。FFmpeg是一套开源的音视频处理工具,通俗地讲,可以对音视频文件进行剪切、拼接、水印、转码等处理。由于其强大的功能和免费开源的特性,目前在全球范围内得到广泛应用。FFmpeg支持多种音视频格式的编码、解码、转换,可以输出各种容器格式。FFmpeg既可以作为命令行工具使用,也可以通过各种语言的API调用,进行二次开发。

在音视频处理工具方面的方案可能会搜到多种,但是大多的核心都是对FFmpeg进行了包装使用,FFmpeg可以说在音视频处理方面做到了一统江湖。

这里我使用的是命令工具

下载地址:https://ffmpeg.org/download.html

mac:

wins:

例子

先上传一个语音文件,并拿到url

如果是mp3文件, 直接导入到本地

// const fs = require('fs')
// var readStream = fs.createReadStream('./test.mp3')
// var writeStream = fs.createWriteStream('./data/copied.mp3')
// readStream.pipe(writeStream)
// 如果是mp3格式 直接上传服务端并且存在本地工作区
const fileUint8Arr = await vscode.workspace.fs.readFile(url[0]);
// 保存到本地
await vscode.workspace.fs.writeFile(vscode.Uri.joinPath(vscode.Uri.file(path.dirname(this.documentUri!.fsPath)!), 'main.mp3'), fileUint8Arr);

这里我将.wav文件转为.mp3

const url = await vscode.window.showOpenDialog({
	openLabel: '导入语音文件',
	title: '选择语音文件以导入',
	canSelectFolders: false,
	canSelectFiles: true,
	canSelectMany: false,
	defaultUri: undefined,
	filters: {
		'audio': ['mp3', 'wav', 'wma', 'avi', 'amr', 'aac', 'm4a', 'flac', 'opus']
	}
})

封装一个转换方法

import { ChildProcessWithoutNullStreams, spawn } from 'child_process';
private convertToMp3(inputFile: string, outputFile: string, platform: string) {
		return new Promise((resolve, reject) => {
			let exeFilePath = '';
			if ( platform === 'Darwin') {
				exeFilePath = path.join(__dirname, 'common', 'mac', 'ffmpeg');
			} else {
				exeFilePath = path.join(__dirname, 'common', 'win', 'ffmpeg.exe');
			}
			// 调用FFmpeg命令
			var ffmpeg: ChildProcessWithoutNullStreams | null = spawn(exeFilePath, ['-i', inputFile, '-acodec', 'libmp3lame', '-qscale:a', '2', outputFile]);
			// 监听FFmpeg输出,可以在终端看到转换进度等信息
			ffmpeg.stdout.on('data', (data) => {
				console.log(`FFmpeg stdout: ${data}`);
			});
			// ffmpeg.stderr.on('data', (data) => {
			// 	console.error(`FFmpeg stderr: ${data}`);
			// });
			ffmpeg.on('close', (code) => {
				ffmpeg = null;
				resolve(true);
				console.log(`FFmpeg process exited with code $[code]`);
			});
		});
	}

调用

// 2. 转成mp3文件存本地
await this.convertToMp3(url[0].fsPath, path.join(path.dirname(this.documentUri!.fsPath), 'main.mp3'), this.platform);

文件压缩导出zip

一开始我使用的是jszip第三方包,但是最后生成zip文件的时候采用的是blob数据格式,我的node版本低 另外项目原因也不支持我升级node版本,最后我使用了adm-zip库.

github地址:https://github.com/cthackers/adm-zip
开发文档地址:https://github.com/cthackers/adm-zip/wiki/ADM-ZIP
有大神做了翻译:https://www.jb51.net/javascript/285879moh.htm

import AdmZip from 'adm-zip';
// 压缩文件的路径
const filePaths = [path.join(path.dirname(this.documentUri!.fsPath), 'main.docx'), path.join(path.dirname(this.documentUri!.fsPath), 'main.mp3')];
// 创建一个新的 zip 文件对象
const zip = new AdmZip();
// 将每个文件添加到 zip 文件中
filePaths.forEach(filePath => {
	// // 读取文件内容
	// const fileContent = fs.readFileSync(filePath);
	// // 将文件添加到 zip 文件中,使用文件名作为 zip 文件中的路径
	// zip.addFile(filePath, fileContent);
	zip.addLocalFile(filePath);
});
// 将 zip 文件写入磁盘
zip.writeZip(path.join(url[0].fsPath, 'result.zip'));

到此这篇关于nodejs转换音频文件格式并压缩导出zip格式(vscode语音插件开发)的文章就介绍到这了,更多相关nodejs音频格式转换内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • node.js中的url.format方法使用说明

    node.js中的url.format方法使用说明

    这篇文章主要介绍了node.js中的url.format方法使用说明,本文介绍了url.format的方法说明、语法、接收参数、使用实例和实现源码,需要的朋友可以参考下
    2014-12-12
  • node path的使用详解

    node path的使用详解

    这篇文章主要介绍了node path的使用详解,使用path.join()方法,可以把多个路径片段拼接为完整的路径字符串,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-11-11
  • 开发Node CLI构建微信小程序脚手架的示例

    开发Node CLI构建微信小程序脚手架的示例

    这篇文章主要介绍了开发Node CLI构建微信小程序脚手架,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • 原生node.js案例--前后台交互

    原生node.js案例--前后台交互

    本文主要介绍了原生node.js案例--前后台交互。本案例包含4部分:(1)HTML部分;(2)ajax部分;(3)JavaScript部分;(4)node服务器部分。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • nodejs+express搭建多人聊天室步骤

    nodejs+express搭建多人聊天室步骤

    本篇文章给大家详细讲解了nodejs+express搭建一个简易的多人聊天室的详细步骤,有兴趣的朋友学习下。
    2018-02-02
  • Node保存Canvas图片并删除过期图片的操作步骤

    Node保存Canvas图片并删除过期图片的操作步骤

    本文,我们将探讨,如何使用 Canvas 生成图片,并通过 Node 将其保存在我们电脑的指定的位置,并在图片文件过期之后,删除该文件内容,以免占用我们的电脑存储空间,下面小编给大家详细演示一下操作步骤,需要的朋友可以参考下
    2025-05-05
  • 详解Nodejs 通过 fs.createWriteStream 保存文件

    详解Nodejs 通过 fs.createWriteStream 保存文件

    本篇文章主要介绍了Nodejs 通过 fs.createWriteStream 保存文件,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • 在Mac OS上安装使用Node.js的项目自动化构建工具Gulp

    在Mac OS上安装使用Node.js的项目自动化构建工具Gulp

    Gulp是一个在使用上比Grunt更加简洁的自动化工具(文中附有对比),和Node的npm包管理器配合使用非常方便,下面就记录一下在Mac OS上安装使用Node.js的项目自动化构建工具Gulp的方法:
    2016-06-06
  • Node.js的包详细介绍

    Node.js的包详细介绍

    这篇文章主要介绍了Node.js的包详细介绍,Node.js的包是一个目录,其中包含JSON格式的包说明文件package.json,Node.js的包基本遵循CommonJS规范,需要的朋友可以参考下
    2015-01-01
  • NodeJs Express中间件使用流程解析

    NodeJs Express中间件使用流程解析

    Express中间件本质上就是一个function处理函数,多个中间件之间,共享同一份req和res,我们就可以在上游的中间件中统一为req或者res对象添加自定义的属性或方法,供下游的中间件或路由进行使用,非常方便
    2023-01-01

最新评论