如何在 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'));
我需要一个工具来将 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'));