ffmpeg/ffprobe, exiftool, Python 3 с пакетами opencv-python и numpy, браузер, второй телефон для контрольного звонка. Точные версии пакетов сверьте с документацией вашего дистрибутива — в гайде они не фиксируются.
ffmpeg, ffprobe, exiftool вызываются из PowerShell после добавления папки bin в PATH).ffmpeg, ffprobe, exiftool. Проверка — команды ниже должны вывести справку и код возврата 0.opencv-python, numpy.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 — переходите в раздел «Возможные проблемы».
Что сделать: сохраните подозрительное видео локально (не открывайте его из мессенджера по ссылке) и снимите паспорт файла.
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-пересборку. Запись прямо с телефона обычно несёт бренд-теги производителя; их отсутствие — повод для следующих шагов, но не приговор.

Что сделать: выгрузите кадры в зоне рта/глаз и посчитайте подвижность этой зоны, параллельно найдите участки тишины в звуке.
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
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.

Что сделать: не спорьте с «руководителем» в звонке, а переведите разговор в проверяемую плоскость и заполните чек-лист.
Зачем: технический детектор даёт вероятность, а не доказательство; протокол «перезвони по известному номеру + кодовое слово» закрывает риск независимо от качества подделки и не требует инструментов.
Как проверить: результат — заполненный чек-лист с датой и хотя бы один факт, полученный по независимому каналу. Если перезвон подтвердил личность и кодовое слово совпало — инцидент закрыт; если нет — эскалация в безопасность.
| Признак | Где смотреть | Ложные срабатывания |
|---|---|---|
| Рассинхрон губ и звука | `silence.txt` + покадровый просмотр | плохая связь, буферизация записи |
| Стерильные метаданные | `meta.txt`, поле `Encoder` | любая пересылка через мессенджер |
| Скачки `mouth_diff` | `mouth_motion.csv` | резкая смена освещения, склейка кадра |
Пример: звонок «из бухгалтерии» с просьбой подтвердить перевод. Вы прерываете, звоните по номеру с сайта, кодовое слово не совпадает — платёж не подтверждён, номер передан в безопасность. Никаких инструментов, кроме телефона, не понадобилось.
Проблема. Утилита не найдена
ffprobe: command not foundPATH.sudo apt install ffmpeg libimage-exiftool-perl в Debian/Ubuntu; в macOS — пакетным менеджером, в Windows распакуйте архив и добавьте папку bin в PATH), затем ffprobe -version.Проблема. Python не видит OpenCV
ModuleNotFoundError: No module named 'cv2'python3 -m venv .venv && source .venv/bin/activate && pip install opencv-python numpy, затем повторите запуск скрипта.Проблема. ffmpeg отказывается читать файл
Invalid data found when processing inputls -lh sample.mp4) и перекачайте файл целиком; при необходимости переконвертируйте: ffmpeg -i sample.mp4 -c copy sample_fixed.mp4. Если ошибка повторяется — сверьтесь с документацией по конкретному контейнеру.Сначала снимайте метаданные и покадровые артефакты, затем закрывайте риск протоколом обратного звонка и кодового слова — это единственная проверка, не зависящая от качества подделки. Для бытовых задач, где нужны ИИ-инструменты без сложной настройки, смотрите подборку ИИ-инструменты для обычных людей.
Можно ли определить дипфейк по морганию или по глазам?
Раньше это был заметный признак, сейчас — слабая эвристика: современные модели воспроизводят мимику правдоподобно. Используйте покадровый просмотр как фильтр для отбора подозрительных участков, а не как доказательство.
Работают ли онлайн-сервисы-детекторы дипфейков?
Они дают оценку вероятности и часто ошибаются на сжатом видео из мессенджеров. Конкретные возможности и точность каждого сервиса сверьте с документацией — в этом гайде цифры не приводятся.
Что делать, если «руководитель» требует срочный перевод по видео-звонку?
Остановить разговор, перезвонить по номеру из внутреннего справочника, задать вопрос с ответом, известным только коллеге, и запросить кодовое слово. Платёж не подтверждать до независимого подтверждения.
Как защитить родственников, которые верят любому звонку?
Заведите семейное кодовое слово, договоритесь о правиле «любая просьба о деньгах — только после обратного звонка», и напишите это правило на бумаге рядом с телефоном.