다음 코드는 jpeg 이미지에서 mp4 비디오 파일을 만듭니다. 이미지 수가 GOP 크기보다 크면 인코딩 성공과 avcodec_encode_video2에서 반환 한 이미지 gotPacket이> 0입니다.GOP 크기보다 작은 이미지 개수 인 경우 ffmpeg로 인코딩하는 방법
이미지 수가 GOP 크기보다 작 으면 GET보다 작음 getPacket은 항상 = 0이므로 이미지를 쓰지 않습니다. 파일.
내 생각 엔 그 avcodec_encode_video2 전체되지 길이 버퍼가 GOP 크기로 동일하고 완전하지 않습니다 때까지 gotPacket 내 질문이 버퍼의 경우에도 인코딩 avcodec_encode_video2을 강제하는 방법입니다 0
될 것입니다 할당합니다입니다 ?
...
_outStream->codec.gop_size = 10;
_outStream->codec.keyint_min = 10;
...
AVFrame* frame = getFrame();
AVPacket packet;
av_init_packet(&packet);
packet.data = NULL;
packet.size = 0;
int gotPacket = 0;
if (avcodec_encode_video2(_outStream->codec, &packet, frame, &gotPacket) < 0)
throw std::runtime_error("failed to encode frame");
if (gotPacket)
{
...
if (av_write_frame(_outContainer.get(), &packet) < 0)
throw std::runtime_error("failed to write frame");
av_free_packet(&packet);
}