如何在PHP中混合/合并2个mp3文件


How to mix/merge 2 mp3 files in PHP?

我需要一个工具来连接2个mp3文件在1.

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

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

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

有一些库吗?

或者有一些独特的shell命令可以在所有操作系统上组合文件?

或者我如何完成任务?

基于这个问题,您应该能够将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文件。如果这是在apache(或其他web主机,而不是CLI)下运行的PHP执行的,你需要确保你的www-data用户对输入文件有读访问权,对输出目录有写访问权。

您的所有临时输出,如背景,应保存为.wav,并仅转换回.mp3为最终输出。在每一步重新压缩音频可能会导致非常差的最终输出。

我在这里对FFMPEG的工作方式进行了假设,因此您可能需要查阅文档,以便构建一个功能正常或更有效的命令集。

你可以这样做

file_put_contents('combined.mp3',
file_get_contents('file1.mp3') .
file_get_contents('file2.mp3'));