# Как распознать дипфейк в видео и звонке: проверка, инструменты и защита от мошенников

> AI Release · @ai_release1 · https://ai-release.org/guides/kak-raspoznat-dipfeyk-v-video-i-zvonke-proverka-instrum.html

## TL;DR
- Время выполнения: 25 минут
- Уровень сложности: Basic
- Понадобится: `ffmpeg`/`ffprobe`, `exiftool`, Python 3 с пакетами `opencv-python` и `numpy`, браузер, второй телефон для контрольного звонка. Точные версии пакетов сверьте с документацией вашего дистрибутива — в гайде они не фиксируются.

## Требования и подготовка
![Иллюстрация к разделу «Требования и подготовка»](https://ai-release.org/guides/img/kak-raspoznat-dipfeyk-v-video-i-zvonke-proverka-instrum-ru-1.jpg?v=1793003849)

- ОС: Linux, macOS или Windows 10/11 (в Windows команды `ffmpeg`, `ffprobe`, `exiftool` вызываются из PowerShell после добавления папки `bin` в `PATH`).
- Утилиты: `ffmpeg`, `ffprobe`, `exiftool`. Проверка — команды ниже должны вывести справку и код возврата 0.
- Python 3 и пакеты: `opencv-python`, `numpy`.
- Права: только чтение файла-видео и запись в текущую папку; root/админ не нужен.
- Свободное место: ~10× размер исходного видео (покадровая выгрузка занимает много места).
- Данные для звонковой проверки: номер из договора/официального сайта, заранее согласованное кодовое слово.

```bash
ffprobe -version | head -n 1
exiftool -ver
python3 -c "import cv2, numpy; print(cv2.__version__)"
```

**Пример:** корректный вывод — три строки, например `ffprobe version ...`, `12.xx`, `4.x.x`. Если любая команда отвечает `command not found` — переходите в раздел «Возможные проблемы».

## Шаг 1. Соберите технические метаданные файла
**Что сделать:** сохраните подозрительное видео локально (не открывайте его из мессенджера по ссылке) и снимите паспорт файла.

```bash
mkdir -p ~/dfcheck && cd ~/dfcheck
cp <путь-к-файлу.mp4> ./sample.mp4
ffprobe -v error -show_entries format=format_name,duration,size,bit_rate -show_entries stream=codec_type,codec_name,width,height,r_frame_rate,sample_rate -of default=noprint_wrappers=1 ./sample.mp4 | tee probe.txt
exiftool ./sample.mp4 > meta.txt && cat meta.txt
```

**Зачем:** метаданные отвечают на два вопроса: чем файл собран (`Encoder`, `Handler`, `Software`) и совпадает ли частота кадров/аудио с типичным захватом с телефона. Видео, «пересобранное» генератором или конвертером, часто имеет ровную частоту кадров и стерильные теги. Это косвенный признак — сам по себе он ничего не доказывает.

**Как проверить:** откройте `probe.txt` — должны быть строки `codec_type=video` и `codec_type=audio`; в `meta.txt` ищите поля `Encoder`, `Create Date`, `Software`.

**Пример:** `r_frame_rate=25/1`, `codec_name=h264`, `Encoder= Lavf58.76.100` — файл прошёл через ffmpeg-пересборку. Запись прямо с телефона обычно несёт бренд-теги производителя; их отсутствие — повод для следующих шагов, но не приговор.

## Шаг 2. Проверьте артефакты генерации: покадровый анализ и синхрон звука
![Иллюстрация к разделу «Шаг 2. Проверьте артефакты генерации: покадровый анализ и синхрон звука»](https://ai-release.org/guides/img/kak-raspoznat-dipfeyk-v-video-i-zvonke-proverka-instrum-ru-2.jpg?v=1793003857)

**Что сделать:** выгрузите кадры в зоне рта/глаз и посчитайте подвижность этой зоны, параллельно найдите участки тишины в звуке.

```bash
ffmpeg -i ./sample.mp4 -vf "fps=10,crop=iw*0.4:ih*0.3:iw*0.3:ih*0.6" -q:v 2 ./frames/mouth_%04d.jpg
ffmpeg -i ./sample.mp4 -af "silencedetect=noise=-30dB:d=0.3" -f null - 2> silence.txt
grep -E "silence_(start|end)" silence.txt | head
```

```python
import cv2, csv, sys
path = sys.argv[1] if len(sys.argv) > 1 else "sample.mp4"
cap, prev, idx = cv2.VideoCapture(path), None, 0
fps = cap.get(cv2.CAP_PROP_FPS) or 25.0
rows = []
while True:
    ok, frame = cap.read()
    if not ok:
        break
    h, w = frame.shape[:2]
    mouth = cv2.cvtColor(frame[int(h*0.6):int(h*0.9), int(w*0.3):int(w*0.7)], cv2.COLOR_BGR2GRAY)
    mouth = cv2.resize(mouth, (160, 80)).astype("float32")
    if prev is not None:
        rows.append((idx, round(idx/fps, 3), round(float(abs(mouth - prev).mean()), 2)))
    prev, idx = mouth, idx + 1
cap.release()
with open("mouth_motion.csv", "w", newline="") as f:
    wr = csv.writer(f); wr.writerow(["frame", "t_sec", "mouth_diff"]); wr.writerows(rows)
print(f"frames={idx} fps={fps:.2f} rows={len(rows)}")
```

**Зачем:** генераторы видео чаще всего «плывут» в двух местах — мелкая мимика вокруг рта и рассинхрон губ со звуком. Скрипт даёт числовой ряд `mouth_diff`: резкие одиночные выбросы и «залипание» на нуле при громкой речи — сигнал посмотреть кадры глазами. `silencedetect` показывает интервалы тишины: если в эти секунды рот на видео активно двигается — вероятен рассинхрон.

**Как проверить:** скрипт печатает `frames=<N> fps=<F> rows=<N-1>` и создаёт `mouth_motion.csv`. В `silence.txt` строки вида `silence_start: 12.4`.

**Пример:** `frames=412 fps=25.00 rows=411`; далее `python3 -c "import csv;r=list(csv.DictReader(open('mouth_motion.csv')));print(max(float(x['mouth_diff']) for x in r))"` — сравните максимум со средним: единичный пик в 5–10 раз выше среднего на ровном фоне типичен для подмены лица.

**Почему это работает:** артефакты сжатия и мимики локальны, поэтому их видно именно в кропе лица; скрипт не «детектирует дипфейк», а подсвечивает участки для ручного просмотра. Как устроен синтез видео на уровне кадров, разобрано в гайде [Как создавать видео с помощью ИИ и Remotion](https://ai-release.org/guides/kak-sozdavat-video-s-pomoschyu-ii-i-remotion-gayd-po-av.html?utm_source=tg&utm_medium=channel&utm_campaign=guide_inline&utm_content=guide_to_guide).

## Шаг 3. Проверьте звонок по протоколу и вынесите решение
![Иллюстрация к разделу «Шаг 3. Проверьте звонок по протоколу и вынесите решение»](https://ai-release.org/guides/img/kak-raspoznat-dipfeyk-v-video-i-zvonke-proverka-instrum-ru-3.jpg?v=1793003870)

**Что сделать:** не спорьте с «руководителем» в звонке, а переведите разговор в проверяемую плоскость и заполните чек-лист.

- [ ] Прервать разговор и перезвонить по номеру из договора/официального сайта, а не по номеру входящего.
- [ ] Задать вопрос, ответ на который есть только у реального человека (внутренний проект, встреча из календаря).
- [ ] Попросить подвигать головой, поднести руку к лицу — на живом видео перекрытие лица рукой выглядит цельно.
- [ ] Попросить назвать кодовое слово, согласованное заранее.
- [ ] Проверить, что вас торопят: давление «срочно, никому не говори» — типовой признак схемы.
- [ ] Зафиксировать номер, время, реквизиты и передать в поддержку банка/безопасность компании.

**Зачем:** технический детектор даёт вероятность, а не доказательство; протокол «перезвони по известному номеру + кодовое слово» закрывает риск независимо от качества подделки и не требует инструментов.

**Как проверить:** результат — заполненный чек-лист с датой и хотя бы один факт, полученный по независимому каналу. Если перезвон подтвердил личность и кодовое слово совпало — инцидент закрыт; если нет — эскалация в безопасность.

| Признак | Где смотреть | Ложные срабатывания |
|---|---|---|
| Рассинхрон губ и звука | `silence.txt` + покадровый просмотр | плохая связь, буферизация записи |
| Стерильные метаданные | `meta.txt`, поле `Encoder` | любая пересылка через мессенджер |
| Скачки `mouth_diff` | `mouth_motion.csv` | резкая смена освещения, склейка кадра |

**Пример:** звонок «из бухгалтерии» с просьбой подтвердить перевод. Вы прерываете, звоните по номеру с сайта, кодовое слово не совпадает — платёж не подтверждён, номер передан в безопасность. Никаких инструментов, кроме телефона, не понадобилось.

## Возможные проблемы и решения
**Проблема. Утилита не найдена**
- Ошибка: `ffprobe: command not found`
- Причина: пакет не установлен или его каталог отсутствует в `PATH`.
- Решение: установите (`sudo apt install ffmpeg libimage-exiftool-perl` в Debian/Ubuntu; в macOS — пакетным менеджером, в Windows распакуйте архив и добавьте папку `bin` в `PATH`), затем `ffprobe -version`.

**Проблема. Python не видит OpenCV**
- Ошибка: `ModuleNotFoundError: No module named 'cv2'`
- Причина: пакет поставлен в другое окружение (системный Python против venv).
- Решение: `python3 -m venv .venv && source .venv/bin/activate && pip install opencv-python numpy`, затем повторите запуск скрипта.

**Проблема. ffmpeg отказывается читать файл**
- Ошибка: `Invalid data found when processing input`
- Причина: файл недокачан, это фрагмент потока или контейнер без индекса.
- Решение: проверьте размер (`ls -lh sample.mp4`) и перекачайте файл целиком; при необходимости переконвертируйте: `ffmpeg -i sample.mp4 -c copy sample_fixed.mp4`. Если ошибка повторяется — сверьтесь с документацией по конкретному контейнеру.

## Резюме и следующие шаги
Сначала снимайте метаданные и покадровые артефакты, затем закрывайте риск протоколом обратного звонка и кодового слова — это единственная проверка, не зависящая от качества подделки. Для бытовых задач, где нужны ИИ-инструменты без сложной настройки, смотрите подборку [ИИ-инструменты для обычных людей](https://ai-release.org/guides/ii-instrumenty-dlya-zhizni.html?utm_source=tg&utm_medium=channel&utm_campaign=guide_inline&utm_content=guide_to_guide).

## FAQ
**Можно ли определить дипфейк по морганию или по глазам?**
Раньше это был заметный признак, сейчас — слабая эвристика: современные модели воспроизводят мимику правдоподобно. Используйте покадровый просмотр как фильтр для отбора подозрительных участков, а не как доказательство.

**Работают ли онлайн-сервисы-детекторы дипфейков?**
Они дают оценку вероятности и часто ошибаются на сжатом видео из мессенджеров. Конкретные возможности и точность каждого сервиса сверьте с документацией — в этом гайде цифры не приводятся.

**Что делать, если «руководитель» требует срочный перевод по видео-звонку?**
Остановить разговор, перезвонить по номеру из внутреннего справочника, задать вопрос с ответом, известным только коллеге, и запросить кодовое слово. Платёж не подтверждать до независимого подтверждения.

**Как защитить родственников, которые верят любому звонку?**
Заведите семейное кодовое слово, договоритесь о правиле «любая просьба о деньгах — только после обратного звонка», и напишите это правило на бумаге рядом с телефоном.
