58 lines
1.7 KiB
Python
58 lines
1.7 KiB
Python
"""Simple test to build a video from images in dumps/ using DumpManager."""
|
|
import os
|
|
import sys
|
|
import logging
|
|
from time import sleep
|
|
|
|
# Ensure package root is on sys.path so we can import local package
|
|
sys.path.insert(0, os.getcwd())
|
|
from VideoReceiverSFP.core.dump_manager import DumpManager
|
|
try:
|
|
from PIL import Image
|
|
except Exception:
|
|
Image = None
|
|
|
|
logging.basicConfig(level=logging.INFO, format='[%(levelname)s] %(message)s')
|
|
|
|
dumps_dir = os.path.join(os.getcwd(), 'dumps')
|
|
if not os.path.isdir(dumps_dir):
|
|
print('No dumps directory found at', dumps_dir)
|
|
raise SystemExit(1)
|
|
|
|
# collect image files
|
|
img_files = [os.path.join(dumps_dir, f) for f in sorted(os.listdir(dumps_dir)) if f.lower().endswith(('.png','.jpg','.jpeg','.bmp'))]
|
|
if not img_files:
|
|
print('No image files found in dumps to build test video')
|
|
raise SystemExit(1)
|
|
|
|
# open first image to get size
|
|
first = img_files[0]
|
|
if Image is None:
|
|
print('Pillow not available')
|
|
raise SystemExit(1)
|
|
|
|
img = Image.open(first).convert('RGB')
|
|
w, h = img.size
|
|
print('Using frame size', w, 'x', h, 'fps=20')
|
|
|
|
mgr = DumpManager(dumps_dir, keep_count=100)
|
|
started = mgr.start_video_record('mfd', w, h, fps=20)
|
|
if not started:
|
|
print('Failed to start video writer (OpenCV available?)')
|
|
raise SystemExit(1)
|
|
|
|
# write up to N frames
|
|
N = min(40, len(img_files))
|
|
for i, p in enumerate(img_files[:N]):
|
|
try:
|
|
frame = Image.open(p).convert('RGB')
|
|
mgr.write_video_frame(frame, 'mfd')
|
|
print(f'Wrote frame {i+1}/{N}: {p}')
|
|
except Exception as e:
|
|
print('Failed writing frame', p, e)
|
|
|
|
# allow writer to flush
|
|
sleep(0.5)
|
|
mgr.stop_video_record('mfd')
|
|
print('Video recording test completed; check dumps/ for output .avi')
|