답변

16

물론 VideoWriter 클래스를 사용할 수 있지만 H264 표준을 나타내는 the correct FourCC code을 사용해야합니다. FourCC는 미디어 파일에 사용되는 비디오 코덱, 압축 형식, 색상 또는 픽셀 형식의 식별자 인 4 문자 코드를 나타냅니다.

특히 VideoWriter 개체를 만들 때이를 구성 할 때 FourCC 코드를 지정합니다. ++ 난 당신이 C를 사용하고 있으리라 믿고있어 http://docs.opencv.org/trunk/modules/highgui/doc/reading_and_writing_images_and_video.html#videowriter-videowriter

을, 그래서 VideoWriter 생성자의 정의는 다음과 같습니다 : 자세한 내용은 OpenCV의 워드 프로세서를 참조

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

filename 비디오 파일의 출력, fourcc 사용하려는 코드의 FourCC 코드이며, fps은 원하는 프레임 속도이고, frameSize은 비디오의 원하는 크기이고, isColor은 비디오를 컬러로 표시할지 여부를 지정합니다. FourCC가 4 개의 문자를 사용하더라도 OpenCV는 FourCC를 구문 분석하고 올바른 비디오 형식을 파일에 쓸 수 있도록 조회로 사용되는 단일 정수 ID를 출력하는 유틸리티를 가지고 있습니다. CV_FOURCC 함수를 사용하고 4 개의 단일 문자를 지정합니다. 각 문자는 원하는 코덱의 FourCC 코드에있는 단일 문자에 해당합니다.

특히, 이런 식으로 부를 것이다 :

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

은 (순서대로) FOURCC에 속하는 각각의 문자로 X를 교체합니다. 위를 사용하는 경우

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

, 그것은 : 당신은 H264 표준을 원하기 때문에, 당신이 그렇게 같은 VideoWriter 개체를 만드는 것입니다 : 당신의 VideoWriter 객체를 선언 할 때

#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; 
} 

을 다른 방법으로, 당신은 단순히이 작업을 수행 할 수 open으로 전화 할 필요는 없으므로 프레임에 파일을 쓰는 작성기가 자동으로 열립니다.


H.264 컴퓨터에서 지원되는지 확실하지 않은 경우, FOURCC 코드로 -1를 지정하고 사용 가능한 비디오 코덱을 모두 표시하는 코드를 실행하면 창이 팝업해야 컴퓨터에 있습니다. 이 기능은 Windows에서만 작동합니다. -1을 지정하면 Linux 또는 Mac OS에서이 창이 열리지 않습니다. 즉 :

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

컴퓨터에 H.264가 없으면 가장 적합한 것을 선택할 수 있습니다. 완료되면 OpenCV는 VideoWriter 생성자에 입력 할 올바른 FourCC 코드를 작성하여 VideoWriter을 나타내는 VideoWriter 인스턴스를 가져 와서 해당 유형의 비디오를 파일에 쓸 것입니다.이 파일에 기록 frm에 저장 준비 프레임을 일단

, 당신은 할 수 있습니다 :

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 코드 목록이 있습니다. k를 선택하십시오. BTW, H2CC 표준에 대해 지정한 FourCC 코드는 실제로 'X','2','6','4'이므로 'H','2','6','4'이 작동하지 않으면 을 X으로 바꿉니다.

다른 작은 메모. Mac OS를 사용하는 경우 사용하고자하는 것은 'A','V','C','1' 또는 'M','P','4','V'입니다. 경험상, 'H','2','6','4' 또는 'X','2','6','4' FourCC 코드를 지정하려고하면 작동하지 않는 것 같습니다.

+0

나는 프로그램을 시험해 보았다. 처음으로 Fourcc 매개 변수를 -1로 사용하려고 시도했을 때 아무 창이 나타나지 않았습니다. 내가 언급 한대로 x264를 사용하려고했을 때 "코덱을 열 수 없습니다 : libx264"오류와 "ffmpeg 기본 설정이 깨졌습니다"와 같은 다른 오류가 발생했습니다 .. 어떻게해야합니까? BTW는 우분투를 사용합니다. 14.04 –

+1

즉, H264 라이브러리 .... 그것은 또 다른 게시물입니다. 내가 일하게되면, 나는 당신에게 링크를 줄 것이다. Btw -1은 Windows에서만 작동합니다. 그것도 언급하는 것을 잊었다. 죄송합니다. – rayryeng

+0

고맙습니다 .. h264 lib 설치를 할 때 알려주십시오. . 나는 꼭 알아야합니다 –