У меня есть серия mp3-файлов со смещением времени начала.
Я пытаюсь объединить их вместе с помощью adelay и amix.
Следующие коды запускаются и создают объединенный MP3-файл, но когда я слушаю конечный выходной файл, есть места, где люди перебивают друг друга, не в том смысле, что они грубят, а в том, что звук рассинхронизирован.
Вот файлы со смещением времени начала и окончания:
d4a19a58-790a-45c1-b96e-819bc98cd408.webm | 1720 | 3762173
ab794f92-bdfb-4bb0-821d-ba80c8a9228a.webm | 48920 | 3328385
a7df9a51-0671-4930-a14b-e7d85a562577.webm | 76220 | 3763361
5d312878-d25d-40d7-9418-bed85e22efc6.webm | 3109640 | 3267473
1cf6127d-250a-4601-a219-b1b6bbd725f8.webm | 3360980 | 3636927
c3ddd462-e05a-425f-af58-f288f930f2cb.webm | 3689600 | 3760423
Вот команда, которую я использовал для преобразования файла webm в MP3, разбитая на строки для удобства чтения:
ffmpeg
-acodec libopus
-i d4a19a58-790a-45c1-b96e-819bc98cd408.webm
-b:a 320K
-vn
-y d4a19a58-790a-45c1-b96e-819bc98cd408.mp3
Вот команда broken, объединяющая все mp3-файлы в строки для удобства чтения:
ffmpeg
-i d4a19a58-790a-45c1-b96e-819bc98cd408.mp3
-i ab794f92-bdfb-4bb0-821d-ba80c8a9228a.mp3
-i a7df9a51-0671-4930-a14b-e7d85a562577.mp3
-i 1cf6127d-250a-4601-a219-b1b6bbd725f8.mp3
-i c3ddd462-e05a-425f-af58-f288f930f2cb.mp3
-filter_complex "
[0]adelay=1720|1720[a0];
[1]adelay=48920|48920[a1];
[2]adelay=76220|76220[a2];
[3]adelay=3360980|3360980[a3];
[4]adelay=3689600|3689600[a4];
[a0][a1][a2][a3][a4]amix=inputs=5
"
out.mp3 -y
Есть идеи, что я делаю не так?
решение1
вам нужно задержать все аудиоканалы с одинаковым значением, используяadelay=миллисекунды:все=истина, и использовать-асинхронный 1в конце вашей команды, поэтому ffmpeg просто исправит начало аудиопотока, а не будет его растягивать/сжимать.
так что в вашем случае:
ffmpeg
-i input1.webm
-i input2.webm
-i input3.webm
-i input4.webm
-i input5.webm
-filter_complex "
[0]adelay=1720:all=true[a0];
[1]adelay=48920:all=true[a1];
[2]adelay=76220:all=true[a2];
[3]adelay=3360980:all=true[a3];
[4]adelay=3689600:all=true[a4];
[a0][a1][a2][a3][a4]amix=inputs=5 [out]
"
-map "[out]"
out.webm -async 1 -y
как говорится в документации:
-асинхронные выборки_в_секунду
Метод синхронизации звука. «Растягивает/сжимает» аудиопоток для соответствия временным меткам, параметр — максимальное количество выборок в секунду, на которое изменяется звук.-async 1 — особый случай, когда корректируется только начало аудиопотока без какой-либо последующей коррекции.