複数のオーディオファイルを特定の位置で結合する

複数のオーディオファイルを特定の位置で結合する

セッションを表す複数のオーディオ ファイルがあります。したがって、1 つのフォルダーには次のファイルが含まれる可能性があります。

2016-06-22-15-59-59-000.mka
2016-06-22-16-59-59-001.mka
2016-06-22-17-59-59-002.mka

ファイル名は、このファイルが作成された日時です。たとえば、最初のファイルは 6 月 22 日の 15:59 に作成されました。2 番目のファイルは 16:59 に作成されました。

オーディオの長さは変化する可能性があり、固定の長さはありません。たとえば、ユーザーは 5 秒間または 10 分間セッションに接続できます。したがって、最初の長さは 00:05、2 番目の長さは 10:00 になります。

これらのファイルは一緒にセッションを表します。そのため、ファイルを結合する必要があります。音声会議に使用される同じ電話番号に複数の人が電話をかけていると考えることができます。

たとえば、アリス、ボブ、ジョンが何かを話し合いたいとします。アリスは 555-111-22-33 に電話をかけ、ボブは 1 分後に同じ番号に電話をかけます。彼らは 5 分間一緒に話します。そして 30 分後、ボブとジョンは同時に同じ番号に電話をかけます。そして 1 分後にアリスが参加します。

この場合、複数のオーディオ ストリームがあります。これらのストリームは通常は重複しますが、常に重複するわけではありません。たとえば、最初に Alice が Bob を待っているとき、私たちはすでに彼女を録音しており、このセッションには他に誰もいないので、このオーディオ ストリームは他のストリームと重複しません。

各人の音声録音を 1 つのファイルにまとめる最適な方法を探しています。このファイルでは全員の声が聞こえる必要があります。また、通話の合間に Alice、Bob、John がセッションに参加していないときは、沈黙だけになる必要があります。

ffmpeg のドキュメントを調べていますが、重複するストリームを作成し、ストリームを開始する正確な時間を指定するために使用できるオプションが見つかりません。

皆さんは、それを実行する最善の方法をご存知ですか? ffmpeg よりも優れたツールが必要かもしれません。ライブラリとプログラミング言語を使用して独自のプログラムを作成する必要があるかもしれません。ありがとうございます

答え1

最初のオーディオの開始の相対時間を として割り当ててみましょうt=0。したがって、最初のオーディオ録音が に始まり16:59:23、3 番目の録音が に始まった場合17:14:13、3 番目の録音の相対開始時間は になります14:50

それを念頭に置いて、基本的な指揮構造は

ffmpeg -i first.mka -i second.mka -i third.mka -i fourth.mka
       -filter_complex
         "[1]adelay=184000|184000[b];
          [2]adelay=360000|360000[c];
          [3]adelay=962000|962000[d];
          [0][b][c][d]amix=4"
merged.mka

このコマンドは、最初のファイルを除く各オーディオ ファイルの相対的な開始を、実際の相対的な開始時間と一致するように遅延させます。その後、遅延されたすべてのオーディオ ストリームが混合されます。amixフィルターは、必要な場所に無音を挿入します。

adelay値はミリ秒単位で指定する必要があるため、3 分 4 秒は 184 秒 (184000ミリ秒) になります。オーディオ ストリームの各チャネルに値を指定する必要があるため、モノラル ストリームを扱う場合は、[1]adelay=184000[b]構文は次のようになります。

関連情報