ホームページ  >  記事  >  バックエンド開発  >  Golang と FFmpeg: オーディオのミキシングと抽出を実装する方法

Golang と FFmpeg: オーディオのミキシングと抽出を実装する方法

WBOY
WBOYオリジナル
2023-09-29 13:33:121147ブラウズ

Golang与FFmpeg: 如何实现音频混音和提取

Golang と FFmpeg: オーディオのミキシングと抽出を実装する方法

概要:
オーディオ処理の分野では、FFmpeg を使用することが一般的です。 Golang 開発者にとって、Golang でのオーディオ処理に FFmpeg を使用する方法はよくある質問です。この記事では、Golang を使用して FFmpeg ライブラリを呼び出し、オーディオ ミキシングおよびオーディオ抽出機能を実装する方法を紹介し、具体的なコード例を示します。

  1. 前提条件:
    開始する前に、FFmpeg および関連する依存ライブラリがインストールされていることを確認してください。同時に、Go 言語の FFmpeg バインディング ライブラリ「go-ffmpeg」(https://github.com/GandalfUK/go-ffmpeg) を使用して、FFmpeg ライブラリ関数を呼び出します。
  2. オーディオ ミキシング:
    オーディオ ミキシングは、複数のオーディオ ストリームを 1 つの出力ストリームに結合するプロセスです。 Golang では、FFmpeg のオーディオ フィルターを使用してオーディオ ミキシングを実現できます。

2 つのオーディオ ファイルを 1 つの出力ファイルにミックスするサンプル コードを次に示します。

package main

import (
    "fmt"
    ffmpeg "github.com/GandalfUK/go-ffmpeg"
)

func main() {
    // 初始化FFmpeg库
    ffmpeg.InitFFmpeg()

    // 打开输入文件1
    input1, _ := ffmpeg.OpenInputFile("input1.wav")
    defer ffmeg.CloseInputFile(input1)

    // 打开输入文件2
    input2, _ := ffmpeg.OpenInputFile("input2.wav")
    defer ffmeg.CloseInputFile(input2)

    // 创建输出文件
    output, _ := ffmpeg.CreateOutputFile("output.wav")
    defer ffmeg.CloseOutputFile(output)

    // 为输入文件1创建音频流
    in1Stream, _ := ffmeg.CreateAudioStream(input1, 0)
    defer ffmeg.CloseStream(in1Stream)

    // 为输入文件2创建音频流
    in2Stream, _ := ffmeg.CreateAudioStream(input2, 0)
    defer ffmeg.CloseStream(in2Stream)

    // 创建音频滤镜图(filtergraph)
    filtergraph := fmt.Sprintf("[0:a][1:a]amerge=inputs=2[a]", in1Stream, in2Stream)

    // 使用音频滤镜,将输入文件1和输入文件2的音频流混合为一个输出音频流
    outStream, _ := ffmeg.CreateFilteredStream(input1, in1Stream, filtergraph)
    defer ffmeg.CloseStream(outStream)

    // 将输出音频流写入输出文件
    ffmeg.WriteStream(output, outStream)
}

上記のサンプル コードでは、最初に FFmpeg ライブラリを初期化しました。次に、2 つの入力オーディオ ファイルを開き、対応するオーディオ ストリームを作成します。次に、「amerge」フィルターを使用して 2 つの入力オーディオ ストリームを 1 つの出力オーディオ ストリームに混合するオーディオ フィルター グラフを作成します。最後に、出力オーディオ ストリームを出力ファイルに書き込みます。

  1. 音声抽出:
    音声抽出とは、音声ファイルから一定時間分の音声データを抽出することです。 Golang では、FFmpeg のオーディオ クリッピング機能を使用してオーディオ抽出を実現できます。

次は、音声ファイルから指定した時間帯の音声データを抽出するサンプル コードです。

package main

import (
    "fmt"
    ffmpeg "github.com/GandalfUK/go-ffmpeg"
)

func main() {
    // 初始化FFmpeg库
    ffmpeg.InitFFmpeg()

    // 打开输入文件
    input, _ := ffmpeg.OpenInputFile("input.wav")
    defer ffmeg.CloseInputFile(input)

    // 创建输出文件
    output, _ := ffmpeg.CreateOutputFile("output.wav")
    defer ffmeg.CloseOutputFile(output)

    // 为输入文件创建音频流
    inStream, _ := ffmeg.CreateAudioStream(input, 0)
    defer ffmeg.CloseStream(inStream)

    // 设置音频裁剪参数
    start := "00:00:10" // 开始时间(以时:分:秒的格式表示)
    duration := "00:00:05" // 提取的音频时长(以时:分:秒的格式表示)
    clippingArgs := fmt.Sprintf("trim=%s,%s", start, duration)

    // 使用音频裁剪,提取指定时间段的音频数据
    outStream, _ := ffmeg.CreateClippedStream(input, inStream, clippingArgs)
    defer ffmeg.CloseStream(outStream)

    // 将输出音频流写入输出文件
    ffmeg.WriteStream(output, outStream)
}

上記のサンプル コードでは、まず FFmpeg ライブラリを初期化します。次に、入力オーディオ ファイルを開き、対応するオーディオ ストリームを作成します。次に、オーディオのトリミング パラメーターを設定し、抽出するオーディオの期間を指定します。最後に、オーディオ クロッピング機能を使用して、入力オーディオの指定された期間のオーディオ データを出力ファイルに書き込みます。

概要:
この記事では、FFmpeg ライブラリを使用して、Golang でオーディオ ミキシングおよびオーディオ抽出機能を実装する方法を紹介します。 FFmpeg のオーディオ フィルターとオーディオ クロッピング関数を呼び出すことで、Golang でのさまざまなオーディオ処理のニーズを実現できます。この記事が、オーディオ処理に Golang を学習または使用している開発者にとって役立つことを願っています。

以上がGolang と FFmpeg: オーディオのミキシングと抽出を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。