Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

cenz-hyenz

Автоматическая цензура мата в видео и аудиофайлах с GPU-ускорением.

Использует faster-whisper (CTranslate2) для транскрипции речи с пословными таймстемпами, затем находит матерные слова по словарю и заменяет их тишиной или бипом. Работает в 4–6 раз быстрее стандартного Whisper.

Возможности

  • Любой формат — принимает любое видео/аудио, поддерживаемое FFmpeg (определение типа через ffprobe, не по расширению)
  • Сохранение качества — автодетект оригинального битрейта, перекодирование без потери качества
  • Интерактивный выбор дорожек — при нескольких аудиодорожках показывает меню в терминале
  • Автовыбор всех дорожек — можно сразу обработать все доступные дорожки без ручного -t
  • Экспорт отдельных дорожек — помимо видео выводит обработанные аудиодорожки отдельными файлами
  • Режим только дорожек — можно не собирать видео и сохранять только зацензуренные аудиодорожки
  • Edge-preserve цензура — по умолчанию глушится центр слова, края остаются для естественного звучания
  • Два режима цензуры — тишина (по умолчанию) или бип
  • Кеширование — транскрипты и промежуточные файлы кешируются, повторный запуск мгновенный
  • Пакетная обработка — несколько файлов за раз
  • VAD-фильтр — пропуск тишины при транскрипции для ускорения
  • Автопропуск тихих дорожек — комментарии режиссёра и т.п.
  • GPU + CPU fallback — CUDA float16 для GPU, автоматический переход на CPU (int8) если GPU недоступен
  • JSON-отчёт — опциональный машиночитаемый отчёт о запуске

Требования

  • Python 3.10+
  • FFmpeg в PATH (ffmpeg + ffprobe)
  • NVIDIA GPU с поддержкой CUDA (рекомендуется; без GPU работает на CPU, но медленнее)
  • CUDA Toolkit и cuDNN (для GPU-ускорения)

Установка

git clone https://github.com/maxxborer/cenz-hyenz.git
cd cenz-hyenz

python -m venv venv
# Windows
.\venv\Scripts\activate
# Linux/macOS
source venv/bin/activate

pip install faster-whisper numpy soundfile

На Windows можно запускать через censor.bat — он автоматически активирует venv.

Использование

Базовое

# Видео — автодетект формата, все дорожки
python censor.py video.mkv

# Аудиофайл
python censor.py podcast.mp3

# Несколько файлов
python censor.py *.mkv *.mp3

Выбор дорожек

# Если дорожек несколько и -t не указан — интерактивный выбор:
python censor.py movie.mkv
#   📊 Доступные аудиодорожки:
#      [0] Russian (aac, 6ch, 48000Hz, 384 kbps)
#      [1] English (ac3, 6ch, 48000Hz, 640 kbps)
#      [2] Commentary (aac, 2ch, 48000Hz, 128 kbps)
#   Введите номера дорожек через запятую (например: 0,2)
#     'all' или Enter — обработать все
#   > 0,1

# Неинтерактивный режим через CLI-аргумент
python censor.py movie.mkv -t 0,1

# Выбрать все доступные дорожки автоматически
python censor.py movie.mkv -a

# Только зацензуренные дорожки, без сборки видео
python censor.py movie.mkv --censored-tracks-only

Модели и режимы

# Модель large-v3 (точнее, но медленнее)
python censor.py video.mkv -m large-v3

# Бип вместо тишины
python censor.py video.mkv --beep

# Жёсткий режим (без сохранения краёв слов, паддинг 50 мс)
python censor.py video.mkv --hard

# Тонкая настройка параметров цензуры
python censor.py video.mkv --pad-ms 30 --edge-keep-ms 10 --min-censor-ms 100

Прочее

# Указать выходной файл
python censor.py video.mkv -o output.mkv

# Показать информацию о дорожках
python censor.py video.mkv --info

# JSON-отчёт
python censor.py video.mkv --report-json report.json

# Очистить кеш (без моделей)
python censor.py --clear-cache

# Очистить скачанные модели
python censor.py --clear-models

Формат вывода

При обработке видео в обычном режиме выводятся:

══════════════════════════════════════════════════════
  Было:    movie.mkv
  Стало:   movie_censored.mkv (1520.3 MB)
  Стало 2: Отдельные дорожки:
           movie_censored_track0.m4a (48.2 MB)
           movie_censored_track1.ac3 (85.1 MB)
══════════════════════════════════════════════════════
  • Было — путь к оригинальному файлу
  • Стало — зацензурированное видео (все дорожки, видео и субтитры без перекодирования)
  • Стало 2 — отдельные обработанные аудиодорожки в оригинальном кодеке

Если указан --censored-tracks-only, блок Стало не выводится, а сохраняются только подходящие Стало 2.

Параметры

Параметр Описание
input Входные файлы (любое видео или аудио), поддерживает glob-паттерны
-o, --output Выходной файл (только для одного входного)
-m, --model Модель Whisper: tiny, base, small, medium (по умолчанию), large-v2, large-v3, large-v3-turbo
-t, --tracks Номера аудиодорожек через запятую, например 0,2,4. Если не указано и дорожек >1 — интерактивный выбор
-a, --all-tracks Автоматически выбрать и обработать все доступные дорожки
--censored-tracks-only Не собирать видео и сохранять только зацензуренные дорожки; чистые и тихие пропускать
--beep Бип (1000 Гц) вместо тишины
--hard Жёсткий режим: отключает сохранение краёв + паддинг 50 мс
--pad-ms Расширение зоны цензуры с каждой стороны (мс). По умолчанию: 25 (обычный), 50 (--hard)
--edge-keep-ms Сохранять края слова (мс). По умолчанию: 15
--min-censor-ms Минимальная длина mute-интервала (мс). По умолчанию: 80
--no-edge-keep Отключить сохранение краёв слова
--language Язык транскрипции. По умолчанию: ru
--info Показать аудиодорожки без обработки
--report-json Сохранить JSON-отчёт в указанный файл
-v, --verbose Подробный вывод
--clear-cache Удалить кешированные данные (без моделей)
--clear-models Удалить скачанные модели Whisper

Словарь мата

Файл swears.txt содержит корни и основы матерных слов (один на строку). Скрипт ищет эти основы с учётом возможных окончаний через regex. Комментарии начинаются с #.

Поиск файла словаря происходит в следующем порядке:

  1. swears.txt в папке скрипта
  2. ~/.config/censor/swears.txt

Словарь можно редактировать — добавлять или убирать слова по необходимости.

Как это работает

  1. Определение типа — ffprobe анализирует потоки файла (видео/аудио)
  2. Выбор дорожек — если дорожек >1 и -t не указан — интерактивный выбор в терминале
  3. Извлечение аудио — ffmpeg извлекает аудиодорожку в WAV (16 кГц, моно) для Whisper
  4. Проверка на тишину — тихие дорожки (< -50 дБ) пропускаются
  5. Транскрипция — faster-whisper распознаёт речь с пословными таймстемпами (VAD-фильтр ускоряет процесс)
  6. Поиск мата — каждое слово проверяется по словарю с учётом словоформ
  7. Цензура — извлекается полнокачественный WAV, мат заменяется тишиной/бипом (edge-preserve по умолчанию)
  8. Кодирование — обработанный WAV кодируется обратно в оригинальный кодек с оригинальным битрейтом
  9. Сборка — для видео: видеопоток и субтитры копируются без изменений, аудио подставляется обработанное; в режиме --censored-tracks-only этот шаг пропускается
  10. Экспорт — обработанные аудиодорожки экспортируются отдельными файлами (ремукс без перекодирования)

Кеширование

Кеш хранится в папке cache/ рядом со скриптом. Для каждого файла создаётся подпапка на основе имени, размера и даты модификации. Кешируются:

  • Извлечённые WAV-файлы (16 кГц и полнокачественные)
  • JSON-транскрипты
  • Готовые обработанные аудиодорожки
  • Маркеры тихих дорожек

При повторном запуске скрипт пропустит все уже обработанные этапы. Очистить кеш: python censor.py --clear-cache.

Поддерживаемые форматы

Принимается любой медиафайл, который может прочитать FFmpeg. Тип определяется через ffprobe (наличие видео/аудио потоков), а не по расширению.

Аудиокодеки (кодирование обратно): AAC, MP3, Opus, Vorbis, FLAC, AC3, EAC3, DTS

Настройки

Константы в начале censor.py:

Константа По умолчанию Описание
DEFAULT_MODEL "medium" Модель Whisper по умолчанию
SILENCE_THRESHOLD_DB -50 Порог тишины (дБ) для пропуска дорожки
BEEP_FREQ 1000 Частота бипа (Гц)
DEFAULT_PAD_MS 25 Расширение цензуры с каждой стороны (мс)
HARD_PAD_MS 50 Паддинг в режиме --hard (мс)
DEFAULT_EDGE_KEEP_MS 15 Сохранение краёв слова (мс)
DEFAULT_MIN_CENSOR_MS 80 Минимальная длина mute-интервала (мс)
MERGE_GAP_MS 40 Объединение близких интервалов (мс)

Выбор модели

Модель VRAM Скорость Качество
tiny ~1 ГБ ★★★★★ ★★
base ~1 ГБ ★★★★ ★★★
small ~2 ГБ ★★★★ ★★★
medium ~5 ГБ ★★★ ★★★★
large-v2 ~6 ГБ ★★ ★★★★★
large-v3 ~6 ГБ ★★ ★★★★★
large-v3-turbo ~6 ГБ ★★★ ★★★★★

medium — оптимальный баланс скорости и качества для русского языка. Без GPU работают все модели через CPU fallback (int8), но значительно медленнее.

Лицензия

MIT

About

Автоматическая цензура мата в видео и аудиофайлах с GPU-ускорением.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages