OpenCV에서 VideoWriter 클래스로 H.264 압축을 사용하여 비디오를 작성하려면 어떻게합니까? 기본적으로 웹캠에서 비디오를 가져 와서 캐릭터를 누른 후 저장하고 싶습니다. ouput 비디오 파일은 MPEG4 Part 2 압축을 사용할 때 엄청납니다.OpenCV에서 H.264 압축을 사용하여 비디오 파일 작성하기
답변
물론 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 코드를 지정하려고하면 작동하지 않는 것 같습니다.
나는 프로그램을 시험해 보았다. 처음으로 Fourcc 매개 변수를 -1로 사용하려고 시도했을 때 아무 창이 나타나지 않았습니다. 내가 언급 한대로 x264를 사용하려고했을 때 "코덱을 열 수 없습니다 : libx264"오류와 "ffmpeg 기본 설정이 깨졌습니다"와 같은 다른 오류가 발생했습니다 .. 어떻게해야합니까? BTW는 우분투를 사용합니다. 14.04 –
즉, H264 라이브러리 .... 그것은 또 다른 게시물입니다. 내가 일하게되면, 나는 당신에게 링크를 줄 것이다. Btw -1은 Windows에서만 작동합니다. 그것도 언급하는 것을 잊었다. 죄송합니다. – rayryeng
고맙습니다 .. h264 lib 설치를 할 때 알려주십시오. . 나는 꼭 알아야합니다 –