在OpenCV中使用H.264压缩编写视频文件 [英] Writing a video file using H.264 compression in OpenCV

查看:1893
本文介绍了在OpenCV中使用H.264压缩编写视频文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何使用OpenCV中的VideoWriter类使用H.264压缩编写视频?我基本上想从网络摄像头获取视频,并在按下字符后保存。使用MPEG4第2部分压缩时,输出视频文件非常大。

How do I write a video using H.264 compression with the VideoWriter class in OpenCV? I basically want to get a video from the webcam and save it after a character is pressed. The ouput video file is huge when using MPEG4 Part 2 compression.

推荐答案

您可以使用 VideoWriter 课程,但您需要使用代表H264标准的正确的FourCC代码 。 FourCC代表四字符代码,它是媒体文件中使用的视频编解码器,压缩格式,颜色或像素格式的标识符。

You can certainly use the VideoWriter class, but you need to use the correct FourCC code that represents the the H264 standard. FourCC stands for Four Character Code, which is an identifier for a video codec, compression format, colour or pixel format used in media files.

具体来说,当您创建 VideoWriter 对象,在构建时指定FourCC代码。有关详细信息,请参阅OpenCV文档: http:// docs .opencv.org / trunk / modules / highgui / doc / reading_and_writing_images_and_video.html#videowriter-videowriter

Specifically, when you create a VideoWriter object, you specify the FourCC code when constructing it. Consult the OpenCV docs for more details: http://docs.opencv.org/trunk/modules/highgui/doc/reading_and_writing_images_and_video.html#videowriter-videowriter

我假设您使用的是C ++,因此 VideoWriter 构造函数的定义是:

I'm assuming you're using C++, and so the definition of the VideoWriter constructor is:

VideoWriter::VideoWriter(const String& filename, int fourcc, 
                         double fps, Size frameSize, bool isColor=true)

filename 是视频文件的输出, fourcc 是您要使用的代码的FourCC代码, fps 是所需的帧速率, frameSize 是视频的所需尺寸, isColor 指定是否希望视频是彩色的。即使FourCC使用四个字符,OpenCV有一个实用程序,它解析FourCC并输出一个整数ID,用作查找,以便能够将正确的视频格式写入文件。您使用 CV_FOURCC 函数,并指定四个单个字符 - 每个对应于所需编解码器的FourCC代码中的单个字符。

filename is the output of the video file, fourcc is the FourCC code for the code you wish to use, fps is the desired frame rate, frameSize is the desired dimensions of the video, and isColor specifies whether or not you want the video to be in colour. Even though FourCC uses four characters, OpenCV has a utility that parses FourCC and outputs a single integer ID which is used as a lookup to be able to write the correct video format to file. You use the CV_FOURCC function, and specify four single characters - each corresponding to a single character in the FourCC code of the codec you want.

具体来说,你可以这样调用:

Specifically, you would call it like this:

int fourcc = CV_FOURCC('X', 'X', 'X', 'X');

用属于的每个字符替换 X FourCC(按顺序)。因为你想要H264标准,你会创建一个 VideoWriter 对象,如下:

Replace X with each character that belongs to the FourCC (in order). Because you want the H264 standard, you would create a VideoWriter object like so:

#include <iostream> // for standard I/O
#include <string>   // for strings

#include <opencv2/core/core.hpp>        // Basic OpenCV structures (cv::Mat)
#include <opencv2/highgui/highgui.hpp>  // Video write

using namespace std;
using namespace cv;

int main()
{
    VideoWriter outputVideo; // For writing the video

    int width = ...; // Declare width here
    int height = ...; // Declare height here
    Size S = Size(width, height); // Declare Size structure

    // Open up the video for writing
    const string filename = ...; // Declare name of file here

    // Declare FourCC code
    int fourcc = CV_FOURCC('H','2','6','4');

    // Declare FPS here
    int fps = ...;
    outputVideo.open(filename, fourcc, fps, S);

    // Put your processing code here
    // ...

    // Logic to write frames here... see below for more details
    // ...

    return 0;
}

或者,您可以在声明您的 VideoWriter object:

Alternatively, you could simply do this when declaring your VideoWriter object:

VideoWriter outputVideo(filename, fourcc, fps, S);

如果使用上述方法,则不需要调用 open ,因为这将自动打开写入框写入文件。

If you use the above, it's not required that you call open as this will automatically open up the writer for writing frames to file.

如果您不确定计算机是否支持H.264,请指定 1 作为FourCC代码,并且当您运行显示计算机上所有可用的视频编解码器的代码时,将弹出一个窗口。我想提一下,这只适用于Windows。当您指定 -1 时,Linux或Mac OS没有此窗口弹出。换句话说:

If you're not sure if H.264 is supported on your computer, specify -1 as the FourCC code, and a window should pop up when you run the code that displays all of the available video codecs that are on your computer. I'd like to mention that this only works for Windows. Linux or Mac OS doesn't have this window popping out when you specify -1. In other words:

VideoWriter outputVideo(filename, -1, fps, S);

您可以选择哪一个最适合您的计算机上不存在H.264。一旦完成,OpenCV将创建正确的FourCC代码输入到 VideoWriter 构造函数,以便您将获得一个VideoWriter实例代表 VideoWriter

You can choose which one is most suitable should H.264 not exist on your computer. Once that is done, OpenCV will create the right FourCC code to be input into the VideoWriter constructor so that you will get a VideoWriter instance that represents a VideoWriter that will write that type of video to file.

一旦你准备好了一帧,存储在 frm

Once you have a frame ready, stored in frm for writing to the file, you can do either:

outputVideo << frm; 

outputVideo.write(frm);






在OpenCV中读/写视频: http:// docs。 opencv.org/3.0-beta/doc/py_tutorials/py_gui/py_video_display/py_video_display.html - 然而,它是为Python编写的,但是有趣的是靠近链接的底部,有一个列表已知为每个操作系统工作的FourCC代码。 BTW,他们为H264标准指定的FourCC代码实际上是'X','2','6','4',因此如果 'H','2','6','4'无效,请将 H 替换为 X


As a bonus, here's a tutorial on how to read/write videos in OpenCV: http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_gui/py_video_display/py_video_display.html - However, it's written for Python, but what is good to know is near the bottom of the link, there is a list of FourCC codes that are known to work for each operating system. BTW, the FourCC code they specify for the H264 standard is actually 'X','2','6','4', so if 'H','2','6','4' doesn't work, replace H with X.

另一个小笔记。如果你使用Mac OS,那么你需要使用的是'A','V','C','1' M','P','4','V'。根据经验,'H','2','6','4''X','2','6' '4'尝试指定FourCC代码似乎不工作。

Another small note. If you are using Mac OS, then what you need to use is 'A','V','C','1' or 'M','P','4','V'. From experience, 'H','2','6','4'or 'X','2','6','4'when trying to specify the FourCC code doesn't seem to work.

这篇关于在OpenCV中使用H.264压缩编写视频文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆