我尝试使用 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的测试程序源码和消息日志。
0