Добавьте тишину в конец MP3

7960
Max Williams

Кто-нибудь из вас знает способ добавления тишины фиксированной длительности в конец MP3 в Linux? Например, используя MEncoder, FFmpeg и т. Д.?

Это должна быть командная строка, так как она будет скриптоваться и запускаться на нашем сервере.

Я гуглил это, и лучшее, что я мог сделать, это использовать padфункцию в SoX, но это не будет работать с MP3.

Я мог бы преобразовать его в WAV, использовать SoX, затем снова преобразовать его в MP3 и скопировать метаданные (за вычетом продолжительности) из оригинала в новый MP3. Но прежде чем написать сценарий для этого, я подумал, что смогу найти решение с одним ударом.

8
Я думаю, что вы можете сделать что-то подобное с помощью [mp3DirectCut] (http://mpesch3.de1.cc/mp3dc.html) (только для Windows, но говорят, что оно совместимо с Linux под Wine), что позволяет избежать повторного сжатия звуковых данных. Если бы вы перешли на MP3 -> WAV -> MP3, вы бы сжимали уже сжатый MP3 поток данных, теряя при этом много качества. Breakthrough 11 лет назад 2
Благодарю. Можете ли вы запустить программное обеспечение Windows через Wine из командной строки? Я бы предпочел по возможности избегать решений Wine, так как я не хочу устанавливать Wine на наш сервер. Max Williams 11 лет назад 0
Хм, вы можете избежать винного маршрута, если у вас его еще нет. Само вино - довольно большая загрузка, намного больше мегабайта или два для простого инструмента сокращения / слияния MP3. Я уверен, что есть эквивалентное решение для Linux. Если я найду дополнительные инструменты, я обязательно сообщу вам. Breakthrough 11 лет назад 0

2 ответа на вопрос

12
evilsoup

С помощью ffmpeg вы можете использовать фильтр aevalsrc для генерации тишины, а затем во второй команде использовать протокол concat, чтобы объединить их без потерь:

ffmpeg -filter_complex aevalsrc=0 -t 10 10SecSilence.mp3 ffmpeg -i "concat:input.mp3|10SecSilence.mp3" -c copy output.mp3 

Вы можете контролировать длительность молчания, изменяя -t 10время в секундах, которое вы предпочитаете. Конечно, вам нужно только генерировать тишину один раз, затем вы можете сохранить файл и использовать его для заполнения каждого файла, который вы хотите. Возможно, вы также захотите посмотреть демультиплексор concat - он немного загружает процессор, но вам может оказаться проще перейти в скрипт оболочки.

Если вы хотите сделать это с помощью одной команды, вы можете использовать фильтр concat - для этого вам потребуется перекодировать аудио (так как с фильтрами несовместимы -codec copy), поэтому, возможно, лучше подойдет описанная выше опция. Но это может быть полезно для любого, кто работает с необработанным PCM, желая до конца добавить тишину перед кодированием аудио:

ffmpeg -i input.mp3 \ -filter_complex 'aevalsrc=0::d=10[silence];[0:a][silence]concat=n=2:v=0:a=1[out]' \ -map [out] -c:a libmp3lame -q:a 2 output.mp3 

Контролируйте длительность молчания, изменяя d=10на любое время (в секундах), которое вы хотите. Если вы используете этот метод, вы можете найти это руководство по кодированию MP3 FFmpeg полезным.

спасибо @evilsoup. Я только что попробовал это и получил следующее - max-thinkpad-linux: ~ $ ffmpeg -filter_complex aevalsrc = 0 -t 4.61 silence.mp3 `ffmpeg версия 0.8.4-4: 0.8.4-0ubuntu0.12.04.1, Copyright ( c) 2000-2012 гг. разработчики Libav, созданные 6 ноября 2012 г. 16:51:33 с помощью gcc 4.6.3 *** ЭТА ПРОГРАММА УСТАРЕЛА *** Эта программа предназначена только для совместимости и будет удалена в следующем выпуске. Пожалуйста, используйте вместо этого avconv. Нераспознанная опция 'filter_complex' Не удалось установить значение 'aevalsrc = 0' для опции 'filter_complex' ` Max Williams 11 лет назад 0
@max Прежде всего, вы на самом деле используете avconv из проекта libav - они являются форком FFmpeg, который Debian и Ubuntu используют вместо основного проекта, и они предоставляют урезанную версию ffmpeg. Попробуйте вместо этого использовать `avconv` - синтаксис должен быть таким же, просто замените` ffmpeg` на `avconv`. evilsoup 11 лет назад 0
Если это не сработает, попробуйте перейти на более новую версию ffmpeg. Поскольку вы работаете в Ubuntu, вы можете использовать [этот PPA] (https://launchpad.net/~jon-severinsson/+archive/ffmpeg) или для самой последней версии, которую вы можете [скомпилировать из исходного кода. ] (https://ffmpeg.org/trac/ffmpeg/wiki/UbuntuCompilationGuide). evilsoup 11 лет назад 0
@MaxWilliams Или вы можете [скачать статическую сборку] (http://ffmpeg.org/download.html), которую вам не нужно сначала компилировать. Просто скачайте, распакуйте, используйте. slhck 11 лет назад 1
Здорово, что вам не нужно перекодировать. Есть ли способ скопировать метатеги в новый файл? StormPooper 9 лет назад 0
6
Fabien Snauwaert

Это легко сделать с помощью padаргумента SoX и следующего синтаксиса:

sox <oldfile> <newfile> pad <silence at beginning of file> <silence at end of file> 

Пример:

sox mp3.mp3 mp3withsilence.mp3 pad 0 1 

Это молчание в считанные секунды. (Другие варианты использования возможны с использованием другого синтаксиса, чтобы вставить эти молчания в определенные позиции. Для получения дополнительной информации см. Документацию SoX.)

Я должен отметить, что я проверил это нормально с файлами MP3 (с установленными libmad-0.dll и libmp3lame-0.dll, соответственно, для декодирования и кодирования MP3.) Насколько это возможно, я бы рекомендовал работать с форматом без потерь и конвертировать только в MP3 только в конце. Fabien Snauwaert 10 лет назад 0
это действительно круто - спасибо, Фабьен! Max Williams 10 лет назад 0
Это без потерь? Geremia 6 лет назад 0
Обновление: я прочитал на странице руководства sox, что она конвертируется во внутренний формат, а затем перекодирует… Geremia 6 лет назад 0
MP3 - это формат с потерями. Кодирование и перекодирование в формат с потерями будет постепенно ухудшать качество звука (независимо от того, слышите вы это или нет). Поэтому лучше всего работать с форматами без потерь и кодировать в формат с потерями только один раз, в конце. Список аудиокодеков с потерями: https://en.wikipedia.org/wiki/Lossy_compression#Audio и список аудиокодеков без потерь https://en.wikipedia.org/wiki/Lossless_compression#Audio Fabien Snauwaert 6 лет назад 0

Похожие вопросы