Как программно удалить тишину из MP3?

У меня есть файлы MP3, которые иногда заканчиваются тишиной. Я хотел бы автоматически убрать это молчание. Насколько я могу судить, это «идеальная» тишина (амплитуда 0), а не фоновый шум. Продолжительность содержания и тишина различаются.

Я нашел еще несколько вопросов о обрезке до первых 30 секунд или обрезка до X и X + N секунд с использованием ffmpeg. Я бы подумал, что мог бы использовать аналогичный подход, если бы у меня был способ узнать, когда начинается тишина. Как мне сделать это программно?

Например, одним из возможных решений может быть команда, которая находит начало «тишины». Я ожидал такой последовательности

end=$(ffmpeg some-command-to-find-start-of-silence)
ffmpeg -t "$end" -acodec copy -i inputfile.mp3 outputfile.mp3

Решение не должно использовать ffmpeg, но оно должно быть доступно в Ubuntu.


person Benjamin Oakes    schedule 06.08.2012    source источник
comment
Вас действительно интересует только идеальная тишина? Это очень редко, с дизерингом от 24-битных мастеров и сжатием с потерями. В любом случае, FFMPEG - лучший вариант.   -  person Brad    schedule 06.08.2012
comment
@Brad Мы в основном работаем над ошибкой в ​​сервисе записи, который мы используем. Кажется, что при возникновении проблемы он всегда дает идеальную тишину.   -  person Benjamin Oakes    schedule 06.08.2012
comment
Похоже, вас может заинтересовать silencedetect аудиофильтр FFmpeg.   -  person blahdiblah    schedule 06.08.2012
comment
@blahdiblah Это могло бы сработать. Не могли бы вы превратить этот комментарий в ответ?   -  person Benjamin Oakes    schedule 06.08.2012


Ответы (3)


sox inputfile.mp3 outputfile.mp3 silence 1 0.1 0.1% reverse silence 1 0.1 0.1% reverse

Это обрежет любую тишину дольше 0,1 секунды в вашем файле. Если вас беспокоит только обрезка конца, это можно упростить до:

sox inputfile.mp3 outputfile.mp3 reverse silence 1 0.1 0.1% reverse

Подробное описание того, как работает silence sox, можно найти здесь .

person James    schedule 06.08.2012
comment
Решение работает, но ваше объяснение неверно. Первоначальный автор сказал: «Уменьшайте тишину (громкость менее 1%), пока мы не услышим звук продолжительностью более 0,1 секунды». - person duleshi; 16.10.2015

Вероятно, вы ищете решение без потерь, т. Е. Такое, которое не требует перекодирования (что снижает качество).

Я считаю, что mp3splt - это то, что вы ищете. Его можно использовать из командной строки и графического интерфейса.

sudo aptitude install mp3splt mp3splt-gtk

должен работать в Debian и Ubuntu.

На странице руководства:

Вы также можете попробовать разделить файлы автоматически с помощью обнаружения тишины (см. Параметр -s), обрезать файлы с помощью обнаружения тишины (см. Параметр -r) или по фиксированной длительности (см. Параметр -t)

person Has QUIT--Anony-Mousse    schedule 30.12.2013
comment
А как насчет тишины в середине файла? - person Vitaly Zdanevich; 11.11.2018
comment
Да, но разделение создает несколько файлов, мне нужно убрать тишину из одного файла. - person Vitaly Zdanevich; 12.11.2018
comment
Присоединиться к ним потом? - person Has QUIT--Anony-Mousse; 12.11.2018
comment
Просто вырезал мёртвую тишину в моих записях лекций - эта тишина была добавлена ​​аппаратной проблемой. - person Vitaly Zdanevich; 12.11.2018
comment
Тогда разделение файла и объединение звучит совершенно правильно, не так ли? - person Has QUIT--Anony-Mousse; 12.11.2018

Взгляните на silencedetect аудиофильтр FFmpeg:

Обнаружение тишины в аудиопотоке.

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

Напечатанное время и продолжительность выражаются в секундах.

У него есть параметры для настройки того, насколько тихим должно быть что-то, чтобы считаться тишиной, и как долго тишина должна быть отмечена.

person blahdiblah    schedule 06.08.2012
comment
Фильтр silenceremove описан здесь ffmpeg.org/ffmpeg-filters.html#toc-silenceremove Этот ответ тоже может оказаться полезным: stackoverflow.com/a/29411973/1717535 - person Fabien Snauwaert; 23.02.2017