Загрузка данных


import cv2
import numpy as np

def mp4_to_mono_bin(input_video, output_bin, width=240, height=240, threshold=100, max_frames=60):
    """
    Конвертирует MP4/GIF в 1-битный бинарный файл (8 пикселей в 1 байт).
    - width, height: разрешение кадра (должно делиться на 8, например 240х240)
    - threshold: порог яркости (0-255). Всё, что ярче этого значения, становится белым (1)
    - max_frames: максимальное количество кадров
    """
    cap = cv2.VideoCapture(input_video)
    if not cap.isOpened():
        print(f"Ошибка: не удалось открыть видеофайл '{input_video}'")
        return

    frame_count = 0
    total_bytes = 0

    with open(output_bin, 'wb') as f:
        while cap.isOpened() and frame_count < max_frames:
            ret, frame = cap.read()
            if not ret:
                break

            # 1. Меняем размер кадра под экран (например, 240x240)
            resized = cv2.resize(frame, (width, height))

            # 2. Переводим цветное видео в оттенки серого
            gray = cv2.cvtColor(resized, cv2.COLOR_BGR2GRAY)

            # 3. Отсекаем всё темное: пиксели ярче threshold становятся 1 (белый), остальные 0 (черный)
            _, binary = cv2.threshold(gray, threshold, 1, cv2.THRESH_BINARY)

            # 4. Упаковываем каждые 8 пикселей (бит) в 1 байт
            packed_bytes = np.packbits(binary).tobytes()

            # 5. Записываем упакованный кадр в файл
            f.write(packed_bytes)
            frame_count += 1
            total_bytes += len(packed_bytes)

    cap.release()

    frame_size_kb = (width * height / 8) / 1024
    total_kb = total_bytes / 1024
    print("=" * 45)
    print(f" УСПЕШНО КОНВЕРТИРОВАНО!")
    print(f" Файл сохранён как: '{output_bin}'")
    print(f" Всего кадров: {frame_count}")
    print(f" Вес 1 кадра ({width}x{height}): {frame_size_kb:.1f} КБ")
    print(f" Полный вес файла: {total_kb:.1f} КБ ({total_kb/1024:.2f} МБ)")
    print("=" * 45)

# --- НАСТРОЙКА И ЗАПУСК ---
if __name__ == "__main__":
    mp4_to_mono_bin(
        input_video="lv_0_20261004093134.mp4",    # Имя твоего видео файла на компе
        output_bin="LOVE.bin", # Имя готового файла для ESP32
        width=240,                  # Ширина (например, 240 или 128)
        height=240,                 # Высота (например, 240 или 128)
        threshold=80,               # Порог яркости (если белый цвет тусклый, уменьши до 50)
        max_frames=90               # Ограничение по кадрам (на сколько кадров резать)
    )