Обрезать 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 вы можете скопировать исходные настройки дорожки, как предлагает Тим Фарли, с помощью:
Ответы
Ответ 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 может это сделать.
Ответ 9
Я использовал это: http://mp3splt.sourceforge.net/mp3splt_page/home.php с хорошими результатами
Ответ 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.