NXP MCU 技术论坛
直播中

李继明

8年用户 1170经验值
私信 关注
[问答]

为什么无法使用OpneCV API获取mp4视频文件的总帧数?


我尝试使用 OpenCV API 获取视频文件的总帧数。
    cv::VideoCapture capture(video_path);
if (!capture.isOpened()){
throw \"Error when reading video\";
}
double frame_count = capture.get(cv::CAP_PROP_FRAME_COUNT);
double org_height = capture.get(cv::CAP_PROP_FRAME_HEIGHT);
double org_width = capture.get(cv::CAP_PROP_FRAME_WIDTH);
    capture.release();

std::cout << \"frame count = \" << frame_count << std::endl;
std::cout << \"height      = \" << org_height << std::endl;
std::cout << \"width       = \" << org_width << std::endl;
我只是在 iMX8MP-EVK 和 iMX8QXP-MEK 上试用 Linux BSP 5.15.71_2.2.0。
但是函数将返回错误状态(-1)。
root@imx8qxpc0mek:~/work/opencv/test_capture# g++ -O -g test_capture.cpp -l/usr/include/opencv4 -o test_capture -std=c++11 -lopencv_videoio root@imx8qxpc0mek:~/work/opencv
/ test_capture#./test_capture-video=bunny_480p.mp4
帧数=-1
高度=480
宽度=854
root@imx8qxpc0mek:~/work/opencv/test_capture#./test_capture-video=bunny_1080p.mp4
帧数=-1
高度= 1080
宽度 = 1920

在 HOST PC Linux 上,它将返回总帧数的正确值。
tte@evmhost20:~/imx-bsp-5.15.71/work/opencv/test_capture$ ./test_capture-video=bunny_480p.mp4 帧数 =
720
高度 = 480
宽度 = 854
tte@evmhost20:~/imx-bsp-5.15 .71/work/opencv/test_capture$ ./test_capture -video=bunny_1080p.mp4
帧数 = 1800
高度 = 1080
宽度 = 1920

这个文件解析器有问题吗?还是不是错误而是规范?
评估环境如下
开发板:MIMX8MPLUS-EVK LPDDR4、MIMX8QXP-C0-MEK
Linux BSP:L5.15.71_2.2.0
视频文件:URL  https://github.com/bower-media-samples
bunny_480p = https://github.com/bower-media-samples/big-buck-bunny-480p-30s
bunny_1080p =  https://github.com/bower-media-samples/big-buck-bunny-1080p-60fps-30s

主机:Ubuntu 20.04.2LTE x86-64
附件是MIMX6QXP-C0-MEK的测试程序源码和消息日志。

更多回帖

发帖
×
20
完善资料,
赚取积分