Обрезать MP3 до первых 30 секунд - PullRequest
91 голосов
/ 04 сентября 2008

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

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

Теперь я знаю, что мог бы просто «нарезать поток» при n секундах (вычисляя по битрейту и размеру заголовка) при доставке файла, но это немного грязно и настоящая PITA 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> копировать метаданные трека из infile в outfile

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

  • -acodec copy

Ответы [ 8 ]

126 голосов
/ 04 сентября 2008

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

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

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

Ключ -acodec указывает ffmpeg использовать специальный кодек «copy», который не транскодирует. Молниеносно.

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

50 голосов
/ 28 мая 2010

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

ffmpeg -ss 30 -i inputfile.mp3 -acodec copy outputfile.mp3
17 голосов
/ 04 сентября 2008

попробовать:

ffmpeg -t 30 -i inputfile.mp3 outputfile.mp3
11 голосов
/ 19 сентября 2011

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

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

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

9 голосов
/ 14 июня 2017

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

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

ffmpeg -i test.mp3 -ss 00:00:20 -to 00:00:40 -c copy -y temp.mp3
5 голосов
/ 04 сентября 2008

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

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

3 голосов
/ 04 сентября 2008

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

0 голосов
/ 02 декабря 2016

Я получил ошибку при выполнении той же

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