VideoWriter

class VideoWriter(output_path='output.avi', fps=30, color=True, codec='MJPG', chunk_duration_s=None)

Save a video clip to a file.

VideoWriter can be instantiated as a context manager:

with edgeiq.VideoWriter('/path/to/output/video.avi') as video_writer:
    ...

To use VideoWriter directly, make sure to call close() when usage is complete:

video_writer = edgeiq.VideoWriter('/path/to/output/video.avi')
...
video_writer.close()

Typical usage:

with edgeiq.VideoWriter('/path/to/output/video.avi') as video_writer:
    while True:
        <read and process frame>
        video_writer.write_frame(frame)
Parameters
  • output_path (str) – The path to save the video file at.

  • fps (int) – The number of frames per second to save.

  • color (bool) – If True, save the video in color.

  • codec (str) – The video codec to use for saving the video clip.

  • chunk_duration_s (Optional[int]) – Duration in secs of video chunks, or disabled if None.

write_frame(frame)

Save the frame to the video clip.

Parameters

frame (ndarray) – The video frame to save.

close()

Finish creating the video clip.

class EventVideoWriterState(value)

States of the EventVideoWriter

IDLE = 'Idle'
RECORDING = 'Recording'
POST_ROLL = 'Post-roll'
class EventVideoWriter(pre_roll=150, post_roll=150, fps=30, color=True, codec='MJPG')

Save a segment of a video stream based upon an event trigger.

EventVideoWriter can be instantiated as a context manager:

with edgeiq.EventVideoWriter() as video_writer:
    ...

To use EventVideoWriter directly, make sure to call close() when usage is complete:

video_writer = edgeiq.EventVideoWriter()
...
video_writer.close()

Typical usage:

def video_writer_callback(event_name):
    print('Event {} has completed'.format(event_name))


with edgeiq.EventVideoWriter() as video_writer:
    while True:
        <read and process frame>
        ...
        video_writer.update(frame)

        if event_started:
            video_writer.start_event(
                '/path/to/output/video.avi', video_writer_callback, 'Event 1')

        if event_ended:
            video_writer.finish_event()
Parameters
  • pre_roll (int) – The number of frames to capture preceding the event trigger.

  • post_roll (int) – The number of frames to capture after the event completes.

  • fps (int) – The number of frames per second to save.

  • color (bool) – If True, save the video with color.

  • codec (str) – The video codec to use for saving the video clip.

property state

The current recording state.

Return type

EventVideoWriterState

update(frame)

Provide a frame to be written to the video file if recording.

Parameters

frame (ndarray) – The frame to save.

start_event(output_path, callback_function=None, callback_args=())

Start a video clip recording.

Parameters
  • output_path (str) – The path to save the video.

  • callback_function (Optional[Callable[…, None]]) – A function to be called upon completing this video write. When set to None no callback is called. Actions in callback_function must be thread-safe.

  • callback_args (tuple) – Arguments to be passed to the callback function. Arguments must be thread-safe.

finish_event()

Finish a recording for an event. Note that recording continues for post_roll frames.

close()

Close the EventVideoWriter.

If a video recording is ongoing, it will be stopped and the recording will be saved.

class GStreamerCustomVideoWriter(cmd, fps=30, color=True)

Send video frames with a custom GStreamer pipeline.

GStreamerCustomVideoWriter can be instantiated as a context manager:

with edgeiq.GStreamerCustomVideoWriter() as video_writer:
    ...

When using GStreamerCustomVideoWriter directly, use the close() function when usage is complete:

video_writer = edgeiq.GStreamerCustomVideoWriter()
...
video_writer.close()

Typical usage:

# Send an MJPG encoded UDP stream
cmd = ' ! '.join([
        'appsrc',
        'videoconvert',
        'video/x-raw,format=YUY2',
        'jpegenc',
        'rtpjpegpay',
        'udpsink host=127.0.0.1 port=5000'
        ])
with edgeiq.GStreamerCustomVideoWriter(cmd) as video_writer:
    while True:
        ...  # Get and process frame
        video_writer.write_frame(frame)

To capture the stream, run this command on the destination device:

gst-launch-1.0 udpsrc port=5000 ! application/x-rtp,encoding-name=JPEG,payload=26 ! rtpjpegdepay ! jpegdec ! autovideosink
Parameters
  • fps (int) – The number of frames per second to save.

  • color (bool) – If True, write the video with color.

write_frame(frame)

Send the frame to the destination.

Parameters

frame (ndarray) – The video frame to send.

close()

Close the UDP video stream.