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 是要复制的 image 感兴趣区域矩形元组 (x, y, w, h)。默认为整幅图像。

rgb_channel 是要从 RGB565 源图像中提取并以灰度渲染的 RGB 通道(0=R, 1=G, 2=B)。-1(默认)禁用通道提取。

alpha(0-255)控制将源图像混合到目标中的程度。255 为不透明;较低的值与黑色背景混合;0 产生一个黑帧。

color_palette 可以是颜色调色板枚举(例如 image.PALETTE_RAINBOW),也可以是一幅 256 像素的 RGB565 图像,用作源图像灰度值的颜色查找表。在 rgb_channel 提取之后应用。

alpha_palette 是一幅 256 像素的灰度图像,用作 alpha 查找表,根据每个源像素的灰度值调制其 alpha255 为不透明;0 为透明。在 rgb_channel 提取之后应用。

hint 是以下各项的逻辑或:

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 录制。录制完成后必须调用一次,以使文件可供查看。