Объединить два mp3 php - PullRequest
       39

Объединить два mp3 php

3 голосов
/ 22 октября 2010

Знаете ли вы класс для объединения двух файлов MP3 с помощью PHP?

Я ничего не нашел в Google.

Ответы [ 5 ]

10 голосов
/ 22 октября 2010

Если при слиянии вы имеете в виду размещение одного аудио над другим, игнорируйте этот ответ.

Если вы не хотите перекодировать MP3, возможно, вы просто добавитеих.Я знаю, что это работает для фильмов MPEG, поэтому я думаю, что это может работать и для MP3.Другой вариант - добавить файлы audo в Zip-архив без сжатия, а затем переименовать расширение в .mp3.

Я провел быстрый тест, и этот

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

работал нормально.Теги ID3 будут неправильными, но полученный файл содержит оба аудиофайла. Для некоторых других возможных ошибок, смотрите ссылку в ответе Пекки .

Кроме того, некоторое быстрое приближение привело к

и некоторые обсуждения

2 голосов
/ 22 октября 2010

Если файлы .mp3 представляют собой только аудио MPEG-1 или MPEG-2 Layer III, то эти файлы можно просто объединить.Не существует реальной концепции заголовка для всего файла.Каждый кадр имеет заголовок, за которым следуют данные, а файл состоит только из последовательности кадров, которая называется потоком битов.Скорость передачи, режим стерео и т. Д. Не обязательно должны быть одинаковыми в потоке битов, чтобы можно было объединять разнородные файлы.Статья в Википедии объясняет это, но я думаю, что спецификация на самом деле проще для понимания.

теги ID3 или другие данные в файле (что технически делает его несовместимым потоком битов) могут испортить ситуациюконец декодера.

Спецификация для аудио MPEG-1 и MPEG-2 на самом деле довольно проста.Написание парсера для разбиения файла на фреймы, а затем интерпретация заголовков - не такая уж большая работа.В прошлый раз, когда я сделал это, это заняло всего час или два.

Спецификация ID3 тоже не так уж сложна, поэтому я подозреваю, что написание некоторого кода для удаления тегов до объединения должно быть простым, ноникогда не делал этого.

Библиотека getID3 () (http://getid3.sourceforge.net/) тоже может дать некоторые рекомендации. Уже давно я ее использую, но она также может поддерживать открытие MP3 и удаление ID3теги уже.

HTH

2 голосов
/ 22 октября 2010

Это невозможно. В PHP нет реализации кодека MP3. Вам нужно будет использовать внешний инструмент командной строки, чтобы сделать это. (Который, в зависимости от конфигурации вашего сервера, вы можете выполнять из PHP, как говорит @ceejayoz.)

См. Эти вопросы для решения:

0 голосов
/ 18 сентября 2017

Для тех, кто заинтересован в том, чтобы сделать то же самое сейчас, вы можете использовать следующую библиотеку: 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");
0 голосов
/ 19 июля 2015

Важные вещи для запоминания:

  • битрейты должны совпадать. Также рекомендуется убедиться, что частота (Гц) и стерео / моно совпадают (я использовал Audacity).
  • Заголовок Content-length будет иметь длину обоих файлов.

Вот пример из моего проекта преобразования текста в речь. Мне нужно было добавить 1 секунду тишины в конце аудио MP3, которое генерировалось динамически:

$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;
...