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()

class 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. Необхідно викликати один раз після завершення запису, щоб файл можна було переглянути.