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 หากไม่ระบุจะใช้ความกว้างของ framebuffer หลัก

height คือความละเอียดแนวตั้งของไฟล์ MJPEG หากไม่ระบุจะใช้ความสูงของ framebuffer หลัก

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 คือ tuple สี่เหลี่ยม (x, y, w, h) ของ image ที่จะคัดลอก ค่าเริ่มต้นคือภาพทั้งหมด

rgb_channel คือช่อง RGB (0=R, 1=G, 2=B) ที่จะดึงออกจากภาพต้นฉบับ RGB565 และแสดงในระดับสีเทา -1 (ค่าเริ่มต้น) ปิดการดึงช่อง

alpha (0-255) ควบคุมสัดส่วนการผสมภาพต้นฉบับเข้ากับปลายทาง 255 คือทึบแสง ค่าที่ต่ำกว่าจะผสมกับพื้นหลังสีดำ 0 ได้เฟรมสีดำ

color_palette คือ enum ของ color palette (เช่น image.PALETTE_RAINBOW) หรือภาพ RGB565 ขนาด 256 พิกเซลที่ใช้เป็นตาราง color lookup บนค่าระดับสีเทาของภาพต้นฉบับ นำไปใช้หลังจากดึง rgb_channel

alpha_palette คือภาพระดับสีเทาขนาด 256 พิกเซลที่ใช้เป็นตาราง alpha lookup โดยปรับ alpha แต่ละพิกเซลต้นฉบับตามค่าระดับสีเทา 255 คือทึบแสง 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 ต้องเรียกหนึ่งครั้งเมื่อบันทึกเสร็จสมบูรณ์เพื่อให้ไฟล์เปิดได้