Как я могу удалить молчание из 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.
Ответы
Ответ 1
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
Подробный анализ того, как sox
silence
работает, можно найти здесь.
Ответ 2
Вероятно, вы ищете решение без потерь, то есть такое, которое не требует повторного кодирования (что снижает качество).
Я верю, что mp3splt - это то, что вы ищете. Его можно использовать из командной строки и графического интерфейса.
sudo aptitude install mp3splt mp3splt-gtk
должен работать на Debian и Ubuntu.
На странице man:
Вы также можете попытаться разделить файлы автоматически с обнаружением тишины (см. опцию -s), обрезать файлы, используя обнаружение молчания (см. параметр -r), или на фиксированную длину времени (см. -t опция)
Ответ 3
Посмотрите silencedetect
FFmpeg аудио фильтр:
Обнаружение тишины в аудиопотоке.
Этот фильтр регистрирует сообщение, когда он обнаруживает, что входной аудиовыход меньше или равен значению допуска шума в течение продолжительности, большей или равной минимальной длительности обнаруженного шума.
Время и продолжительность печати выражаются в секундах.
У него есть параметры для настройки того, как тихо нужно что-то считать молчанием, и как долго должно быть отмечено молчание.