如何将编码的视频文件转换为原始视频格式 | OpenCV 读取原始文件
How to convert encoded video file to raw video format | OpenCV to read the raw file
如果有人能指导我,我将不胜感激:
1 - 如何将编码视频文件 (.mp4) 转换为 原始视频格式。
2 - 如何读取此原始视频的帧
OpenCV 库中的文件?
eg: To read the .mp4 I can use -
cv::VideoCapture cap("abc.mp4");
提前致谢。
我不确定这是否合理(因为涉及到文件大小),但它会满足您的要求。
# Generate sample movie with 250 frames of 640x480 pixels
ffmpeg -v warning -y -f lavfi -i testsrc=decimals=0:s=640x480:rate=25 -t 10 movie.mov
看起来像这样(除了由于 Whosebug 的限制,这是一个颜色和帧率有限的 GIF):
# Check number of frames is 250
ffprobe -v error -select_streams v:0 -show_entries stream=nb_frames -of default=nokey=1:noprint_wrappers=1 movie.mov
250
# Check size. It is 54kB
-rw-r--r-- 1 mark staff 54939 14 May 10:02 movie.mov
# Now make into raw BGR24 video
ffmpeg -v error -i movie.mov -pix_fmt bgr24 -f rawvideo -an -sn movie.bgr24
# Check size. It is now 230400 kB = 640x480 pixels of 3 bytes BGR at 25 fps for 10s
-rw-r--r-- 1 mark staff 230400000 14 May 10:11 movie.bgr24
现在您可以在 OpenCV 中读取它而无需进行任何视频解压缩。 C++ 不是我的强项,但这应该可以:
#include <vector>
#include <iostream>
#include <opencv2/opencv.hpp>
int
main(int argc,char*argv[])
{
std::ifstream file("movie.bgr24", std::ios::binary);
unsigned int i=0;
std::vector<unsigned char> buffer(640*480*3);
while(file.read((char *)&buffer[0],640*480*3)){
i++;
std::cout << "Frame: " << i << std::endl;
cv::Mat img(cv::Size(640,480),CV_8UC3,&buffer[0]);
cv::imshow ("RAW", img);
cv::waitKey(0);
}
}
如果有人能指导我,我将不胜感激:
1 - 如何将编码视频文件 (.mp4) 转换为 原始视频格式。
2 - 如何读取此原始视频的帧 OpenCV 库中的文件?
eg: To read the .mp4 I can use -
cv::VideoCapture cap("abc.mp4");
提前致谢。
我不确定这是否合理(因为涉及到文件大小),但它会满足您的要求。
# Generate sample movie with 250 frames of 640x480 pixels
ffmpeg -v warning -y -f lavfi -i testsrc=decimals=0:s=640x480:rate=25 -t 10 movie.mov
看起来像这样(除了由于 Whosebug 的限制,这是一个颜色和帧率有限的 GIF):
# Check number of frames is 250
ffprobe -v error -select_streams v:0 -show_entries stream=nb_frames -of default=nokey=1:noprint_wrappers=1 movie.mov
250
# Check size. It is 54kB
-rw-r--r-- 1 mark staff 54939 14 May 10:02 movie.mov
# Now make into raw BGR24 video
ffmpeg -v error -i movie.mov -pix_fmt bgr24 -f rawvideo -an -sn movie.bgr24
# Check size. It is now 230400 kB = 640x480 pixels of 3 bytes BGR at 25 fps for 10s
-rw-r--r-- 1 mark staff 230400000 14 May 10:11 movie.bgr24
现在您可以在 OpenCV 中读取它而无需进行任何视频解压缩。 C++ 不是我的强项,但这应该可以:
#include <vector>
#include <iostream>
#include <opencv2/opencv.hpp>
int
main(int argc,char*argv[])
{
std::ifstream file("movie.bgr24", std::ios::binary);
unsigned int i=0;
std::vector<unsigned char> buffer(640*480*3);
while(file.read((char *)&buffer[0],640*480*3)){
i++;
std::cout << "Frame: " << i << std::endl;
cv::Mat img(cv::Size(640,480),CV_8UC3,&buffer[0]);
cv::imshow ("RAW", img);
cv::waitKey(0);
}
}