如何在 PHP 中 mix/merge 2 个 mp3 文件?

How to mix/merge 2 mp3 files in PHP?

我需要一个工具来将 2 个 mp3 文件合并为 1.

第一个文件(背景)将是一些声音(音乐,由用户提交), 第二个文件将是一台机器(google)说话的文本,由(用户)提交。

在输出中我需要一个 mp3 文件,同时播放背景音乐和会说话的机器人文本。

我真的找不到任何 PHP 独立的解决方案,比如一些库或类似的东西,只有 shell 命令 atc。

那么有一些图书馆吗?

或者有一些独特的 shell 命令适用于所有 OS 以合并文件?

或者我该如何完成任务?

基于 this question,您应该能够将 FFMPEG 安装到您的服务器上(希望不是共享主机?)并使用

//Reduce background volume, assuming it's 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'));