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 是一張用作 alpha 查找表的 256 像素灰階影像,根據每個來源像素的灰階值調節其 alpha255 為不透明;0 為透明。在 rgb_channel 擷取之後套用。

hint 是以下各項的邏輯 OR:

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 錄製的最終處理。錄製完成後必須呼叫一次,才能使檔案可供檢視。