Обрезка MP3 до первых 30 секунд
Исходный Вопрос
Я хочу иметь возможность генерировать новый (полностью действительный) MP3-файл из существующего MP3-файла, который будет использоваться в качестве предварительного просмотра -- try-before-you-buy style. Новый файл должен содержать только первый n секунд трека.
теперь я знаю, что могу просто "рубить поток" в n секунд (вычисление из битрейта и размера заголовка) при доставке файла, но это немного грязно и настоящая Пита на a 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>скопировать отслеживать метаданные из файла в файл outfile
вместо настройки-ab и-ar, вы можете скопировать исходные настройки трека, как предлагает Тим Фарли, с:
-acodec copy
10 ответов:
Я также рекомендую ffmpeg, но командная строка, предложенная Джоном Бокером, имеет непреднамеренный побочный эффект: она повторно кодирует файл с битрейтом по умолчанию (который составляет 64 кб/с в версии, которую я здесь по крайней мере). Это может создать у ваших клиентов ложное впечатление о качестве ваших звуковых файлов, и это также займет больше времени.
вот командная строка, которая будет нарезать до 30 секунд без перекодирования:
ffmpeg -t 30 -i inputfile.mp3 -acodec copy outputfile.mp3переключатель-acodec сообщает ffmpeg использовать специальный "копировать" кодек, который не перекодирует. Это молниеносно.
Примечание: команда была обновлена на основе комментария от Oben Sonne
Если вы хотите удалить первые 30 секунд (и сохранить остаток) , то используйте это:
ffmpeg -ss 30 -i inputfile.mp3 -acodec copy outputfile.mp3
вы можете использовать mp3cut:
cutmp3 -i foo.mp3 -O 30s.mp3 -a 0:00.0 -b 0:30.0это в Ubuntu РЕПО, так просто:
sudo apt-get install cutmp3.
вы можете попробовать Mp3Splt.
Я использовал его раньше в службе C#, которая просто обернула mp3splt.процесс exe win32. Я предполагаю, что нечто подобное может быть сделано в вашем сценарии Linux/PHP.
просто мысль: вы можете пропустить начало оригинальной песни. Скажем, вы можете использовать 30 секунд кусок начиная с третий песни.
В некоторых песнях первые 30 секунд не говорят вам много, так как это просто часть "настройка сцены" - например Pink Floyd ' s Блеск На Вас Сумасшедший Алмаз.
эта команда также работает идеально. Я обрезал свою музыку с 20 секунд до 40 секунд.
- y: принудительно перезаписать выходной файл.
ffmpeg -i test.mp3 -ss 00:00:20 -to 00:00:40 -c copy -y temp.mp3
Я не использовал его для этой конкретной цели, но я ставку ffmpeg можете сделать это.
Так же, как обратите внимание, у меня было очень плохое время с ffmpeg, mptsplit и mp3cutter на CentOS, все они сообщали "заголовок отсутствует". Итак, мне пришлось пойти с классом MP3 и некоторыми математиками, чтобы сократить размер файла.
Я получил ошибку, делая то же самое
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
Comments