您是否知道使用PHP合并两个MP3文件的类?
我在谷歌上找不到任何东西。
答案 0 :(得分:10)
如果通过合并,你的意思是将一个音频放在另一个音频上,那么请忽略这个答案。
如果您不想重新编码MP3,可以直接添加它们。我知道这适用于MPEG电影,所以我想它也适用于MP3。另一种选择是将音频文件添加到没有压缩的Zip存档,然后将扩展名重命名为.mp3。
我做了一个快速测试,这个
file_put_contents('combined.mp3',
file_get_contents('file1.mp3') .
file_get_contents('file2.mp3'));
工作得很好。 ID3标签是错误的,但生成的文件包含两个音频文件。 For some other possible gotchas, see the link in Pekka's answer
此外,一些快速的谷歌搜索导致了
和一些讨论
答案 1 :(得分:2)
这是不可能的。 PHP中没有MP3编解码器的实现。您需要使用外部命令行工具来执行此操作。 (根据您的服务器配置,您可以在PHP中执行,如@ceejayoz所说。)
有关解决方案,请参阅以下问题:
答案 2 :(得分:2)
如果.mp3文件只是MPEG-1或MPEG-2 Layer III音频,那么文件就可以连接起来。整个文件没有标头的真正概念。每个帧都有一个标题后跟数据,文件只包含一系列帧,称为比特流。比特率,立体声模式等在比特流中不一定必须相同,因此您可以连接不同的文件。维基百科的文章解释了这一点,但我认为规范实际上更容易理解。
文件中的ID3标签或其他数据(从技术上讲,它是一种不合规的比特流)可能会破坏解码器端的内容。
MPEG-1和MPEG-2音频的规格实际上非常简单。编写解析器将文件分块为帧,然后解释头文件并不是那么多。我最后一次这样做,只花了一两个小时。
ID3规范也没那么复杂,所以我怀疑编写一些代码来删除标记,然后连接应该很容易,但我从来没有这样做过。
getID3()库(http://getid3.sourceforge.net/)也可能提供一些指导。我使用它已经有一段时间了,但它也可能支持打开MP3并剥离ID3标签。
HTH
答案 3 :(得分:0)
要记住的重要事项:
Content-length
标题是两个文件的长度。这是我的文字转语音项目的样本。我需要在动态生成的MP3音频结尾处添加1秒的静音:
$output_audio = textToMP3("Hello World"); // Original audio
$silent_audio = file_get_contents("silence.mp3"); // 1 second silence
$content_length = strlen($output_audio) + strlen($silent_audio);
// Output the audio stream
header('Content-type: audio/mpeg');
header('Content-length: ' . $content_length);
header('Cache-Control: no-cache');
header("Pragma: no-cache");
header("Expires: 0");
echo $audio . $silent_audio;
答案 4 :(得分:0)
对于现在有兴趣做同样事情的人,您可以使用以下库: https://github.com/falahati/PHP-MP3
composer require falahati/php-mp3
合并两个MP3文件:
$audio1 = \falahati\PHPMP3\MpegAudio::fromFile("1.mp3");
$audio2 = \falahati\PHPMP3\MpegAudio::fromFile("2.mp3");
$audio1->append($audio2)->saveFile("3.mp3");