OpenCV unable to read AVI video files in python even though it can open and read metadata

8 hours ago 1
ARTICLE AD BOX

I am unable to use opencv cap.read() on .avi files since it crashes there. There seems to be some problem with fourcc since it returns 0.0 and cap.IsOpened returns true. The fps, width, height are returned correctly as well. I can play the .avi files without a problem using IINA and I cannot convert to any other video file format.

import cv2 video_path = '/Users/aravind/Downloads/test.avi' cap = cv2.VideoCapture(video_path) print(cap.get(cv2.CAP_PROP_FOURCC) print("FPS:", cap.get(cv2.CAP_PROP_FPS) print("Frame count:", cap.get(cv2.CAP_PROP_FRAME_COUNT)) print("Width:", cap.get(cv2.CAP_PROP_FRAME_WIDTH)) print("Height:", cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) while cap.isOpened(): print("Working here") ret, frame = cap.read() # crashes here

Running
ffprobe -v quiet -print_format json -show_streams /Users/aravind/Downloads/test.avi gives:

{ "streams": [ { "index": 0, "codec_name": "rawvideo", "codec_long_name": "raw video", "codec_type": "video", "codec_tag_string": "[0][0][0][0]", "codec_tag": "0x0000", "width": 192, "height": 192, "coded_width": 192, "coded_height": 192, "has_b_frames": 0, "pix_fmt": "bgr24", "level": -99, "r_frame_rate": "30/1", "avg_frame_rate": "30/1", "time_base": "1/30", "start_pts": 0, "start_time": "0.000000", "duration_ts": 60, "duration": "2.000000", "bit_rate": "26991946", "nb_frames": "60", "extradata_size": 9, "disposition": { "default": 0, "dub": 0, "original": 0, "comment": 0, "lyrics": 0, "karaoke": 0, "forced": 0, "hearing_impaired": 0, "visual_impaired": 0, "clean_effects": 0, "attached_pic": 0, "timed_thumbnails": 0, "non_diegetic": 0, "captions": 0, "descriptions": 0, "metadata": 0, "dependent": 0, "still_image": 0, "multilayer": 0 } } ] }

Running
ffmpeg -i /Users/aravind/Downloads/test.avi -vframes 1 /tmp/test_frame.png 2>&1
gives the below print and the expected first frame in /tmp/test_frame.png:

ffmpeg version 8.1 Copyright (c) 2000-2026 the FFmpeg developers built with Apple clang version 21.0.0 (clang-2100.0.123.102) configuration: --prefix=/opt/homebrew/Cellar/ffmpeg/8.1 --enable-shared --enable-pthreads --enable-version3 --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gpl --enable-libsvtav1 --enable-libopus --enable-libx264 --enable-libmp3lame --enable-libdav1d --enable-libvmaf --enable-libvpx --enable-libx265 --enable-openssl --enable-videotoolbox --enable-audiotoolbox --enable-neon libavutil 60. 26.100 / 60. 26.100 libavcodec 62. 28.100 / 62. 28.100 libavformat 62. 12.100 / 62. 12.100 libavdevice 62. 3.100 / 62. 3.100 libavfilter 11. 14.100 / 11. 14.100 libswscale 9. 5.100 / 9. 5.100 libswresample 6. 3.100 / 6. 3.100 Input #0, avi, from '/Users/aravind/Downloads/test.avi': Duration: 00:00:02.00, start: 0.000000, bitrate: 26813 kb/s Stream #0:0: Video: rawvideo, bgr24, 192x192, 26991 kb/s, 30 fps, 30 tbr, 30 tbn File '/tmp/test_frame.png' already exists. Overwrite? [y/N] y Stream mapping: Stream #0:0 -> #0:0 (rawvideo (native) -> png (native)) Press [q] to stop, [?] for help Output #0, image2, to '/tmp/test_frame.png': Metadata: encoder : Lavf62.12.100 Stream #0:0: Video: png, rgb24(pc, gbr/unknown/unknown, progressive), 192x192, q=2-31, 200 kb/s, 30 fps, 30 tbn Metadata: encoder : Lavc62.28.100 png [image2 @ 0xbe7018280] The specified filename '/tmp/test_frame.png' does not contain an image sequence pattern or a pattern is invalid. [image2 @ 0xbe7018280] Use a pattern such as %03d for an image sequence or use the -update option (with -frames:v 1 if needed) to write a single image. [out#0/image2 @ 0xbe6c54180] video:2KiB audio:0KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: unknown frame= 1 fps=0.0 q=-0.0 Lsize=N/A time=00:00:00.03 bitrate=N/A speed=7.15x elapsed=0:00:00.00
Read Entire Article