mjpeg — запись mjpeg

Модуль mjpeg используется для записи mjpeg. Применяйте его для записи длинных видеоклипов в виде сжатых данных изображений. Для коротких клипов используйте gif.

Пример использования:

import csi
import mjpeg
import time

# Setup camera.
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.QVGA)
csi0.snapshot(time=2000)

# Create the mjpeg object.
m = mjpeg.Mjpeg("example.mjpeg")

# Record for 20 seconds.
start = time.ticks_ms()
while time.ticks_diff(time.ticks_ms(), start) < 20000:
    m.add_frame(csi0.snapshot())

# Finalize.
m.close()

класс Mjpeg – средство записи Mjpeg

class mjpeg.Mjpeg(path: str, width: int | None = None, height: int | None = None)

Создаёт объект Mjpeg, в который можно добавлять кадры.

path — это путь в файловой системе, по которому сохраняется запись mjpeg.

width — это горизонтальное разрешение файла mjpeg. Если не указано, по умолчанию используется ширина основного буфера кадра.

height — это вертикальное разрешение файла mjpeg. Если не указано, по умолчанию используется высота основного буфера кадра.

is_closed() bool

Возвращает True, если файл был закрыт. В закрытый файл нельзя записать больше данных.

width() int

Возвращает горизонтальное разрешение файла mjpeg.

height() int

Возвращает вертикальное разрешение файла mjpeg.

count() int

Возвращает количество кадров, записанных в файл mjpeg.

size() int

Возвращает размер файла mjpeg в байтах.

add_frame(image: image.Image, roi: Tuple[int, int, int, int] | None = None, rgb_channel: int = -1, alpha: int = 255, color_palette: image.Image | None = None, alpha_palette: image.Image | None = None, hint: int = 0, quality: int = 90) None

Добавляет image к записи mjpeg. Изображение автоматически масштабируется с сохранением соотношения сторон до разрешения, указанного при создании файла. Принимается любой формат изображения; этот метод при необходимости распаковывает, масштабирует/преобразует и заново сжимает.

roi — это кортеж прямоугольника области интереса (x, y, w, h) изображения image для копирования. По умолчанию используется всё изображение.

rgb_channel — это канал RGB (0=R, 1=G, 2=B), извлекаемый из исходного изображения RGB565 и отображаемый в оттенках серого. -1 (по умолчанию) отключает извлечение канала.

alpha (0-255) управляет тем, какая часть исходного изображения смешивается с целевым. 255 — непрозрачно; меньшие значения смешивают с чёрным фоном; 0 даёт чёрный кадр.

color_palette — это либо перечисление цветовой палитры (например, image.PALETTE_RAINBOW), либо изображение RGB565 размером 256 пикселей, используемое как таблица поиска цвета по значению оттенка серого исходного изображения. Применяется после извлечения rgb_channel.

alpha_palette — это изображение в оттенках серого размером 256 пикселей, используемое как таблица поиска альфа-значений, модулирующая alpha для каждого исходного пикселя на основе его значения оттенка серого. 255 — непрозрачно; 0 — прозрачно. Применяется после извлечения rgb_channel.

hint — это логическое ИЛИ из:

  • image.AREA: использовать масштабирование по площади при уменьшении.

  • image.BILINEAR: использовать билинейное масштабирование.

  • image.BICUBIC: использовать бикубическое масштабирование.

  • image.CENTER: центрировать изображение на целевом.

  • image.HMIRROR: отразить изображение по горизонтали.

  • image.VFLIP: отразить изображение по вертикали.

  • image.TRANSPOSE: транспонировать изображение (поменять местами x/y).

  • image.EXTRACT_RGB_CHANNEL_FIRST: применить rgb_channel до масштабирования.

  • image.APPLY_COLOR_PALETTE_FIRST: применить color_palette до масштабирования.

  • image.SCALE_ASPECT_KEEP: масштабировать так, чтобы поместиться внутри целевого.

  • image.SCALE_ASPECT_EXPAND: масштабировать так, чтобы заполнить целевое (с обрезкой).

  • image.SCALE_ASPECT_IGNORE: масштабировать так, чтобы заполнить целевое (с растяжением).

  • image.ROTATE_90: повернуть на 90 градусов (VFLIP | TRANSPOSE).

  • image.ROTATE_180: повернуть на 180 градусов (HMIRROR | VFLIP).

  • image.ROTATE_270: повернуть на 270 градусов (HMIRROR | TRANSPOSE).

quality (0-100) — это качество сжатия JPEG, используемое для исходных изображений не в формате JPEG.

write(image: image.Image, roi: Tuple[int, int, int, int] | None = None, rgb_channel: int = -1, alpha: int = 255, color_palette: image.Image | None = None, alpha_palette: image.Image | None = None, hint: int = 0, quality: int = 90) None

Псевдоним для Mjpeg.add_frame().

sync() None

Сбрасывает файл mjpeg на диск, оставляя его открытым для дальнейшей записи. Вызывайте периодически, чтобы обеспечить сохранение данных.

close() None

Завершает запись mjpeg. Должен быть вызван по окончании записи, чтобы файл можно было просмотреть.