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. Должен быть вызван по окончании записи, чтобы файл можно было просмотреть.