Удаление фрагментов аудио из файла по образцу

Есть задача удалить из аудио-дорожки видео файла некоторые фрагменты по образцу. Например, щелчки, хлопки, цоканье и т.п.

То есть берутся образцы звуков на вычищение и входные файлы (видео с аудио-дорожкой или просто аудио), на выходе — файлы, очищенные от звуков, подобных заданным сэмплам.

Возможно, тут понадобится machine learning, и на первом этапе будут на входе только звуковые сэмплы, чтобы получить некую модель, а на втором этапе эта модель будет применяться для очистки файлов.

В найденных фрагментах — либо просто заглушать в ноль всё аудио (на 0,1-0,3 секунды), либо вычленять только сам звук, подходящий по характеристикам, оставляя все остальные звуки как есть. В принципе, первое проще, и этого достаточно. Второе — уже совсем в идеале.

Буду использовать Kotlin или Python, в зависимости от того, для какой платформы найдутся подходящие библиотеки.

Можете подсказать, какие библиотеки можно использовать для решения такой задачи?

P.S.:
Если вдруг уже существует какой-нибудь простой инструмент, который может делать это (выбрать фрагменты и удалить подобные в пачке файлов), было бы интересно узнать.

👍НравитсяПонравилось0
В избранноеВ избранном0
LinkedIn
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Gstreamer и Tensorflow. Но придется модель обучать. 2. Сразу вангую — переходи на C++ сильно проще будет с API и т.д.

TF — это C++ с возможностью дергать ее из python (binding frontend) в том числе, что для разного рода маркетологов намного удобнее потому что для них программирование не профильная деятельность. C++ надмножество C, любые C библиотеки легко используются из C++ без дополнительных телодвижений, в чем и заключается очень большое преимущество. Впрочем если вы найдёте хорошие bindings к Java/Scala или к python (а они есть) то дерзайте.

Старые версии не застал. Сейчас документация ± ok как и инпутами. Примеры прямо на сайте. Блазер только раздражает, почему они не делают цмейк как все — я хз.

Второе — это очень сложно делать даже руками. Невероятно сложно

У вас задача: найти фрагмент в дорожке и вырезать из таймлайна или подавить этот звук но при этом оставить фоновый?

Если вариант 1, то с помощью нейронов не сложно делать:
* Формируете dataset со звуками
* Разделяете аудио на фреймы
* Перегоняете через фреймы STFT
* Обучаете классификатор
* Определяете какой типа звука находится в этом коротком фрейме
* Вырезаете
* Profit

Если вариант 2 то это все намного сложнее, но варианты решения используя те же GAN тоже есть.
* Формируете dataset — с подавленными звуками и с обычными
* Разделяете аудио на фреймы
* Перегоняете через фреймы STFT
* создаете pipeline для обучения и подбираете какую-то удачную архитектуру для GAN
* обучаете
* перегоняете аудио фреймы обратно через Inverse STFT(еще надо проблемы с фазой решить)
* Profit

Ну кто вас знает, мб вы боги ML

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

Звук дрона имеет чётко выраженный характер волны, если быть точным, 4 волн. Со всей вытекающей спектралкой. То есть идеально не будет, поскольку он глушит сам сенсор, превышая его амплитуду восприятия. Но можно попробовать поймать волновые составляющие голоса, и по сути оставить только их.

А реально с дрона писать звук — дохлый номер, для этого надо ему присобачить микрофон на проводе, ну или сделать очень направленный с суперкардиоидой — но придётся пободаться подвеску делать, хотя результат может того стоить.

Хороший результат может дать использование микрофонной матрицы. Хотя как по мне, лучше решать вопрос в лоб, и в место дрона с 4 винтами летать вертолётом с одним несущим винтом — и тогда не иметь столь сильных помех, снизив обороты. Но и тогда нужен хороший сенсор звука и запись в формат, позволяющий брать весь размах амплитуды.

летать вертолётом с одним несущим винтом

такой не сможет зависнуть.

Полно разных тулзов в инете.

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

Звук дрона — это равномерный фоновый шум, это другой случай. А я хочу удалять короткие звуки, отличающиеся неким всплеском.

Инструментов нет, ни простых, ни сложных. Причина в природе самого сигнала и помехи. Они живут на одних частотах. А значит либо нужно опознавать сам сигнал и перевоспроизводить его заново генератором, либо мириться с примитивной спектральной чисткой.

Типичный способ избавиться от шипящих шумов — эхо. Грубо говоря, переотражение с АЧХ-сдвигом. Это то, что тебе сделает редактор. А уж как писать скрипт под редактор, который тебе понравился — RTFM.

Пойми, кроме сэмпла нужен ещё и критерий, по которому этот сэмпл считается на что-то похожим. Потому что это твой мозг умеет опознавать эти сэмплы, зная примерно возможный их источник. А компьютеру сие неведомо, и он не сможет убрать, скажем, пердёж, с твоей пафосной речуги. Потому что пердёж пердежу рознь, настолько что можно симфонию сложить.

Я примерно понимаю цель: почистить от шумов и распознать. Но фокус в том, что для выделения сигнала от шума, как раз и требуется распознать сигнал. Не шум. Именно это делаешь ты, когда пытаешься что-то расслышать. Не веришь — попробуй распознать от шума разговор на малознакомом тебе языке. Шансов ноль.

Если нужно распознавать разговор, сделай на эквалайзере повышение частот именно там, где имеет место резонанс в человеческом ухе. Поидее алгоритмы распознавания (качественные) и сами должны это делать, но ради эксперимента попробуй. Не забывай перевести звук в формат с плавающей точкой, либо же уменьшить громкость — иначе тебе после преобразования не хватит запаса амплитуды и ты получишь ещё помех.

Общий смысл такой: сперва добейся. Сделай в редакторе то что тебе требуется, и когда будешь доволен качеством — ищи фильтры, которые из командной строки могут сделать требуемый тебе эффект. Но всегда помни, что распознавать будешь не ты, а программа, поэтому не верь себе на слух, давай итог правки на тест распознавателю.

Не идеальны — не то слово. Но можно подобрать параметры при которых искажения оставшегося звука будут не особо критичны. Я и предлагаю ТС взять редактор, сначала сделать руками, а уже потом написать скрипт или под сам редактор, или под программу автоматизации — которая будет вызываться из батника, а батник будет по очереди подменять одну и ту же ссылку на файлы по списку, после чего запускать прогу, которая будет давить нужные кнопки, в идеале, горячие клавиши.

Это тоже вполне нормальный вариант. Знать бы только какой редактор и какой плагин брать.

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

Придётся ли мне что-то программировать при этом — мне не принципиально.

По-идее если почти полное совпадение, то можно минуснуть одну синусоиду из другой. Делал курсач такой на 3 курсе.
А так смотри в сторону регения от nvidia для чистого звука во время стримов. Умеет глушить даже барабаны на фоне.

Ну чего ж, желание вполне понятно: из смеси говна и повидла добыть повидло. Имея сэмпл говна.

Подписаться на комментарии