嵌入式 获取I帧并存储且转换为jpg图片

原创 2013年12月05日 22:24:04

获取I帧并存储且转换为jpg图片

kj.sh

root@u12d32:/opt/qy_test/avserver# cat kj.sh 
#!/usr/local/env sh

gcc -o i_frame_to_jpg i_frame_to_jpg.c
./i_frame_to_jpg $1
ls


i_frame_to_jpg.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
    int i = 0;
    char cmd[128] = {0};
    if(argc != 2)
    {

	printf("%s %d The param must be two ,please !\n",__FUNCTION__,__LINE__);
	return -1;
    }
    for(i = 0; i <= atoi(argv[1]);i++)
    {
	memset(cmd,0,128);
	sprintf(cmd,"ffmpeg -i joseph_%dth_i_frame -y -ss 00:00:00 -vframes 1 joseph_%dth_jclient.jpg >/dev/null",i,i);
	printf("%s %d The sys has tranform %dth i_frame to %dth jclient jpg !\n",__FUNCTION__,__LINE__,i,i);
	system(cmd);
    }
    return 0;
}


 

get_i_frame_save_to_file

 

save_to_file_function



void ipnc_i_frame_save(char *i_buf_addr, int i_buf_size,int transfer_time_in)
{

	FILE *fp_video;
	char i_frame_name[32] = {0};
	memset(i_frame_name,0,32);
	sprintf(i_frame_name,"joseph_%dth_i_frame",transfer_time_in);
	printf("%s %d %s \n",__FUNCTION__,__LINE__,i_frame_name);
	fp_video = fopen(i_frame_name, "wb");

#if 1

	fwrite(i_buf_addr,i_buf_size,1,fp_video);
	fflush(fp_video);	
	fclose(fp_video);
#endif
	
}

get_i_frame_from_enc

    int sub_stream_i_frame_size = 0;
    int sub_stream_i_frame_times = 0;
    int sub_stream_i_frame_buf_size = 0;
    int sub_stream_i_frame_position = 0;
    char *sub_stream_i_frame_buf = NULL;
    if((i == 1) && (stStream.u32PackCount == 4))
    {

	sub_stream_i_frame_times++;
	sub_stream_i_frame_position = 0;
	sub_stream_i_frame_buf_size = 0;
	for (iv_temp = 0; iv_temp < stStream.u32PackCount; iv_temp++)
	    sub_stream_i_frame_buf_size+=stStream.pstPack[iv_temp].u32Len[0];

            sub_stream_i_frame_buf = (char *)malloc(sub_stream_i_frame_buf_size);

	    memset(sub_stream_i_frame_buf,0,sub_stream_i_frame_buf_size);
            for (iv_temp = 0; iv_temp< stStream.u32PackCount; iv_temp++)
	    {
	       memcpy(sub_stream_i_frame_buf+sub_stream_i_frame_position,stStream.pstPack[iv_temp].pu8Addr[0],stStream.pstPack[iv_temp].u32Len[0]);
	       sub_stream_i_frame_position += stStream.pstPack[iv_temp].u32Len[0];

	    }
	    ipnc_i_frame_save(sub_stream_i_frame_buf, sub_stream_i_frame_buf_size, sub_stream_i_frame_times);	

     }



 

相关文章推荐

I帧转图片(BMP、PPM、JPG)

 // 取得视频的首个I帧,并转换为图片 // 图片格式可以为BMP、PPM、JPG

I帧转图片(BMP、PPM、JPG)

// 使用ffmpeg取得视频的首个I帧,并转换为图片 // 图片格式可以为BMP、PPM、JPG // 头文件CGetFirstIFrameToPic.h [cpp] view plain...
  • wishfly
  • wishfly
  • 2015年08月05日 14:36
  • 1371

I帧转图片(BMP、PPM、JPG)

// 使用ffmpeg取得视频的首个I帧,并转换为图片 // 图片格式可以为BMP、PPM、JPG // 头文件CGetFirstIFrameToPic.h [cpp] view plain...
  • wishfly
  • wishfly
  • 2015年08月05日 14:36
  • 1371

嵌入式 ffmpeg把I帧转成jpg图片以及ffmpeg命令详解

在ubuntu12.04下执行下面的命令得到ffmpeg工具: sudo apt-get install libav-tools //转换视频文件所有的帧到jpg图像 ffmpeg -i /ro...
  • skdkjxy
  • skdkjxy
  • 2013年12月05日 20:42
  • 1798

嵌入式 H.264编码原理以及I帧B帧P帧

关键帧包含了显示帧需要的所有信息 所有的视频都至少包含一个关键帧,作为文件的第一个帧。其它的关键帧可用来改善视频的质量,不过它们也会增加文件大小。一般而言,每一秒视频至少需要使用 1 个关键帧。...

嵌入式 H.264编码原理以及I帧B帧P帧

关键帧包含了显示帧需要的所有信息 所有的视频都至少包含一个关键帧,作为文件的第一个帧。其它的关键帧可用来改善视频的质量,不过它们也会增加文件大小。一般而言,每一秒视频至少需要使用 1 个关键帧...
  • skdkjxy
  • skdkjxy
  • 2013年12月02日 14:50
  • 923

YUV420存储为BMP和JPG图片

网上大多数关于YUV420的资料都是关于YUV420P的,很少有YUV420SP的,因为YUV420SP的UV是交错存放的,处理起来相对麻烦点,但是YUV420SP也是一种常见格式,因此,在这里,我将...

嵌入式学习第四天(强制类型转换,运算符的优先级,为什么后置 I++的优先级比 前置++I高)

强制类型转换 int
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:嵌入式 获取I帧并存储且转换为jpg图片
举报原因:
原因补充:

(最多只允许输入30个字)