【发布时间】:2017-12-07 11:34:02
【问题描述】:
我尝试使用 OpenCV 来做到这一点:
std::string input_name = "<path to file>";
cv::VideoCapture cap(input_name);
if(!cap.isOpened()) printf("Invalid video\n");
但是,当我尝试传递 .txt 文件时,VideoCapture 会因未知原因成功读取它。当我尝试查找视频中的帧数时,
if(cap.get(cv::CV_CAP_PROP_FRAME_COUNT) == 0) printf("Invalid video\n");
每次执行时我都会得到不同数量的帧。我还尝试在文件中查找框架的宽度和高度,
cv::Mat Frame;
if(!cap.read(Frame)) printf("Cannot read frame\n");
else
{
printf("Frame width is %d\n", Frame.cols);
printf("Frame height is %d\n", Frame.rows);
}
它们的值分别是 640 和 400。为什么会这样?有没有办法检查给定文件是否是有效的视频文件,最好使用 OpenCV?
【问题讨论】:
-
为什么不能简单地检查扩展?
-
@ShawnMathew - 因为扩展会撒谎?它们只不过是一种快速找出文件处理程序应该查找哪些元数据的方法。尽管有错误的扩展名,一些玩家还是能弄清楚(他们只是抱怨)。
-
@ShawnMathew 如果找不到其他方法,我会这样做。只是想知道这是否可以使用 OpenCV 完成
-
你可以使用FFMPEG tecmint.com/…