将某一个视频文件的每一帧都拆分出来保存成一个独立的文件,如果需要修改I帧,则可以通过FFmpeg修改文件的GOP大小,命令行如下:
ffmpeg -i video.mp4 -g 10 gop10.mp4
再提取之前需要先做一件事,那就是需要将视频文件改为ES流:
ffmpeg -i gop10.mp4 -vcodec copy -an -f rawvideo -vbsf h264_mp4toannexb es.raw
这个时候就可以用代码将文件拆分出来了,代码如下:(我用的是海思的算法)
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
int GetVideoFrame(FILE *fp, char **pBuf, int &nBufLen)
{
bool bLoopSend = false;
bool bFindStart = false;
bool bFindEnd = false;
long s32UsedBytes = 0;
long iStart = 0;
char *pu8Addr = NULL;
int i = 0;
int MaxCount = 1024 * 512;
static long framePos = 0;
int frameLen = 0;
if (fp == NULL)
{
return -2;
}
char *pu8Buf = (char *)malloc(MaxCount);
if (pu8Buf == NULL)
{
free(pu8Buf);
pu8Buf &#