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

103

Исходный вопрос

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

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

  • -acodec copy
Cheekysoft
источник
Я не использовал его для этой конкретной цели, но держу пари, что ffmpeg может это сделать.
грейпфрукт,
Просто подумайте: вы можете пропустить начало оригинальной песни. Скажем, вы можете использовать 30-секундный фрагмент, начиная с третьей части песни. В некоторых песнях, первые 30 секунд не говорит вам , насколько это просто «настройка сцены» часть - например , Pink Floyd «s Shine On You Безумный бриллиант .
Томаш Седович
Как примечание, у меня были очень плохие времена с ffmpeg, mptsplit и mp3cutter на CentOS, все они сообщали "Header Missing". Итак, мне пришлось использовать MP3 Class и немного математики, чтобы сократить размер файла.
Gardner
Я не понимал, что ffmpeg может это сделать. Спасибо.
Шридхар Сарнобат

Ответы:

142

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

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

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

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

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

Тим Фарли
источник
21
Последние ffmpegверсии (по крайней мере, начиная с 0.10.6) интерпретируют параметры по-разному в зависимости от позиции. -i ...Параметры, связанные с вводом, должны появляться до, а параметры, связанные с выводом, должны появляться после -i .... Значит ffmpeg -t 30 -i inputfile.mp3 -acodec copy outputfile.mp3, теперь будет правильный ответ.
Обен Сонне
Могу ли я извлечь 30-секундный звук из 15-секундного входного файла, это означает, что если файл теряется, то 30 секунд, затем извлекается 30 секунд, но если файл 15 секунд, то повторять и извлекать полные 30 секунд.
Гириш Патидар
6
Если вы хотите установить время начала (смещение), вы можете использовать -ss hh:mm:ss[.xxx]. Пример: ffmpeg -t 30 -ss 00:00:15.500 -i inputfile.mp3 -acodec copy outputfile.mp3будет обрезать до 30 секунд, начиная с 00ч 00м 15с 500мс .
patryk.beza 09
1
по какой-то причине ffmpeg -i inputfile.mp3 -t 30 -acodec copy outputfile.mp3
указанная
Для меня параметры -t и -s должны использоваться отдельно в двух командах. Но работает, спасибо!
Ян Кинг Инь
57

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

ffmpeg -ss 30 -i inputfile.mp3 -acodec copy outputfile.mp3
the.jxc
источник
18

пытаться:

ffmpeg -t 30 -i inputfile.mp3 outputfile.mp3
Джон Бокер
источник
12

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

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

ffmpeg -i test.mp3 -ss 00:00:20 -to 00:00:40 -c copy -y temp.mp3
Рахул Чаухан
источник
1
Отлично! Спасибо, что поделились этим.
HerrimanCoder
11

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

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

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

Михал Шрайер
источник
6

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

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

Райан Даффилд
источник
2
Успешно использовал MP3Split для обрезки mp3
Freshblood
0

У меня ошибка при том же

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

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

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

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.

srbcheema1
источник
1
В чем преимущество этой обертки? Потому что это не кажется проще, чемffmpeg -i input -ss <start time> -to <end time> output
llogan
Я также добавил вариант, -tкоторый может использоваться в качестве альтернативы, -eчто означает, что, предположим, я должен был обрезать следующее 4-минутное 36-секундное видео, мне не нужно беспокоиться о добавлении этого времени вручную, также я обеспечил аналогичную легкость при обрезке видео, см. Примеры в README вы поймете, почему его интерфейс командной строки проще простого ffmpeg. Я согласен, что он не такой мощный, но для нормального человека удобный инструмент.
srbcheema1 03
2
ffmpegесть -toвариант, который вы, -tвероятно, делаете .
llogan
как насчет опции возраста культуры%, упомянутой в README в разделе подопции культуры, она также доступна ?? Я просто создал этот инструмент по запросу кем-то, кто заплатил мне несколько долларов, так как они не хотят беспокоиться о большом списке параметров cli, им просто нужен инструмент, который мог бы легко выполнять определенные задачи, даже если в ffmpeg есть все параметры, но все же нубу будет сложно найти их все в разделе справки командной строки. в этом инструменте есть простой раздел справки, который легко понять
новичку
Конечно,-vf "crop=iw*0.1:ih*0.1:0:0"
llogan 03