Я не использую инструмент для присоединения 2 mp3 файлов в 1.
Первым файлом (фоновым) будет звук (музыка, отправленная пользователем), файл seccond будет машинным (google) говорящим текстом, который был отправлен (пользователем).
В выходе мне нужен один mp3 файл, с фоновой музыкой и текстом говорящего робота.
Я не могу найти какое-либо отдельное решение для PHP, например, какую-то библиотеку или что-то в этом роде, только команды shell atc.
Так есть некоторые библиотеки?
или существует некоторая уникальная команда оболочки, которая работает на всех ОС для объединения файлов?
Или как мне выполнить задачу?
Исходя из этого вопроса, вы должны иметь возможность устанавливать FFMPEG на свой сервер (надеюсь, не общий хост?) И использовать
//Reduce background volume, assuming it input2.mp3
shell_exec('ffmpeg -i input2.mp3 -af "volume=0.3" backround.wav');
//Merge the two
shell_exec('ffmpeg -y -i input1.mp3 -i background.wav -filter_complex amerge -c:a libmp3lame -q:a 4 output.mp3');
Затем вы можете просто output.mp3
. Если это выполняется PHP, работающим под apache (или другим веб-хостом вместо CLI), вам нужно убедиться, что пользователь ваших www-data
имеет доступ на чтение к входным файлам и записывает доступ к выходному каталогу.
Весь ваш временный вывод, например фон, должен быть сохранен как .wav
и преобразован обратно в .mp3
для окончательного вывода. Повторное сжатие звука на каждом шаге может привести к очень плохому окончательному результату.
Я делаю предположения о том, как работает FFMPEG здесь, поэтому вам может потребоваться обратиться к документации для него, чтобы создать эффективный или более эффективный набор команд.
Вы можете просто сделать это
file_put_contents('combined.mp3',
file_get_contents('file1.mp3') .
file_get_contents('file2.mp3'));
cat file1.mp3 file2.mp3 > joined.mp3
. Теги id3 могут внести некоторые изломы в работу, а также mp3-in-wav и еще много чего.