Вопрос
Оригинальный Вопрос
Я хочу иметь возможность сгенерировать новый (полностью действующий) 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