Рейтинг:11

Как удалить последние 4 секунды файла MP3?

флаг cn

У меня есть набор файлов MP3, из которых я хотел бы удалить последние 4 секунды. Я знаю, что если я знаю продолжительность каждого файла, я могу сделать:

ffmpeg -t ${1} -i inputfilename -acodec copy -vcodec copy outputfilename

Где $1 это продолжительность файла минус 4 секунды.

Мне бы очень хотелось что-то, что просто обрезало бы последние 4 секунды независимо от длины файла. «Остановка за 4 секунды до EOF».

Примечание. Я изо всех сил пытался понять эту командную строку, если есть более простая версия, мне нравится ее видеть.

andrew.46 avatar
флаг in
Если это простые аудио mp3, FFmpeg может быть излишним для ваших нужд? Sox отлично справится с этой задачей: `sox input.mp3 output.mp3 trim 0 -4`. Я могу написать это, если вы заинтересованы в использовании Sox ​​таким образом...
LarryM avatar
флаг cn
Это выглядит нормально, но... Я сделал «sudo apt install sox», и когда я запускаю команду, я получаю «sox FAIL formats: нет обработчика для расширения файла« mp3 »»?
LarryM avatar
флаг cn
Хорошо, сделал: sudo apt-get install libsox-fmt-mp3 и теперь обрезка конца работает нормально - спасибо! Но я также хотел бы обрезать 2 секунды с начала некоторых других файлов. Я пробовал: sox input.mp3 output.mp3 trim =2 (и другие варианты), но, похоже, это не работает. Предложения?
Рейтинг:7
флаг in

Sometimes when dealing with audio files, rather than audio plus video, a more nuanced application than FFmpeg is SoX. Install a fully featured SoX on Ubuntu as follows:

sudo apt-get install sox libsox-fmt-all

And to trim 4 seconds from the end of your mp3 file the following very simple command is required:

sox input.mp3 output.mp3 trim 0 -4

In this example '0' is the starting position at the beginning of the file while '-4' establishes the end position of the required segment: 4 seconds from the end.

Multiple variations on this, with multiple positions and saved segments, are possible. For example, as you have mentioned in the comments, if you only wanted to remove 2 seconds at the beginning of your file the command line would be:

sox input.mp3 output.mp3 trim 2

In this example no end position is required. The SoX man pages contain many more examples of the trim command if you want more complex usage...

LarryM avatar
флаг cn
Отлично спасибо!
andrew.46 avatar
флаг in
@LarryM Отличные новости, что это сработало для вас :). Можете ли вы «Принять» ответ, нажав на галочку или отметку рядом с ответом, и таким образом будущие читатели этого вопроса узнают, что это лучший ответ. И хорошего дня!
Рейтинг:5
флаг jp

Адаптирован из Вырезать видео с помощью ffmpeg:

ffmpeg -i input.mp3 -ss 4 -i input.mp3 -c copy -map 0:a -map 1:a -shortest -f орех - | ffmpeg -y -f nut -i - -c copy -map 0:0 output.mp3

Что это делает, так это использует один и тот же ввод дважды в обходном методе для обрезки без необходимости знать продолжительность и без повторного кодирования.

  1. Второй ввод имеет 4 секунды, отрезанные от начала.
  2. -кратчайший Опция использует самую короткую продолжительность ввода для определения продолжительности выходов. Это приводит к отсечению последних 4 секунд от первого ввода, чтобы соответствовать продолжительности усеченного второго ввода.
  3. Поскольку оба потока необходимы для -кратчайший для работы они передаются другому ffmpeg для удаления второго ввода.
флаг in
Это должно быть `-map 0 -map -0:1` или `-map 0:0`
LarryM avatar
флаг cn
Это обрезало первые четыре секунды файла, а не последние четыре.
llogan avatar
флаг jp
@LarryM Была опечатка, как указал Гайан, и на этот раз я действительно проверил вывод.
Рейтинг:2
флаг am

Ты можешь использовать ffprobe это должно прийти с ffmpeg чтобы получить продолжительность.

dur=$(($(ffprobe -loglevel error -show_entries format=duration -of default=nk=1:nw=1 inputfilename | xargs printf %.0f)-4))
ffmpeg -t ${dur} -i имя входного файла -c копировать имя выходного файла

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

я также использовал xargs округлить число, потому что бить принимает только целые числа при выполнении математических операций.

Ты можешь использовать До нашей эры если вам нужна большая точность.

dur=$(ffprobe -loglevel error -show_entries format=duration -of default=nk=1:nw=1 inputfilename)
длительность=$(bc <<< ${длительность}-4)
ffmpeg -t ${dur} -i имя входного файла -c копировать имя выходного файла
qwr avatar
флаг kr
qwr
слишком избыточное решение
llogan avatar
флаг jp
Нет необходимости в `sed`, так как продолжительность может быть получена непосредственно с помощью `ffprobe`. См. [Как добавить 1-секундный эффект затухания в конец видео с помощью ffmpeg?] (https://askubuntu.com/a/1128909/) для аналогичного подхода. `-acodec copy -vcodec copy` можно сократить до `-c copy`.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.