Запись прямого эфира — спортивной трансляции, радиошоу, VOD-стрима или конференции — в основном состоит из речи, шума толпы и комментариев, в которые вплетены фрагменты защищенной авторским правом музыки: музыка для выхода, заставки, фоновые композиции, сегменты диджея. Этот рецепт позволяет точно определить, где звучит музыка и что это за композиция, отметить каждый сегмент в отчете, а затем создать очищенную копию записи, в которой эти сегменты заглушены или вырезаны.
Что вы создадите
Два результата за один проход распознавания:
- Отчет с пометками — по одной строке на каждый музыкальный сегмент, с указанием абсолютного времени начала/окончания в файле и трека, который там звучит (исполнитель, название, лейбл, ISRC, ссылки). Это то, что вы передаете рецензенту, юридическому отделу или в журнал соответствия требованиям.
- Очищенная запись — тот же файл, в котором каждый помеченный сегмент либо заглушен (аудио обнулено, видео не затронуто), либо полностью вырезан; файл создается с помощью ffmpeg на основе временных меток из отчета.
Корпоративная конечная точка (enterprise endpoint) — подходящий инструмент: она обрабатывает записи произвольной длины и находит все треки, а не только один. И строки отчета, и правки ffmpeg основаны на позициях в файле — где именно в записи находится каждый музыкальный фрагмент. Каждое совпадение содержит параметры start_seconds и end_seconds, то есть позицию песни в вашем файле, а запросы recognize_enterprise по умолчанию запрашивают точные смещения, поэтому они очень точны.
AudD идентифицирует музыку, а политика — за вами. Этот рецепт находит и называет записи, а также редактирует ваш файл. Нужно ли на самом деле заглушать или вырезать конкретный сегмент — из-за лицензирования, добросовестного использования или правил вашей платформы — это решение, которое вы принимаете на основе отчета, а не то, что определяет API.
AudD идентифицирует музыку, а политика — за вами. Этот рецепт находит и называет записи, а также редактирует ваш файл. Нужно ли на самом деле заглушать или вырезать конкретный сегмент — из-за лицензирования, добросовестного использования или правил вашей платформы — это решение, которое вы принимаете на основе отчета, а не то, что определяет API.
Предварительные требования
- API-токен с dashboard.audd.io. Получите там свой собственный токен; на нем должна быть включена корпоративная конечная точка. Параметры label, isrc и upc возвращаются в корпоративных ответах (для ISRC/UPC требуется план Startup или выше).
- Python 3.10+ с SDK: pip install audd
- ffmpeg (и ffprobe) в вашем PATH для этапа очистки.
- Запись в виде URL или локального файла. https://audd.tech/example.mp3 — это публичный, воспроизводимый файл, который вы можете использовать для сквозного тестирования.
Пошаговое руководство
Шаг 1: Распознавание записи
Отправьте запись в recognize_enterprise в виде URL, байтов файла или пути. Многочасовая трансляция возвращается в виде плоского списка list[EnterpriseMatch] — по одной записи на каждый распознанный фрагмент в хронологическом порядке — и каждая запись имеет точные start_seconds / end_seconds, так как точные смещения запрашиваются по умолчанию.
Каждая напечатанная строка — это один распознанный фрагмент в хронологическом порядке. Музыкальный фон, который длится минуту, отображается как несколько последовательных совпадений с одним и тем же треком (шаг 3 объединяет их в один сегмент). Участки, где звучит только речь или шум толпы, не дают совпадений — это пропуск, а не ошибка, и именно то, что вам нужно: эти участки остаются нетронутыми.
Всегда устанавливайте limit во время разработки. Корпоративная конечная точка тарифицируется за каждые 12 секунд обработанного аудио. Двухчасовая трансляция — это сотни фрагментов; неограниченный вызов учитывает их все. Начните с limit=25, добейтесь правильного отчета и редактирования, а затем увеличьте лимит для полной записи.
Всегда устанавливайте limit во время разработки. Корпоративная конечная точка тарифицируется за каждые 12 секунд обработанного аудио. Двухчасовая трансляция — это сотни фрагментов; неограниченный вызов учитывает их все. Начните с limit=25, добейтесь правильного отчета и редактирования, а затем увеличьте лимит для полной записи.
Шаг 2: Позиции в файле, а не позиции в песне
Фильтр заглушения и математика вырезания используют позиции в файле, и start_seconds / end_seconds — это именно они: где эта песня звучит в вашем файле, в секундах (например, с 64.2 по 71.6). Передавайте их напрямую в плеер или ffmpeg. Они имеют значение None только в том случае, если фрагмент пришел без пригодной позиции.
Не используйте start_offset / end_offset — это необработанные смещения, из которых выводятся секунды, миллисекунды внутри внутреннего 12-секундного фрагмента сканирования AudD (0–~12000), а не секунды файла. И не используйте таймкод как позицию в файле: это позиция внутри записанной песни, которая говорит вам, какая часть песни звучала, а не где в вашем файле она звучит.
Шаг 3: Создание музыкальных сегментов из совпадений
Отчет и редактирование требуют по одному сегменту на каждое непрерывное воспроизведение — «эта музыка звучит с 64.2с по 96.0с» — а не по строке на фрагмент. Сверните последовательные совпадения с одним и тем же (исполнителем, названием) в один сегмент, охватывающий время от start_seconds первого совпадения до end_seconds последнего.
30-секундная заставка становится одним сегментом с реальным началом и концом. Поскольку SDK анализирует ответы гибко, любое поле может отсутствовать или быть None; проверка start_seconds и резервное значение end_seconds покрывают фрагмент, который приходит без позиции.
Шаг 4: Форматирование позиций в ЧЧ:ММ:СС
Отчет требует времени по часам, а не необработанных секунд. Отформатируйте абсолютные позиции файла:
Это всегда дает дополненное нулями значение ЧЧ:ММ:СС, которое легко читается для записи, длящейся более часа.
Шаг 5: Создание отчета с пометками
Превратите сегменты в отчет, с которым может работать рецензент — как в виде структурированных строк (для журнала соответствия или последующего инструмента), так и в виде читаемого резюме.
Каждая строка называет запись и определяет ее местоположение с помощью абсолютного диапазона файла, к которому можно сразу перейти. Пустой отчет означает, что сканирование не распознало музыку в охваченном диапазоне — это чистый результат, а не ошибка.
Шаг 6: Заглушение помеченных сегментов
Если вы хотите сохранить полную длину и временную шкалу записи (чтобы существующие метки глав, субтитры и ссылки на клипы оставались на своих местах), заглушите аудио на каждом помеченном интервале и оставьте все остальное нетронутым. Фильтр громкости ffmpeg с выражением enable обнуляет аудио только между началом и концом каждого сегмента:
Объединение одного условия volume=...:volume=0 на сегмент создает единый аудиофильтр, который заглушает каждый помеченный интервал и пропускает остальное. -c:v copy оставляет видеопоток без изменений; перекодируется только аудио. Выходной файл имеет ту же длительность и временную шкалу, что и исходный — музыка просто исчезает.
Шаг 7: Или вырезание помеченных сегментов
Если вместо этого вы хотите удалить музыку — получить более короткую запись с вырезанными музыкальными сегментами — сохраните интервалы, которые не помечены, и объедините их. Инвертируйте помеченные интервалы относительно длительности файла, затем вырежьте и соедините нужные интервалы:
Это обрезает каждый нужный интервал из исходного файла и объединяет их, полностью удаляя музыку. Результат короче исходного файла на общую длительность помеченных сегментов. (Для записи только с аудио удалите части [0:v]/v=1 и оставьте только atrim/audio concat.)
Отключение звука сохраняет временную шкалу; вырезание изменяет её. Используйте отключение звука, когда другие ресурсы (субтитры, главы, клипы с лучшими моментами) ссылаются на временные метки в оригинале — их позиции останутся прежними. Используйте вырезание, если хотите удалить музыку и получить файл меньшего размера, и готовы заново соотнести любые ресурсы с временными метками с новой временной шкалой.
Отключение звука сохраняет временную шкалу; вырезание изменяет её. Используйте отключение звука, когда другие ресурсы (субтитры, главы, клипы с лучшими моментами) ссылаются на временные метки в оригинале — их позиции останутся прежними. Используйте вырезание, если хотите удалить музыку и получить файл меньшего размера, и готовы заново соотнести любые ресурсы с временными метками с новой временной шкалой.
Шаг 8: Запуск от начала до конца
source — это то, что распознает AudD (URL или загруженные байты); input_path — это локальный файл, который вы редактируете. Часто это одна и та же запись — распознайте размещенную копию или загрузите байты, а затем примените полученные диапазоны к вашему локальному мастер-файлу.
Что вы получаете в ответ
Один EnterpriseMatch на каждый распознанный фрагмент в хронологическом порядке. Поля, которые считывает этот рецепт:
Для примера файла совпадение может вернуться со значениями start_seconds = 64.2 и end_seconds = 71.6 — это диапазон, который используется как для фильтра volume=enable='between(t,64.2,71.6)':volume=0, так и для расчетов вырезания/сохранения.
Обработка ошибок
SDK вызывает типизированные исключения; перехватывайте те, на которые можете повлиять.
- Ошибки аутентификации (AudDAuthenticationError) — неверный или отсутствующий токен. Завершайте работу при запуске.
- Ошибки квоты / подписки (AudDSubscriptionError) — достигнут лимит запросов или корпоративная конечная точка не включена для вашего токена. Корпоративная конечная точка и ISRC/UPC зависят от тарифного плана; сообщайте об этом владельцу учетной записи, а не повторяйте запрос.
- Ошибки недействительного аудио — URL или файл не были декодируемым аудио/видео. Рассматривайте это как критический сбой для данного источника, а не как молчаливый пустой отчет.
- Ошибки соединения (AudDConnectionError) — временные. Повторите попытку с экспоненциальной задержкой.
- Сбои ffmpeg/ffprobe — ненулевой код выхода вызывает subprocess.CalledProcessError. Неверный путь к файлу или проблема с кодеком проявляются здесь, отдельно от распознавания; не путайте это с пустым отчетом.
Пустой отчет (отсутствие помеченных сегментов) — это допустимый и отдельный результат, отличный от ошибки; в охваченном диапазоне не было распознано музыки, поэтому нечего отключать или вырезать, а шаги очистки не выполняют никаких действий.
Дальнейшие шаги
- Повторный запуск распознавания снова учитывает каждый фрагмент. Выполняйте сканирование один раз для каждой записи и сохраняйте отчет; восстанавливайте файл с отключенным звуком или вырезанными фрагментами из сохраненных диапазонов, а не путем повторного сканирования.
- Для многочасовой трансляции, где вам нужна только примерная карта расположения музыки, используйте параметры every/skip, чтобы обменять полноту покрытия на количество учитываемых фрагментов — см. Оптимизация корпоративных затрат.
- Если ваша цель — подача уведомления об удалении, а не редактирование на месте, те же значения start_seconds/end_seconds используются для формирования пакета доказательств — см. Создание доказательств для удаления по DMCA.
- Чтобы сканировать файлы по мере их загрузки, а не постфактум, см. Создание сканера авторских прав для пользовательского контента.
- Создание доказательств для удаления по DMCA
- Создание сканера авторских прав для пользовательского контента
- Оптимизация корпоративных затрат
- Документация Python SDK
- Справочник API

