> For the complete documentation index, see [llms.txt](https://farmnet.gitbook.io/youtube-uploader-documentation/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://farmnet.gitbook.io/youtube-uploader-documentation/features/obrabotka-video-unikalizator-2.md).

# Обработка видео (Уникализатор 2)

## Какую проблему решает FARMNET Uniquifier?

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

### Уникализация изображения

Яркость, контраст, насыщенность, оттенок, гамма - каждый параметр настраивается диапазоном (от...до) и сэмплируется случайно для каждой копии. Значения умеренные (±10%) - глазом изменения почти незаметны, но для алгоритмов сравнения пиксельных хэшей и perceptual hashing каждая копия - это отдельное видео.

Цветокоррекция по зонам - отдельная регулировка светов, средних тонов и теней по RGB. Позволяет смещать цветовой баланс мягко, без заметных артефактов.

<figure><img src="/files/Rus0fsXMkmTSEvrKzM5d" alt=""><figcaption></figcaption></figure>

### Геометрические преобразования

Зеркалирование - горизонтальное или вертикальное отражение. Меняет позиции объектов в кадре, ломает алгоритмы которые сравнивают ключевые точки по абсолютным координатам.

<figure><img src="/files/NqxAoXU3JiFxsfbfiSYO" alt=""><figcaption></figcaption></figure>

Поворот основного видео и поворот watermark - небольшие углы, переменные между копиями.

<figure><img src="/files/a2BiB25i3SzCgYqvnUOi" alt=""><figcaption></figcaption></figure>

Масштабирование - изменение размера основного видео внутри кадра, переменное между копиями.

<figure><img src="/files/JXkYb5YM0PaPx5LjkMB8" alt=""><figcaption></figcaption></figure>

### Оверлеи

Сетка - полупрозрачная разметка поверх кадра. Параметр сглаживается настолько что не виден глазу, но меняет каждый пиксель в кадре — ломает pixel-by-pixel сравнение.

Шум - добавление цифрового шума со случайной интенсивностью. Гарантирует что компрессия каждой копии даст разные битовые потоки.

Водяной знак - изображение или текст с переменным поворотом, прозрачностью, размером. Можно ставить несколько раз с разными параметрами в каждой копии.

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

Дополнительные видео - наложение второго видео picture-in-picture с переменными параметрами (поворот, видимость, размер, скорость движения). Поддержка checkpoint-траекторий движения второго видео по кадру, с возможностью случайного порядка checkpoint'ов.

<figure><img src="/files/YUJmxrXxuiIAmbTryWNh" alt=""><figcaption></figcaption></figure>

### Аудио

Изменение громкости в заданном диапазоне (±15%). Добавление дополнительной аудиодорожки с настройками повтора, начала с случайной точки, согласования скорости с длиной видео.

Появление аудио (fade in) с переменной длительностью.

<figure><img src="/files/dtLxqBgQWGXbSmM6dZD8" alt=""><figcaption></figcaption></figure>

### Метаданные контейнера

Стирание оригинальных метаданных файла (теги, дата создания, устройство съёмки) и подстановка новых из шаблона. Внутри значений можно использовать конструкции вида {вариант1|вариант2|вариант3} - для каждой копии случайно выбирается один вариант. Токен <> подставляет текущую дату UTC.

<figure><img src="/files/l2alOwRiyLUHD0oRDb2M" alt=""><figcaption></figcaption></figure>

Эмуляция устройств съёмки - пресеты iPhone, Samsung, Xiaomi. Помимо обычных метаданных через ffmpeg патчится сам ftyp-atom файла (заголовок MP4-контейнера) — для iPhone это major\_brand=qt, minor\_version=0, compatible\_brands=qt, как у видео реально снятых на iPhone. Платформы которые проверяют ftyp на соответствие заявленному устройству увидят аутентичный отпечаток.

<figure><img src="/files/5zjjzNH5CS7VBEIwsyDf" alt=""><figcaption></figcaption></figure>

### Финальный экспорт

Три уровня компрессии (Minimum/Medium/Maximum) - задают CRF 18/23/28. При одинаковом видео разный CRF даёт разные битовые потоки и разные хэши итогового файла.

<figure><img src="/files/65Mnc07KXLD3Z20EE5x7" alt=""><figcaption></figcaption></figure>

Аппаратное ускорение - NVENC (NVIDIA), QSV (Intel), VideoToolbox (Apple), libx264 (программное). Программа сама проверяет какой кодек реально работает на железе через пробный пуск и автоматически откатывается на libx264 если аппаратный кодек отказал.

Управление FPS - изменение частоты кадров финальной копии.

### Детерминированность и воспроизводимость

Каждая копия получает свой seed, выведенный из base\_seed через blake2b. Пара (base\_seed, индекс\_копии) всегда даёт одно и то же значение - можно перегенерировать ту же копию идентично. Удобно для отладки и повторной загрузки если первая попытка упала.

### Производительность

Параллельная обработка нескольких копий. Лимит одновременных пайплайнов = min(threads\_из\_шаблона, cpu\_count() // 2). Каждый ffmpeg-процесс сам нагружает 2-4 ядра, поэтому уровень распараллеливания - это сами копии, а не стадии внутри одной копии.

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

### Контроль похожести

После генерации копий программа может построить индекс и сравнить копии между собой по перцептивному хэшу. Если две копии оказались слишком похожи (порог настраивается, по умолчанию 90) - действие выбирается пользователем: удалить дубликат, оставить или пометить. Защищает от ситуации когда диапазоны настроек слишком узкие и две копии случайно получились почти одинаковыми.

<figure><img src="/files/RxEvcmOL1dQx8YfyN2WS" alt=""><figcaption></figcaption></figure>

### Read-only исходник

Оригинальное видео никогда не модифицируется. Все операции выполняются через цепочку временных файлов в рабочей директории, итоговая копия пишется в save\_folder. Если процесс прерван - оригинал в целости, временные файлы автоматически удаляются.
