Amr音頻轉換Mp3格式
阿新 • • 發佈:2019-01-31
name day ngs today orm item ace append bak 最近研發部門有一個需求andriod手機端的音頻格式amr或wav格式的音頻文件需要統一在線轉換,為了保證快速並行完成我使用的goroutine和chan,我已經封裝好了docker鏡像,大家有興趣的可以下載直接使用:
docker pull docker.io/liyinda/alpine_amrtomp3
github地址如下:
https://github.com/liyinda/AmrToMp3
部分邏輯代碼如下:
//將filelist的文件列表傳入ch管道 ch :=make(chan string) //創建goroutine獲取文件列表並將列表傳遞給管道另一端進行音頻轉換 go func(mine []os.FileInfo) { for _, item := range mine { ch <- item.Name() } }(filelist) go func() { for i :=0; i<= cpuNum; i++ { file := <-ch //獲取文件的內容 wfilepath := WORKDIR + file bfilepath := BAKDIR + today + "/" + file pfilepath := PRODUCTDIR + today + "/" + file var rs bool var fileExt string //獲取文件名後綴 fileExt = path.Ext(file) newfilepath := "" audiofilepath := "" //操作日誌記錄 logFile, logErr := os.OpenFile(*logFileName, os.O_CREATE|os.O_RDWR|os.O_APPEND, 0666) if logErr != nil { fmt.Println("Fail to find", *logFile, "AmrToMp3 start Failed") os.Exit(1) } defer logFile.Close() log.SetOutput(logFile) log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile) switch { case fileExt == ".amr" : //進行amr到mp3的轉換 newfilepath = strings.Replace(wfilepath, ".amr", ".mp3", -1) comeAndTo := [...]string{wfilepath, newfilepath} rs = models.Arm2mp3(comeAndTo) log.Printf("%v Amr format conversion success \n", newfilepath) case fileExt == ".wav" : //進行wav到mp3的轉換 newfilepath = strings.Replace(wfilepath, ".wav", ".mp3", -1) comeAndTo := [...]string{wfilepath, newfilepath} rs = models.Arm2mp3(comeAndTo) log.Printf("%v Wav format conversion success \n", newfilepath) default: //os.Remove(wfilepath) os.Rename(wfilepath, bfilepath) log.Printf("%v conversion fail and backup \n", bfilepath) } if rs { //轉換成功之後,將原始文件移動到備份目錄 os.Rename(wfilepath, bfilepath) //生產mp3文件路徑 audiofilepath = strings.Replace(pfilepath, ".amr", ".mp3", -1) //轉換成功之後,將生成文件移動到生產目錄 os.Rename(newfilepath, audiofilepath) } } }()
Amr音頻轉換Mp3格式