I want to read a video file and save the frames in python list, something similar like buffer read. I do not want to use opencv (cv2.VideoCapture) or any other library to read the video file. Any lead how can I do it?
Thanks in advance.
I want to read a video file and save the frames in python list, something similar like buffer read. I do not want to use opencv (cv2.VideoCapture) or any other library to read the video file. Any lead how can I do it?
Thanks in advance.
You can use the subprocess module and call ffmpeg
. You can use ffmpeg to read and write a huge amount of different video formats.
If you want a more ergonomic interface, you can also use ffmpeg bindings for Python (for example, ffmpeg-python).
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))