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