C++ 跳过和/或丢失H264视频中的编码图像?

C++ 跳过和/或丢失H264视频中的编码图像?,c++,ffmpeg,C++,Ffmpeg,我正在尝试将图像编码到H264 MP4视频中。我遇到的问题是,一些图像被跳过了,或者在视频的结尾处丢失了。我需要视频播放每一个我编码的图像,因为它是一个动画 任何帮助设置编码器正确将不胜感激 编码器设置: AVCodecContext *c; ... c->codec_id = AV_CODEC_ID_H264; c->bit_rate = mOutputWidth*mOutputHeight*4;//400000; /* Resolution must be a multiple

我正在尝试将图像编码到H264 MP4视频中。我遇到的问题是,一些图像被跳过了,或者在视频的结尾处丢失了。我需要视频播放每一个我编码的图像,因为它是一个动画

任何帮助设置编码器正确将不胜感激

编码器设置:

AVCodecContext *c;
...
c->codec_id = AV_CODEC_ID_H264;
c->bit_rate = mOutputWidth*mOutputHeight*4;//400000;
/* Resolution must be a multiple of two. */
c->width    = mOutputWidth;
c->height   = mOutputHeight;
    /* timebase: This is the fundamental unit of time (in seconds) in terms
     * of which frame timestamps are represented. For fixed-fps content,
     * timebase should be 1/framerate and timestamp increments should be
     * identical to 1. */
c->time_base.den = mFps;
c->time_base.num = 1;
c->gop_size      = 12; /* emit one intra frame every twelve frames at most */
c->pix_fmt       = AV_PIX_FMT_YUV420P;
...
av_dict_set(&pOptions, "preset", "medium", 0);
av_dict_set(&pOptions, "tune", "animation", 0);

/* open the codec */
ret = avcodec_open2(c, codec, &pOptions);
if (ret < 0) {
    LOGE("Could not open video codec: %s", av_err2str(ret));
    return -1;
}
AVCodecContext*c;
...
c->codec_id=AV_codec_id_H264;
c->bit_rate=mOutputWidth*moutputhweight*4//400000;
/*分辨率必须是2的倍数*/
c->width=mOutputWidth;
c->height=moutputhweight;
/*时基:这是时间的基本单位(秒)
*其中帧时间戳被表示。对于固定fps内容,
*时间基准应为1/帧速率,时间戳增量应为
*与1相同*/
c->time_base.den=mFps;
c->time_base.num=1;
c->gop_尺寸=12;/*最多每12帧发射一帧帧内图像*/
c->pix_fmt=AV_pix_fmt_YUV420P;
...
视听记录集(&P选项,“预设”、“中等”,0);
av录音集(&pOptions,“tune”,“animation”,0);
/*打开编解码器*/
ret=avcodec_open2(c、codec和pOptions);
如果(ret<0){
LOGE(“无法打开视频编解码器:%s”,av_err2str(ret));
返回-1;
}
2013年7月24日更新:

通过设置
gop_size=FPS
并反复写入最后一个视频帧
FPS+1
次似乎可以解决所有问题,我能够获得更好的视频。对我来说,这样做似乎很奇怪,但这可能是视频编码领域的标准吗?有关于这方面的反馈吗?

据我所知,你有一组图像,你想用它们制作视频。如果是这种情况,并且您不关心视频的大小,您可以尝试禁用帧间预测。编码器可能会发现一些图像不是必需的,并跳过它们


通过将
gop_size
设置为0,可以禁用帧间预测。

感谢您的回复。。。我试过寻找那个选项,但找不到/@Jona尝试将
gop_size
参数设置为0。这将禁用帧间预测。非常感谢您的提示!它确实解决了这个问题,但是我注意到了一些有趣的事情。1.文件大小增加了大约6倍。2.最后一帧没有编码?我可以很容易地在末尾添加一个虚拟帧来修复这个问题。3.编码看起来要花很长时间。Jona认为答案是乐观的。