Обрезать MP3 до первых 30 секунд

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

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

Ответ 1

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

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

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

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

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

Ответ 2

Если вы хотите УДАЛИТЬ первые 30 секунд (и сохранить остаток), используйте это:

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

Ответ 3

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

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

Ответ 4

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

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

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

Ответ 5

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

-y: force output file to overwrite.

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

Ответ 6

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

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

Ответ 7

Просто мысль: вы можете пропустить начало оригинальной песни. Скажем, вы можете использовать 30 секундную часть, начиная с третьей песни.
В некоторых песнях первые 30 секунд не говорят вам, что это просто часть "создания сцены", например Pink Floyd Shine On You Crazy Diamond.

Ответ 8

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

Ответ 10

Как и примечание, у меня было очень плохое время с ffmpeg, mptsplit и mp3cutter на CentOS, и все они сообщали "Header Missing". Итак, мне пришлось пойти с MP3-классом и некоторыми математиками, чтобы разрезать файлы.

Ответ 11

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

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

Ответ 12

medipack - очень простое приложение для командной строки в качестве оболочки над ffmpeg.

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

medipack trim input.mp3 -s 00:00 -e 00:30 -o output.mp3
medipack trim input.mp3 -s 00:00 -t 00:30 -o output.mp3

вы можете просмотреть параметры подкоманды обрезки как:

[email protected]:$ medipack trim -h
usage: medipack trim [-h] [-s START] [-e END | -t TIME] [-o OUTPUT] [inp]

positional arguments:
  inp                   input video file ex: input.mp4

optional arguments:
  -h, --help            show this help message and exit
  -s START, --start START
                        start time for cuting in format hh:mm:ss or mm:ss
  -e END, --end END     end time for cuting in format hh:mm:ss or mm:ss
  -t TIME, --time TIME  clip duration in format hh:mm:ss or mm:ss
  -o OUTPUT, --output OUTPUT

вы также можете изучить другие варианты, используя medipack -h

[email protected]:$ medipack --help
usage: medipack.py [-h] [-v] {trim,crop,resize,extract} ...

positional arguments:
  {trim,crop,resize,extract}

optional arguments:
  -h, --help            show this help message and exit
  -v, --version         Display version number

вы можете посетить https://github.com/srbcheema1/medipack и ознакомиться с примерами в README.