欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

nodejs轉換音頻文件格式并壓縮導出zip格式(vscode語音插件開發(fā))

 更新時間:2023年05月30日 10:05:03   作者:拾荒李  
FFmpeg是一套開源的音視頻處理工具,通俗地講,可以對音視頻文件進行剪切、拼接、水印、轉碼等處理,這篇文章主要介紹了nodejs轉換音頻文件格式并壓縮導出zip格式(vscode語音插件開發(fā)),需要的朋友可以參考下

繼我的上一篇文章:!vscode錄音及語音實時轉寫插件開發(fā)并在工作區(qū)生成本地mp3文件 踩坑日記

音頻格式轉換這里我使用的是ffmpeg第三方庫,官網(wǎng)文檔。

ffmpeg簡介

FFmpeg是一個跨平臺的自由軟件,用于實時音頻、視頻流以及音頻、視頻文件的錄制、轉換。FFmpeg是一套開源的音視頻處理工具,通俗地講,可以對音視頻文件進行剪切、拼接、水印、轉碼等處理。由于其強大的功能和免費開源的特性,目前在全球范圍內(nèi)得到廣泛應用。FFmpeg支持多種音視頻格式的編碼、解碼、轉換,可以輸出各種容器格式。FFmpeg既可以作為命令行工具使用,也可以通過各種語言的API調(diào)用,進行二次開發(fā)。

在音視頻處理工具方面的方案可能會搜到多種,但是大多的核心都是對FFmpeg進行了包裝使用,FFmpeg可以說在音視頻處理方面做到了一統(tǒng)江湖。

這里我使用的是命令工具

下載地址: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格式 直接上傳服務端并且存在本地工作區(qū)
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');
			}
			// 調(diào)用FFmpeg命令
			var ffmpeg: ChildProcessWithoutNullStreams | null = spawn(exeFilePath, ['-i', inputFile, '-acodec', 'libmp3lame', '-qscale:a', '2', outputFile]);
			// 監(jiān)聽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]`);
			});
		});
	}

調(diào)用

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

文件壓縮導出zip

一開始我使用的是jszip第三方包,但是最后生成zip文件的時候采用的是blob數(shù)據(jù)格式,我的node版本低 另外項目原因也不支持我升級node版本,最后我使用了adm-zip庫.

github地址:https://github.com/cthackers/adm-zip
開發(fā)文檔地址:https://github.com/cthackers/adm-zip/wiki/ADM-ZIP
有大神做了翻譯:http://www.dbjr.com.cn/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')];
// 創(chuàng)建一個新的 zip 文件對象
const zip = new AdmZip();
// 將每個文件添加到 zip 文件中
filePaths.forEach(filePath => {
	// // 讀取文件內(nèi)容
	// 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語音插件開發(fā))的文章就介紹到這了,更多相關nodejs音頻格式轉換內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 在Node.js中判斷路徑是否絕對的解決方法

    在Node.js中判斷路徑是否絕對的解決方法

    在不同的操作系統(tǒng)中,路徑的表示方式有很大的差異,當編寫跨平臺的 Node.js 應用時,正確判斷路徑的絕對性變得至關重要,本文提供了path-is-absolute模塊的詳細使用指南,它是一個兼容 Node.js 早期版本且適用于所有操作系統(tǒng)的解決方案,需要的朋友可以參考下
    2024-04-04
  • Node.js全局對象Global的實現(xiàn)

    Node.js全局對象Global的實現(xiàn)

    在Nodejs下全局變量和全局函數(shù)都是可以使用global來訪問到的,本文主要介紹了Node.js全局對象Global的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • Node.js中的HTTP模塊與URL模塊

    Node.js中的HTTP模塊與URL模塊

    這篇文章介紹了Node.js中的HTTP模塊與URL模塊,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • Node.js 獲取微信JS-SDK CONFIG的方法示例

    Node.js 獲取微信JS-SDK CONFIG的方法示例

    這篇文章主要介紹了Node.js 獲取微信JS-SDK CONFIG的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-05-05
  • node.js中的events.emitter.listeners方法使用說明

    node.js中的events.emitter.listeners方法使用說明

    這篇文章主要介紹了node.js中的events.emitter.listeners方法使用說明,本文介紹了events.emitter.listeners 的方法說明、語法、接收參數(shù)、使用實例和實現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • node_modules文件夾刪除失敗的有效解決辦法

    node_modules文件夾刪除失敗的有效解決辦法

    在前端開發(fā)過程中,node_modules文件夾是一個必不可少的組成部分,里面存放著項目所需的各種依賴包,在實際操作中,很多開發(fā)者可能會遇到刪除 node_modules 文件夾失敗的問題,本文將詳細介紹一種簡單有效的解決辦法,幫助你順利刪除node_modules文件夾,需要的朋友可以參考下
    2024-12-12
  • NodeJS使用文件流解決大文件處理的內(nèi)存與時間效率問題

    NodeJS使用文件流解決大文件處理的內(nèi)存與時間效率問題

    在 NodeJS 中,文件操作是常見的任務之一,然而,當處理大文件時,直接將整個文件加載到內(nèi)存中可能會導致內(nèi)存溢出或性能瓶頸,為了解決這一問題,NodeJS 提供了文件流(Stream)機制,本文將詳細介紹文件流的優(yōu)點、使用方法、應用場景,并探討背壓(Backpressure)的概念
    2025-01-01
  • 基于socket.io和node.js搭建即時通信系統(tǒng)

    基于socket.io和node.js搭建即時通信系統(tǒng)

    socket.IO是一個websocket庫,包括了客戶端的js和服務器端的nodejs。官方地址:http://socket.io
    2014-07-07
  • Node.js?與并發(fā)模型的詳細介紹

    Node.js?與并發(fā)模型的詳細介紹

    這篇文章主要介紹了Node.js?與并發(fā)模型的詳細介紹,Node.js?現(xiàn)在已成為構建高并發(fā)網(wǎng)絡應用服務工具箱中的一員,文章圍繞主題展開詳細的內(nèi)容介紹,需要的朋友可以參考一下
    2022-07-07
  • Node服務端實戰(zhàn)之操作數(shù)據(jù)庫示例詳解

    Node服務端實戰(zhàn)之操作數(shù)據(jù)庫示例詳解

    這篇文章主要為大家介紹了Node服務端實戰(zhàn)之操作數(shù)據(jù)庫示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12

最新評論