Video Utils¶
A class to store video information, including width, height, fps and total number of frames.
Attributes:
Name | Type | Description |
---|---|---|
width |
int
|
width of the video in pixels |
height |
int
|
height of the video in pixels |
fps |
int
|
frames per second of the video |
total_frames |
Optional[int]
|
total number of frames in the video, default is None |
Examples:
import supervision as sv
video_info = sv.VideoInfo.from_video_path(video_path=<SOURCE_VIDEO_FILE>)
video_info
# VideoInfo(width=3840, height=2160, fps=25, total_frames=538)
video_info.resolution_wh
# (3840, 2160)
Source code in supervision/utils/video.py
Context manager that saves video frames to a file using OpenCV.
Attributes:
Name | Type | Description |
---|---|---|
target_path |
str
|
The path to the output file where the video will be saved. |
video_info |
VideoInfo
|
Information about the video resolution, fps, and total frame count. |
codec |
str
|
FOURCC code for video format |
Example
import supervision as sv
video_info = sv.VideoInfo.from_video_path(<SOURCE_VIDEO_PATH>)
frames_generator = sv.get_video_frames_generator(<SOURCE_VIDEO_PATH>)
with sv.VideoSink(target_path=<TARGET_VIDEO_PATH>, video_info=video_info) as sink:
for frame in frames_generator:
sink.write_frame(frame=frame)
Source code in supervision/utils/video.py
A class for monitoring frames per second (FPS) to benchmark latency.
Source code in supervision/utils/video.py
Attributes¶
fps: float
property
¶
Computes and returns the average FPS based on the stored time stamps.
Returns:
Name | Type | Description |
---|---|---|
float |
float
|
The average FPS. Returns 0.0 if no time stamps are stored. |
Functions¶
__init__(sample_size=30)
¶
Parameters:
Name | Type | Description | Default |
---|---|---|---|
sample_size |
int
|
The maximum number of observations for latency benchmarking. |
30
|
Examples:
import supervision as sv
frames_generator = sv.get_video_frames_generator(source_path=<SOURCE_FILE_PATH>)
fps_monitor = sv.FPSMonitor()
for frame in frames_generator:
# your processing code here
fps_monitor.tick()
fps = fps_monitor.fps
Source code in supervision/utils/video.py
reset()
¶
Get a generator that yields the frames of the video.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
source_path |
str
|
The path of the video file. |
required |
stride |
int
|
Indicates the interval at which frames are returned, skipping stride - 1 frames between each. |
1
|
start |
int
|
Indicates the starting position from which video should generate frames |
0
|
end |
Optional[int]
|
Indicates the ending position at which video should stop generating frames. If None, video will be read to the end. |
None
|
iterative_seek |
bool
|
If True, the generator will seek to the
|
False
|
Returns:
Type | Description |
---|---|
Generator[ndarray, None, None]
|
A generator that yields the frames of the video. |
Examples:
import supervision as sv
for frame in sv.get_video_frames_generator(source_path=<SOURCE_VIDEO_PATH>):
...
Source code in supervision/utils/video.py
Process a video file by applying a callback function on each frame and saving the result to a target video file.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
source_path |
str
|
The path to the source video file. |
required |
target_path |
str
|
The path to the target video file. |
required |
callback |
Callable[[ndarray, int], ndarray]
|
A function that takes in a numpy ndarray representation of a video frame and an int index of the frame and returns a processed numpy ndarray representation of the frame. |
required |
Examples:
import supervision as sv
def callback(scene: np.ndarray, index: int) -> np.ndarray:
...
process_video(
source_path=<SOURCE_VIDEO_PATH>,
target_path=<TARGET_VIDEO_PATH>,
callback=callback
)