合併多個具有特定位置的音訊文件

合併多個具有特定位置的音訊文件

我有多個代表會話的音訊檔案。所以在一個資料夾中我可能有:

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 建立的。第二場是16點59分。

音訊持續時間可能會有所不同,沒有固定的持續時間。例如,使用者可以連接到會話 5 秒或 10 分鐘。因此第一個持續時間將為 00:05,第二個持續時間為 10:00。

這些文件一起代表會話 - 這就是它們應該合併的原因。您可以將其視為多個人撥打用於音訊會議的相同電話號碼。

例如,愛麗絲、鮑伯和約翰想討論某件事。 Alice 呼叫號碼 555-111-22-33,Bob 1 分鐘後呼叫同一號碼。他們一起聊了 5 分鐘。 30 分鐘後,鮑伯和約翰同時撥打同一個號碼。 1 分鐘後,愛麗絲也加入了。

所以在這種情況下我們有多個音訊串流。這些流通常會重疊,但並非總是如此。例如,當Alice一開始等待Bob時,我們已經在錄製她了,而這個會話中沒有其他人,所以這個音訊串流不會與其他音訊串流重疊。

我正在尋找將每個人的錄音合併到一個文件中的最佳方法。所以在這個文件中我們必須聽到每個人的聲音。在通話之間,當 Alice、Bob 和 John 不在會話中時,應該保持沉默。

我正在查看 ffmpeg 文檔,無法找到可用於創建重疊流並指定流應開始的確切時間的選項。

你們知道最好的方法是什麼嗎?也許我需要比 ffmpeg 更好的工具,也許我只需要使用函式庫和程式語言來創建我自己的程式來做到這一點?謝謝

答案1

讓我們將第一個音訊開始的相對時間指定為t=0。因此,如果第一個錄音開始於16:59:23,第三個錄音開始於17:14:13,則第三個錄音的相對開始時間為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]語法就是。

相關內容