У меня есть несколько аудиофайлов, которые представляют сессию. Так что в одной папке у меня может быть:
2016-06-22-15-59-59-000.mka
2016-06-22-16-59-59-001.mka
2016-06-22-17-59-59-002.mka
Имя файла — дата и время создания этого файла. Например, первый файл был создан 22 июня в 15:59. Второй — в 16:59.
Длительность аудио может варьироваться, фиксированной длительности нет. Например, пользователь может подключиться к сеансу на 5 секунд или на 10 минут. Таким образом, первая длительность будет 00:05, а вторая 10:00.
Эти файлы вместе представляют сессию - вот почему их следует объединить. Вы можете представить это так, как будто несколько человек звонят по одному и тому же номеру телефона, который используется для аудиоконференции.
Например, Алиса, Боб и Джон хотят что-то обсудить. Алиса звонит по номеру 555-111-22-33, а Боб звонит по тому же номеру через 1 минуту. Они разговаривают вместе в течение 5 минут. А через 30 минут Боб и Джон звонят по тому же номеру в то же время. А затем через 1 минуту присоединяется Алиса.
Итак, в этом случае у нас есть несколько аудиопотоков. Эти потоки обычно перекрываются, но не всегда. Например, когда Алиса ждет Боба в самом начале, мы уже записываем ее, и в этом сеансе больше никого нет, поэтому этот аудиопоток не перекрывается с другими.
Я ищу наилучший способ объединить аудиозаписи каждого человека в один файл. Поэтому в этом файле мы должны слышать всех. А между звонками, когда Элис, Боб и Джон не в сеансе, должна быть просто тишина.
Я просматриваю документацию 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]
синтаксис такой.