def read_frames(path, res):
"""Read numpy arrays of video frames. Path is the file path
and res is the resolution as a tuple."""
args = [
"ffmpeg",
"-i",
path,
"-f",
"image2pipe",
"-pix_fmt",
"rgb24",
"-vcodec",
"rawvideo",
"-",
]
pipe = subprocess.Popen(
args,
stdout=subprocess.PIPE,
stderr=subprocess.DEVNULL,
bufsize=res[0] * res[1] * 3,
)
while pipe.poll() is None:
frame = pipe.stdout.read(res[0] * res[1] * 3)
if len(frame) > 0:
array = np.frombuffer(frame, dtype="uint8")
yield array.reshape((res[1], res[0], 3))