连接 mka 文件但保留时间戳

Concatenating mka files but keeping timestamp

我正在尝试将一些文件与 FFMPEG 混合,这些文件是 mka,来自 Twilio 视频会议记录。我正在尝试获取每个参与者的轨迹,但我正在尝试从文件中保留整体时间戳。

具体例子:我有这三个文件:

0PA1896e43f4ca0edf17d8dbfc0bab95a52.mka
1PA2a640f11bc13af2c29397800f058cb05.mka
2PA9fa5b32edc016f6f5b9669bb9b308d97.mka

这些文件都是通话参与者的轨迹,但在不同时间加入(离开会议并 re-entered,生成一个新文件)。

我想将这些文件混合在一个文件中,同时保留记录时的时间戳。 FFProbe 显示每个文件的开头:

0PA1896e43f4ca0edf17d8dbfc0bab95a52.mka - Duration: 00:00:17.87, start: 1.360000, bitrate: 78 kb/s
1PA2a640f11bc13af2c29397800f058cb05.mka - Duration: 00:00:22.76, start: 22.521000, bitrate: 78 kb/s
2PA9fa5b32edc016f6f5b9669bb9b308d97.mka - Duration: 00:00:20.36, start: 48.944000, bitrate: 78 kb/s

所以第一个 00:00:17.87 应该被静音,然​​后附加来自 00:00:22.76 的第二个文件和来自 48.944000 的第三个文件。这将生成一个文件,其中添加了所有这 3 个录音,但在没有任何内容时会保持静音,并添加所有录音。实际上,我想在开始时延迟。

想象一下,我正在添加从第 2 分钟开始的第 4 个录音,在第 3 和第 4 分钟之间会有一段沉默。

或者想象一个有 3 个参与者的呼叫,但第 3 个参与者只会从第 5 分钟开始进入。前 5 分钟应该被静音,这样我就可以通过 trascribe api 第 3 个参与者并且仍然得到正确的时间戳.

我想要这种方式的原因是因为我想将音频转录为文本,并希望在可以听到文本时获得准确的时间戳。

您可以为此使用 aresample 和 amix 过滤器。 aresample 过滤器将应用于每个输入,以便在开始时间戳之前插入静音。然后将这些处理过的流与 amix 过滤器混合在一起。

我将调用输入 0.mka、1.mka 和 2.mka

ffmpeg -copyts -i 0.mka -i 1.mka -i 2.mka -filter_complex "[0]aresample=async=1:first_pts=0[a0];[1]aresample=async=1:first_pts=0[a1];[2]aresample=async=1:first_pts=0[a2];[a0][a1][a2]amix=inputs=3" out.mka