说明 FFmpeg3.4版本
我们提供的服务有:网站设计、成都网站制作、微信公众号开发、网站优化、网站认证、寿县ssl等。为近千家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的寿县网站制作公司bool SaveYUV420ToJPEG(const std::string &strFileName, int nWidth, int nHeight, int linesize, uint8_t * Y, uint8_t * U, uint8_t * V)
{
AVFormatContext* pFormatCtx;
AVCodecContext* pCodecCtx;
AVCodec* pCodec;
AVFrame* pFrame;
AVPacket pkt;
int nRet = 0;
avformat_alloc_output_context2(&pFormatCtx, NULL, NULL, strFileName.c_str());
AVStream* pVideoAVStream = avformat_new_stream(pFormatCtx, 0);
if (NULL == pVideoAVStream) return false;
pCodecCtx = avcodec_alloc_context3(NULL);
if (NULL == pCodecCtx) return false;
avcodec_parameters_to_context(pCodecCtx, pVideoAVStream->codecpar);
pCodecCtx->codec_id = pFormatCtx->oformat->video_codec;
pCodecCtx->codec_type = AVMEDIA_TYPE_VIDEO;
pCodecCtx->pix_fmt = AV_PIX_FMT_YUVJ420P;
pCodecCtx->width = nWidth;
pCodecCtx->height = nHeight;
pCodecCtx->time_base.num = 1;
pCodecCtx->time_base.den = 25;
pCodec = avcodec_find_encoder(pCodecCtx->codec_id);
if (NULL == pCodec) return false;
if (avcodec_open2(pCodecCtx, pCodec,NULL) < 0)
{
return false;
}
pFrame = av_frame_alloc();
int nJpegQuality = 80;
pCodecCtx->qcompress = (float)nJpegQuality/100.f; // 0~1.0, default is 0.5
pCodecCtx->qmin = 2;
pCodecCtx->qmax = 31;
pCodecCtx->max_qdiff = 3;
avformat_write_header(pFormatCtx,NULL);
av_new_packet(&pkt, pCodecCtx->width * pCodecCtx->height * 3);
pFrame->data[0] = Y;
pFrame->data[1] = U;
pFrame->data[2] = V;
pFrame->linesize[0] = linesize;
pFrame->linesize[1] = linesize/2;
pFrame->linesize[2] = linesize/2;
nRet = avcodec_send_frame(pCodecCtx, pFrame);
if (avcodec_receive_packet(pCodecCtx, &pkt) != 0) return false;
pkt.stream_index = 0;
nRet = av_write_frame(pFormatCtx, &pkt);
av_packet_unref(&pkt);
av_write_trailer(pFormatCtx);
avcodec_close(pCodecCtx);
avcodec_free_context(&pCodecCtx);
av_frame_free(&pFrame);
avio_close(pFormatCtx->pb);
avformat_free_context(pFormatCtx);
return true;
}
调用例子
SaveYUV420ToJPEG("fengyuzaitu.jpg", pFrame->width, pFrame->height, pFrame->linesize[0], pFrame->data[0], pFrame->data[1], pFrame->data[2]);
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。