最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

ffmpeg簡(jiǎn)介

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

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

這里我使用的是命令工具

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

mac:

wins:

例子

先上傳一個(gè)語音文件,并拿到url

如果是mp3文件, 直接導(dǎo)入到本地

// const fs = require('fs')
// var readStream = fs.createReadStream('./test.mp3')
// var writeStream = fs.createWriteStream('./data/copied.mp3')
// readStream.pipe(writeStream)
// 如果是mp3格式 直接上傳服務(wù)端并且存在本地工作區(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文件轉(zhuǎn)為.mp3

const url = await vscode.window.showOpenDialog({
	openLabel: '導(dǎo)入語音文件',
	title: '選擇語音文件以導(dǎo)入',
	canSelectFolders: false,
	canSelectFiles: true,
	canSelectMany: false,
	defaultUri: undefined,
	filters: {
		'audio': ['mp3', 'wav', 'wma', 'avi', 'amr', 'aac', 'm4a', 'flac', 'opus']
	}
})

封裝一個(gè)轉(zhuǎn)換方法

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輸出,可以在終端看到轉(zhuǎn)換進(jìn)度等信息
			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. 轉(zhuǎn)成mp3文件存本地
await this.convertToMp3(url[0].fsPath, path.join(path.dirname(this.documentUri!.fsPath), 'main.mp3'), this.platform);

文件壓縮導(dǎo)出zip

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

github地址:https://github.com/cthackers/adm-zip
開發(fā)文檔地址:https://github.com/cthackers/adm-zip/wiki/ADM-ZIP
有大神做了翻譯:http://m.fzitv.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')];
// 創(chuàng)建一個(gè)新的 zip 文件對(duì)象
const zip = new AdmZip();
// 將每個(gè)文件添加到 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'));

到此這篇關(guān)于nodejs轉(zhuǎn)換音頻文件格式并壓縮導(dǎo)出zip格式(vscode語音插件開發(fā))的文章就介紹到這了,更多相關(guān)nodejs音頻格式轉(zhuǎn)換內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

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

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

    這篇文章主要介紹了node.js中的url.format方法使用說明,本文介紹了url.format的方法說明、語法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • node?path的使用詳解

    node?path的使用詳解

    這篇文章主要介紹了node?path的使用詳解,使用path.join()方法,可以把多個(gè)路徑片段拼接為完整的路徑字符串,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • 開發(fā)Node CLI構(gòu)建微信小程序腳手架的示例

    開發(fā)Node CLI構(gòu)建微信小程序腳手架的示例

    這篇文章主要介紹了開發(fā)Node CLI構(gòu)建微信小程序腳手架,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • 原生node.js案例--前后臺(tái)交互

    原生node.js案例--前后臺(tái)交互

    本文主要介紹了原生node.js案例--前后臺(tái)交互。本案例包含4部分:(1)HTML部分;(2)ajax部分;(3)JavaScript部分;(4)node服務(wù)器部分。具有很好的參考價(jià)值,下面跟著小編一起來看下吧
    2017-02-02
  • nodejs+express搭建多人聊天室步驟

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

    本篇文章給大家詳細(xì)講解了nodejs+express搭建一個(gè)簡(jiǎn)易的多人聊天室的詳細(xì)步驟,有興趣的朋友學(xué)習(xí)下。
    2018-02-02
  • Node保存Canvas圖片并刪除過期圖片的操作步驟

    Node保存Canvas圖片并刪除過期圖片的操作步驟

    本文,我們將探討,如何使用 Canvas 生成圖片,并通過 Node 將其保存在我們電腦的指定的位置,并在圖片文件過期之后,刪除該文件內(nèi)容,以免占用我們的電腦存儲(chǔ)空間,下面小編給大家詳細(xì)演示一下操作步驟,需要的朋友可以參考下
    2025-05-05
  • 詳解Nodejs 通過 fs.createWriteStream 保存文件

    詳解Nodejs 通過 fs.createWriteStream 保存文件

    本篇文章主要介紹了Nodejs 通過 fs.createWriteStream 保存文件,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10
  • 在Mac OS上安裝使用Node.js的項(xiàng)目自動(dòng)化構(gòu)建工具Gulp

    在Mac OS上安裝使用Node.js的項(xiàng)目自動(dòng)化構(gòu)建工具Gulp

    Gulp是一個(gè)在使用上比Grunt更加簡(jiǎn)潔的自動(dòng)化工具(文中附有對(duì)比),和Node的npm包管理器配合使用非常方便,下面就記錄一下在Mac OS上安裝使用Node.js的項(xiàng)目自動(dòng)化構(gòu)建工具Gulp的方法:
    2016-06-06
  • Node.js的包詳細(xì)介紹

    Node.js的包詳細(xì)介紹

    這篇文章主要介紹了Node.js的包詳細(xì)介紹,Node.js的包是一個(gè)目錄,其中包含JSON格式的包說明文件package.json,Node.js的包基本遵循CommonJS規(guī)范,需要的朋友可以參考下
    2015-01-01
  • NodeJs Express中間件使用流程解析

    NodeJs Express中間件使用流程解析

    Express中間件本質(zhì)上就是一個(gè)function處理函數(shù),多個(gè)中間件之間,共享同一份req和res,我們就可以在上游的中間件中統(tǒng)一為req或者res對(duì)象添加自定義的屬性或方法,供下游的中間件或路由進(jìn)行使用,非常方便
    2023-01-01

最新評(píng)論

柯坪县| 沈丘县| 乐至县| 东莞市| 衡阳市| 蓝山县| 榆中县| 九龙城区| 安化县| 嘉黎县| 沙河市| 涡阳县| 常宁市| 大冶市| 吉首市| 龙川县| 广州市| 三门县| 景谷| 昌都县| 班戈县| 桐城市| 航空| 福泉市| 察隅县| 和顺县| 神农架林区| 汉源县| 县级市| 上杭县| 松潘县| 兴城市| 昌乐县| 华蓥市| 平顺县| 五原县| 莱西市| 桐柏县| 固始县| 蚌埠市| 涞水县|