Вопрос

Оригинальный Вопрос

Я хочу иметь возможность сгенерировать новый (полностью действующий) MP3-файл из существующего MP3-файла для использования в качестве предварительного просмотра в стиле "попробуйте перед покупкой".Новый файл должен содержать только первый n секунды трека.

Теперь я знаю, что мог бы просто "перерезать поток" в n секунды (вычисляются исходя из битрейта и размера заголовка) при доставке файла, но это немного грязновато и настоящий ЛАВАШ на дорожке VBR.Я бы хотел иметь возможность сгенерировать правильный MP3-файл.

У кого-нибудь есть идеи?

Ответы

И то , и другое mp3split и ffmpeg это оба хороших решения.Я выбрал ffmpeg, поскольку он обычно устанавливается на серверах Linux, а также легко доступен для Windows.Вот еще несколько полезных параметров командной строки для создания предварительных просмотров с помощью ffmpeg

  • -t <seconds> измельчите через указанное количество секунд
  • -y принудительная перезапись файла
  • -ab <bitrate> установите битрейт, например -ab 96k
  • -ar <rate Hz> установите частоту дискретизации, например -ar 22050 для частоты 22,05 кГц
  • -map_meta_data <outfile>:<infile> копирование метаданных трека из начального файла в выходной

вместо настроек -ab и -ar вы можете скопировать исходные настройки трека, как предлагает Тим Фарли, с помощью:

  • -acodec copy
Это было полезно?

Решение

Я также рекомендую ffmpeg, но командная строка, предложенная Джоном Бокером, имеет непреднамеренный побочный эффект:он перекодирует файл до битрейта по умолчанию (который составляет 64 КБ / с, по крайней мере, в той версии, которая у меня здесь есть).Это может создать у ваших клиентов ложное впечатление о качестве ваших звуковых файлов, а также занять больше времени.

Вот командная строка, которая сократится до 30 секунд без перекодирования:

ffmpeg -t 30 -i inputfile.mp3 -acodec copy outputfile.mp3

Переключатель -acodec сообщает ffmpeg использовать специальный кодек "копировать", который не перекодируется.Это происходит молниеносно.

ПРИМЕЧАНИЕ:команда была обновлена на основе комментария Обена Зонне

Другие советы

Если вы хотите удалить первые 30 секунд (и сохранить остальные), то используйте это:

ffmpeg -ss 30 -i inputfile.mp3 -acodec copy outputfile.mp3

попробуй:

ffmpeg -t 30 -i inputfile.mp3 outputfile.mp3

вы можете использовать mp3cut:

cutmp3 -i foo.mp3 -O 30s.mp3 -a 0:00.0 -b 0:30.0

Это в репозитории ubuntu, так что просто: sudo apt-get install cutmp3.

Эта команда также работает безукоризненно.Я обрезал свои музыкальные файлы с 20 до 40 секунд.

-y :принудительно перезапишите выходной файл.

ffmpeg -i test.mp3 -ss 00:00:20 -to 00:00:40 -c copy -y temp.mp3

Возможно, вы захотите попробовать Mp3Splt.

Я использовал это раньше в службе C #, которая просто завершала процесс mp3splt.exe win32.Я предполагаю, что нечто подобное можно было бы сделать в вашем сценарии Linux / PHP.

Я не использовал его для этой конкретной цели, но держу пари ffmpeg могу это сделать.

Я получил сообщение об ошибке при выполнении того же самого

Invalid audio stream. Exactly one MP3 audio stream is required.
Could not write header for output file #0 (incorrect codec parameters     ?): Invalid argumentStream mapping:

Исправление для меня было:

ffmpeg -ss 00:02:43.00 -t 00:00:10 -i input.mp3 -codec:a libmp3lame out.mp3
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top