Обрезать 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
4.09.2008 14:35:14
Я не использовал его для этой конкретной цели, но держу пари, что ffmpeg может это сделать.
grapefrukt 4.09.2008 14:38:47
Просто мысль: вы можете пропустить начало оригинальной песни. Скажем, вы можете использовать 30-секундную пьесу, начиная с третьей части песни. В некоторых песнях первые 30 секунд мало о чем говорят, так как это просто часть «настройка сцены» - например, Pink Floyd 's Shine On You Crazy Diamond .
Tomas Sedovic 4.09.2008 15:18:59
Точно так же, как я заметил, у меня были действительно плохие времена с ffmpeg, mptsplit и mp3cutter на CentOS, все они сообщали «Отсутствует заголовок». Итак, мне пришлось пойти с классом MP3 и немного математики, чтобы сократить по размеру файла.
Gardner 28.02.2013 19:36:52
Я не понимал, что ffmpeg может это сделать. Спасибо.
Sridhar Sarnobat 16.12.2017 07:28:14
8 ОТВЕТОВ
РЕШЕНИЕ

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

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

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

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

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

135
15.12.2014 22:01:00
Последние ffmpegверсии (по крайней мере, начиная с 0.10.6) по-разному интерпретируют параметры в зависимости от позиции. -i ...Параметры, связанные с вводом, должны появляться до, а параметры, связанные с вводом, должны появляться после -i .... Это означает, ffmpeg -t 30 -i inputfile.mp3 -acodec copy outputfile.mp3что теперь будет правильный ответ.
Oben Sonne 30.12.2012 20:41:34
Могу ли я извлечь 30-секундный звук из 15-секундного входного файла, это означает, что если файл терет 30 секунд, затем извлечь 30-секундный, но если 15-секундный файл, то повторить и извлечь 30-секундный.
Girish Patidar 11.01.2016 10:01:52
Если вы хотите установить время начала (смещение), вы можете использовать -ss hh:mm:ss[.xxx]. Пример: ffmpeg -t 30 -ss 00:00:15.500 -i inputfile.mp3 -acodec copy outputfile.mp3срезается до 30 секунд, начиная с 00h 00m 15s 500ms .
patryk.beza 9.05.2016 15:08:33
По какой-то причине вышеупомянутая команда не работала для меня, но если я изменил ее на: ffmpeg -i inputfile.mp3 -t 30 -acodec copy outputfile.mp3тогда она работает отлично
Krishnendu 28.06.2016 05:27:28
Для меня опции -t и -s должны использоваться отдельно в 2 командах. Но это работает, спасибо!
Yan King Yin 21.01.2017 14:25:47

пытаться:

ffmpeg -t 30 -i inputfile.mp3 outputfile.mp3
17
4.09.2008 14:45:30

Вы можете попробовать Mp3Splt .

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

6
4.09.2008 14:45:52
Успешно использовал MP3Split для вырезания mp3
Freshblood 10.04.2014 19:20:36

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

ffmpeg -ss 30 -i inputfile.mp3 -acodec copy outputfile.mp3
56
25.07.2015 10:39:12

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

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

Это в убунту репо, так просто: sudo apt-get install cutmp3.

11
19.09.2011 00:15:13

Я получил ошибку, делая то же самое

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
0
22.07.2018 02:23:53

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

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

ffmpeg -i test.mp3 -ss 00:00:20 -to 00:00:40 -c copy -y temp.mp3
10
12.03.2019 21:20:41
Отлично! Спасибо, что поделились этим.
HerrimanCoder 26.08.2018 23:39:59

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

Вы можете просмотреть параметры подкоманды trim как:

srb@srb-pc:$ 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

srb@srb-pc:$ 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.

0
2.09.2019 23:33:09
В чем преимущество этой обертки? Потому что это не кажется проще, чемffmpeg -i input -ss <start time> -to <end time> output
llogan 3.09.2019 17:01:11
Я также добавил опцию, -tкоторую можно использовать в качестве альтернативы, -eчто означает, что я должен был обрезать следующие 4 мин 36 сек видео, мне не нужно беспокоиться, добавляя это время вручную, также я обеспечил аналогичную простоту при обрезке видео, см. Примеры в README вы поймете, почему его CLI проще, чем простой ffmpeg. Я согласен, что это не так мощно, но для нормального человека это удобный инструмент.
srbcheema1 3.09.2019 17:21:44
ffmpegесть -toвариант, который, -tвероятно, ваш .
llogan 3.09.2019 17:22:51
А как насчет опции% возраста урожая, упомянутой в README в разделе подопция, она также доступна? Я только что создал этот инструмент по требованию того, кто заплатил мне несколько долларов, так как он не хочет беспокоиться о большом списке опций cli, просто ему нужен инструмент, который мог бы легко выполнять определенные задачи, даже если в ffmpeg есть все опции, но все же было бы трудно найти их всех в разделе справки командной строки. этот инструмент имеет простой раздел справки, который легко понять
srbcheema1 3.09.2019 17:26:28
Конечно,-vf "crop=iw*0.1:ih*0.1:0:0"
llogan 3.09.2019 18:09:24