From 80d32a75dec5c9e2339b61fbabfa253789710f6c Mon Sep 17 00:00:00 2001 From: Don Restarone <35935196+donrestarone@users.noreply.github.com> Date: Sat, 1 Mar 2025 14:11:17 -0500 Subject: [PATCH 1/5] Update vilib.py - to include flag that allows simultaneous recording --- vilib/vilib.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/vilib/vilib.py b/vilib/vilib.py index a36c592..7169ddb 100644 --- a/vilib/vilib.py +++ b/vilib/vilib.py @@ -247,9 +247,13 @@ def camera(): preview_config.queue = True # preview_config.raw = {'size': (2304, 1296)} preview_config.controls = {'FrameRate': 60} # change picam2.capture_array() takes time - + try: picam2.start() + if Vilib.record_av: + encoder = H264Encoder(10000000) + output = FfmpegOutput('test.mp4', audio=True) + picam2.start_recording(encoder, output) except Exception as e: print(f"\033[38;5;1mError:\033[0m\n{e}") print("\nPlease check whether the camera is connected well" +\ @@ -341,16 +345,19 @@ def camera(): print(e) finally: print('camera close') + if Vilib.record_av: + picam2.stop_recording() picam2.close() cv2.destroyAllWindows() @staticmethod - def camera_start(vflip=False, hflip=False, size=None): + def camera_start(vflip=False, hflip=False, size=None, record_av=False): if size is not None: Vilib.camera_size = size Vilib.camera_hflip = hflip Vilib.camera_vflip = vflip Vilib.camera_run = True + Vilib.record_av = record_av Vilib.camera_thread = threading.Thread(target=Vilib.camera, name="vilib") Vilib.camera_thread.daemon = False Vilib.camera_thread.start() From 46b0b2868e6df51cb9bc1a0737bdfa7fdc507b8d Mon Sep 17 00:00:00 2001 From: Don Restarone <35935196+donrestarone@users.noreply.github.com> Date: Sat, 1 Mar 2025 14:17:12 -0500 Subject: [PATCH 2/5] Update vilib.py debug - add imports --- vilib/vilib.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/vilib/vilib.py b/vilib/vilib.py index 7169ddb..f93c4ff 100644 --- a/vilib/vilib.py +++ b/vilib/vilib.py @@ -16,6 +16,8 @@ # set libcamera2 log level os.environ['LIBCAMERA_LOG_LEVELS'] = '*:ERROR' from picamera2 import Picamera2 +from picamera2.encoders import H264Encoder +from picamera2.outputs import FfmpegOutput import libcamera import cv2 From a508d9e60c4598cdc675172220fdc3b475d82a73 Mon Sep 17 00:00:00 2001 From: Don Restarone <35935196+donrestarone@users.noreply.github.com> Date: Sat, 1 Mar 2025 14:25:40 -0500 Subject: [PATCH 3/5] debug - default: No such process --- vilib/vilib.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/vilib/vilib.py b/vilib/vilib.py index f93c4ff..8d4355c 100644 --- a/vilib/vilib.py +++ b/vilib/vilib.py @@ -251,11 +251,12 @@ def camera(): preview_config.controls = {'FrameRate': 60} # change picam2.capture_array() takes time try: - picam2.start() if Vilib.record_av: encoder = H264Encoder(10000000) output = FfmpegOutput('test.mp4', audio=True) - picam2.start_recording(encoder, output) + picam2.start_and_record_video(encoder, output) + else: + picam2.start() except Exception as e: print(f"\033[38;5;1mError:\033[0m\n{e}") print("\nPlease check whether the camera is connected well" +\ From 649958ea0f325a81c59353502cf74500167be907 Mon Sep 17 00:00:00 2001 From: Don Restarone <35935196+donrestarone@users.noreply.github.com> Date: Sat, 1 Mar 2025 14:31:14 -0500 Subject: [PATCH 4/5] debug - FfmpegOutput.start() got an unexpected keyword argument 'quality' --- vilib/vilib.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/vilib/vilib.py b/vilib/vilib.py index 8d4355c..bc133fa 100644 --- a/vilib/vilib.py +++ b/vilib/vilib.py @@ -252,6 +252,8 @@ def camera(): try: if Vilib.record_av: + video_config = picam2.create_video_configuration() + picam2.configure(video_config) encoder = H264Encoder(10000000) output = FfmpegOutput('test.mp4', audio=True) picam2.start_and_record_video(encoder, output) From ecb3a03f1c58558bc7bfecf0b8e8fbf713e43128 Mon Sep 17 00:00:00 2001 From: Don Restarone <35935196+donrestarone@users.noreply.github.com> Date: Sat, 1 Mar 2025 14:55:23 -0500 Subject: [PATCH 5/5] try using ffmpeg stdin --- vilib/vilib.py | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/vilib/vilib.py b/vilib/vilib.py index bc133fa..77f89e7 100644 --- a/vilib/vilib.py +++ b/vilib/vilib.py @@ -16,9 +16,9 @@ # set libcamera2 log level os.environ['LIBCAMERA_LOG_LEVELS'] = '*:ERROR' from picamera2 import Picamera2 -from picamera2.encoders import H264Encoder -from picamera2.outputs import FfmpegOutput + import libcamera +import subprocess import cv2 import numpy as np @@ -252,11 +252,8 @@ def camera(): try: if Vilib.record_av: - video_config = picam2.create_video_configuration() - picam2.configure(video_config) - encoder = H264Encoder(10000000) - output = FfmpegOutput('test.mp4', audio=True) - picam2.start_and_record_video(encoder, output) + ffmpeg = subprocess.Popen(['ffmpeg', '-i', '-', '-vcodec', 'copy', '-an', 'test.mpg',], stdin=subprocess.PIPE) + picam2.start_recording(ffmpeg.stdin, format='h264', bitrate=2000000) else: picam2.start() except Exception as e: