c 从avi 视频中提取图片

avi 视频的视频流编码必须是jpeg,或者mjpg

直接用摄像头录取的视频都是这两种格式,不能用ffmpeg转成avi的视频。

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
static int zz=1;

int main(void){
	
	struct strf{
		unsigned char id[4];             //块ID,固定为strf
		unsigned int size;               //块大小,等于struct avi_strf_chunk去掉id和size的大小
		unsigned int size1;              //size1含义和值同size一样
		unsigned int width;              //视频主窗口宽度(单位:像素)
		unsigned int height;             //视频主窗口高度(单位:像素)
		unsigned short planes;           //始终为1
		unsigned short bitcount;         //每个像素占的位数,只能是1、4、8、16、24和32中的一个
		unsigned char compression[4];    //视频流编码格式,如JPEG、MJPG等
		unsigned int image_size;         //视频图像大小,等于width * height * bitcount / 8
		unsigned int x_pixels_per_meter; //显示设备的水平分辨率,设为0即可
		unsigned int y_pixels_per_meter; //显示设备的垂直分辨率,设为0即可
		unsigned int num_colors;         //含义不清楚,设为0即可
		unsigned int imp_colors;         //含义不清楚,设为0即可
	}str;
	FILE *f=fopen("/home/wzpc/Videos/tra_mjpg.avi","rb");            //必须是JPEG,MJPG格式的avi
	if(f==NULL){
		puts("file error");
		exit(-1);
	}
	fseek(f,0,SEEK_END);
	int fsize=ftell(f);
	fseek(f,0,SEEK_SET);
	
	int fd=fileno(f);
	char *m=mmap(NULL,fsize,PROT_READ,MAP_SHARED,fd,0);
	
	
	
	for(int t=0;t

 

 

你可能感兴趣的:(c语言,音视频,开发语言)