gpt4 book ai didi

c - 使用openCV在MAC上读/写avi视频

转载 作者:太空宇宙 更新时间:2023-11-03 22:06:32 24 4
gpt4 key购买 nike

我正在尝试读取 avi 视频并再次写入它,因为它在 MAC 10.6.8 上使用 openCV 2.4.0 没有任何变化

我的视频是灰度的,frame_rate = 25 和 Codec = 827737670,这是 FFV1(我猜)

问题是……当我按原样阅读和编写视频时......我看到了大小和颜色的许多变化......写了 3 或 4 次后,我可以看到视频开始变成(粉红色)颜色!!!

我不确定是什么问题!!!

这是我给感兴趣的人的代码

提前感谢您的帮助 :D

塞林

注意:我电脑上有FFMPEG V 0.11(不知道这个重要不重要)

{    

int main (int argc, char * const argv[]) {
char name[50];

if (argc==1)
{
printf("\nEnter the name of the video:");
scanf("%s",name);

} else if (argc == 2)
strcpy(name, argv[1]);

else
{
printf("To run this program you should enter the name of the program at least, or you can enter the name of the program then the file name");
return 0;
}

cvNamedWindow( "Read the video", CV_WINDOW_AUTOSIZE );

// GET video
CvCapture* capture = cvCreateFileCapture( name );
if (!capture )
{
printf( "Unable to read input video." );
return 0;
}

double fps = cvGetCaptureProperty( capture,CV_CAP_PROP_FPS);
printf( "fps %f ",fps );
int codec = cvGetCaptureProperty( capture,CV_CAP_PROP_FOURCC);
printf( "codec %d ",codec );
// Read frame
IplImage* frame = cvQueryFrame( capture );
// INIT the video writer
CvVideoWriter *writer = cvCreateVideoWriter( "x7.avi", codec, fps, cvGetSize(frame),1);
while(1)
{
cvWriteFrame( writer, frame );
cvShowImage( "Read the video", frame );
// READ next frame
frame = cvQueryFrame( capture );
if( !frame )
break;
char c = cvWaitKey(33);
if( c == 27 )
break;
}

// CLEAN everything
cvReleaseImage( &frame );
cvReleaseCapture( &capture );
cvReleaseVideoWriter( &writer );
cvDestroyWindow( "Read the video" );
return 0;}

}

最佳答案

检查这个list of fourcc codes ,然后搜索未压缩的,例如 HFYU

您可能还会发现这篇文章很有趣:Truly lossless video recording with OpenCV .

编辑:

我有一台 Mac OS X 10.7.5 可供使用,由于您给了我们测试视频,我决定分享我的发现。

我出于测试目的编写了以下源代码:它加载您的视频文件并将其写入新文件out.avi,同时保留编解码器信息:

#include <cv.h>
#include <highgui.h>

#include <iostream>

int main(int argc, char* argv[])
{
// Load input video
cv::VideoCapture input_cap(argv[1]);
if (!input_cap.isOpened())
{
std::cout << "!!! Input video could not be opened" << std::endl;
return -1;
}

// Setup output video
cv::VideoWriter output_cap("out.avi",
input_cap.get(CV_CAP_PROP_FOURCC),
input_cap.get(CV_CAP_PROP_FPS),
cv::Size(input_cap.get(CV_CAP_PROP_FRAME_WIDTH), input_cap.get(CV_CAP_PROP_FRAME_HEIGHT)));
if (!output_cap.isOpened())
{
std::cout << "!!! Output video could not be opened" << std::endl;
return -1;
}

// Loop to read from input and write to output
cv::Mat frame;
while (true)
{
if (!input_cap.read(frame))
break;

output_cap.write(frame);
}

input_cap.release();
output_cap.release();

return 0;
}

输出视频呈现出与输入相同的特征:

  • 编解码器:FFMpeg 视频 1 (FFV1)
  • 分辨率:720x480
  • 帧率:25
  • 解码格式:Planar 4:2:0 YUV

播放时看起来还不错。

我正在使用 OpenCV 2.4.3。

关于c - 使用openCV在MAC上读/写avi视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14756767/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com