我正在尝试将图像编码为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;
}
更新07/24/13:
通过设置gop_size=FPS
并重复编写最后一个视频帧FPS+1
次,我能够获得更好的视频,似乎可以解决所有问题。对我而言,这样做似乎很奇怪,但可能是视频编码领域的标准问题?有关此问题的任何提示反馈?
答案 0 :(得分:1)
根据我的理解,你有一组图像,你想用它们制作一个视频。如果是这种情况并且您不关心视频的大小,则可以尝试禁用帧间预测。也许编码器发现某些图像不是必需的并且会跳过它们。
可以通过将gop_size
设置为0来禁用帧间预测。