Golang與FFmpeg: 如何實(shí)現(xiàn)音頻混音和分離

小云
118
2023-10-19 17:58:12

在Golang中使用FFmpeg可以實(shí)現(xiàn)音頻混音和分離。下面是一個(gè)簡(jiǎn)單的示例代碼:

package main
import (
"fmt"
"os"
"os/exec"
)
func main() {
// 音頻混音
mixAudio()
// 音頻分離
separateAudio()
}
func mixAudio() {
// 輸入音頻文件路徑
audioFile1 := "audio1.mp3"
audioFile2 := "audio2.mp3"
// 輸出混音后的音頻文件路徑
outputFile := "mixed_audio.mp3"
// 使用FFmpeg進(jìn)行音頻混音
cmd := exec.Command("ffmpeg", "-i", audioFile1, "-i", audioFile2, "-filter_complex", "[0:a][1:a]amerge=inputs=2[aout]", "-map", "[aout]", outputFile)
err := cmd.Run()
if err != nil {
fmt.Println("音頻混音失敗:", err.Error())
return
}
fmt.Println("音頻混音完成")
}
func separateAudio() {
// 輸入音頻文件路徑
audioFile := "mixed_audio.mp3"
// 輸出分離后的音頻文件路徑
outputFile1 := "separated_audio1.mp3"
outputFile2 := "separated_audio2.mp3"
// 使用FFmpeg進(jìn)行音頻分離
cmd1 := exec.Command("ffmpeg", "-i", audioFile, "-map", "0:0", outputFile1)
err1 := cmd1.Run()
if err1 != nil {
fmt.Println("音頻分離失敗:", err1.Error())
return
}
cmd2 := exec.Command("ffmpeg", "-i", audioFile, "-map", "0:1", outputFile2)
err2 := cmd2.Run()
if err2 != nil {
fmt.Println("音頻分離失敗:", err2.Error())
return
}
fmt.Println("音頻分離完成")
}

上述代碼中,mixAudio函數(shù)使用FFmpeg將兩個(gè)音頻文件進(jìn)行混音,輸出混音后的音頻文件。separateAudio函數(shù)使用FFmpeg將混音后的音頻文件分離成兩個(gè)單獨(dú)的音頻文件。

要運(yùn)行上述代碼,確保已經(jīng)安裝了FFmpeg,并將其添加到系統(tǒng)的環(huán)境變量中。并且使用go mod管理依賴(lài)。

此外,你還可以根據(jù)自己的需求自定義FFmpeg的命令參數(shù),以實(shí)現(xiàn)更復(fù)雜的音頻混音和分離操作。

0