日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

微信小程序+.NET(十八) ffmpeg音频转码/拼接/混合

發(fā)布時間:2023/12/10 asp.net 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 微信小程序+.NET(十八) ffmpeg音频转码/拼接/混合 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

??繼續(xù)完善小程序,昨天對crawler接口進行了修改,解決了網(wǎng)頁壓縮導致的html亂碼問題和JSON對象序列化問題,現(xiàn)在對tts接口進行修改,使其處理科大訊飛在線tts接口的1000字節(jié)問題。
??1000字節(jié),也就是500中文,為了避免有些網(wǎng)頁的亂碼等情況,經(jīng)嘗試取text切分長度=345(?340-350之間),然后是調用第一版的tts方法,這里我用的是多線程處理的,最后將生成的多段語音拼接(注意這里不是合并,合并/混合是將兩段音頻并到一條時間軸上,這里的拼接是將兩段時間軸連接)
??先來說一說ffmpeg,我之前使用ffmpeg轉碼微信小程序錄音.mp3為科大訊飛iat接口要求的.wav格式 :

ffmpeg -y -i D:\IISLocalServer\audios\a.mp3 -acodec pcm_s16le -f s16le -ac 1 -ar 16000 D:\IISLocalServer\audios\a.wav

??這次用的他的音視頻拼接功能:
??網(wǎng)上找到的幾個方法我都嘗試過,最后選擇的是下圖第三種,先將文件名寫入.txt然后進行拼接,最后將中間的.wav和.txt刪除,保留最后結果,并返回相對路徑:

//混合音頻 ffmpeg -i 1.wav -i 2.wav -filter_complex amix=inputs=2:duration=first:dropout_transition=2 -f wav c.wav //拼接音頻 ffmpeg.exe -i "concat:123.mp3|124.mp3" -acodec copy output.mp3 ffmpeg -f concat -i list.txt -c copy res.wav

??上圖第一種為合并,最后效果是混合的,類似多重唱,感覺可以用來做音樂伴奏之類的。第二種為直接寫文件名,測試時沒得到我想要的結果,建議采用第三種寫入文件的方式,不過這樣會對多個文件進行創(chuàng)建寫入甚至還有刪除操作,會很慢,即使最大化了gap=345依然很慢,后期我會慢慢嘗試改進,包括這里的多線程處理的優(yōu)化也是,對多線程一直接觸很少,Java期間也基本沒用過。
??這里要注意一下,第三條若是在.NET中無法合并,建議用命令行嘗試命令,若是報錯類似于“文件名不合法”,嘗試加入-safe -0

ffmpeg -f concat -safe -0 -i list.txt -c copy res.wav

??附上最新版本代碼:

/// <summary> /// 拼接音頻 /// </summary> /// <param name="list">需要合并的音頻絕對路徑列表</param> /// <param name="fileCatlog">最后的拼接音頻放入的目錄,也是拼接的工作區(qū)</param> /// <returns></returns> #region 合并音頻 public string mergeAudios(ArrayList list,string fileCatlog) {string mergeListName = CreateFileName(".txt");string mergeList = System.IO.Path.Combine(fileCatlog, mergeListName);FileStream fs = new FileStream(mergeList, FileMode.Create);StreamWriter sw = new StreamWriter(fs);foreach (string s in list){sw.Write("file '"+s+ "'\r\n");}sw.Flush();//清空緩沖區(qū)sw.Close();fs.Close();string mergeFileName = CreateFileName(".wav");string mergeFile = System.IO.Path.Combine(fileCatlog, mergeFileName);string strCmd = "-f concat -safe -0 -i " + mergeList + " -c copy " + mergeFile;//調用ffmpeg.exeSystem.Diagnostics.Process p = new System.Diagnostics.Process();p.StartInfo.FileName = "D:\\ffmpeg\\bin\\ffmpeg.exe"; p.StartInfo.Arguments = " " + strCmd;p.StartInfo.UseShellExecute = true;p.StartInfo.RedirectStandardInput = false;//可能接受來自調用程序的輸入信息 p.StartInfo.RedirectStandardOutput = false;//由調用程序獲取輸出信息 p.StartInfo.RedirectStandardError = false;//重定向標準錯誤輸出p.StartInfo.CreateNoWindow = false;//不顯示程序窗口//啟動程序p.Start();//等待程序執(zhí)行完退出進程p.WaitForExit();//刪除中間.txt文件,中間.wav文件deleteFile(mergeList,1);foreach(string file in list){deleteFile(file, 1);}if (System.IO.File.Exists(mergeFile)){//return returnURL;return mergeFile;}return ""; } #endregion

總結

以上是生活随笔為你收集整理的微信小程序+.NET(十八) ffmpeg音频转码/拼接/混合的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。