9

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

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

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

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

2 ответа2

12

С помощью 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 полезным.

6

Вы можете сделать это легко с помощью аргумента 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 для получения дополнительной информации.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .