Basic access
from acvr import VideoReader
with VideoReader("/path/to/video.mp4") as reader:
frame = reader[100]
print(reader.frame_rate)
Iteration
from acvr import VideoReader
reader = VideoReader("/path/to/video.mp4")
for frame in reader:
# process frame
pass
reader.close()
Accurate timestamp reads
from acvr import VideoReader
reader = VideoReader("/path/to/video.mp4", build_index=True)
frame = reader.read_frame_at(1.25)
reader.close()
Fast scrubbing
from acvr import VideoReader
reader = VideoReader("/path/to/video.mp4", build_index=True)
keyframe = reader.read_keyframe_at(2.0, mode="nearest")
reader.close()
Selectable read modes
from acvr import VideoReader
reader = VideoReader("/path/to/video.mp4", build_index=True)
# Accurate frame by index
frame = reader.read_frame(index=120, mode="accurate")
# Fast approximation
frame = reader.read_frame(index=120, mode="fast")
# Fast keyframe scrubbing
frame = reader.read_frame(t_s=2.0, mode="scrub", keyframe_mode="nearest")
reader.close()
Benchmark guidance
Recent benchmarks on the bundled CFR/VFR test assets (M1-class laptop, PyAV 12.x):
| Mode | CFR fast (ms/frame) | CFR accuracy | VFR fast (ms/frame) | VFR accuracy |
|---|---|---|---|---|
| Accurate | ~89 | exact | ~88 | matches PyAV reference |
| Scrub (keyframes) | ~2 | very approximate | ~2 | very approximate |
| Fast (PyAV) | ~12 | matches OpenCV | ~12 | matches OpenCV |
Use fast for interactive frame inspection, accurate for exact frame data,
and scrub for very fast keyframe previews.