将FFMPEG帧写入png / jpeg文件

newAgeOfHelloWorld

我有AV_PIX_FMT_YUV420P AVFrame,我想将其写为PNG或JPEG文件,无论里面是什么格式(BGR,BGRA,RGB或RGBA)都没有关系。我试图将其另存为AV_PIX_FMT_YUV420P,但是我将3张图片合而为一,所以我需要先将其转换为RGB24。我通过以下方式做到这一点:

        int destW = decCtx->width;
        int destH = decCtx->height;

        AVFrame * resFrame = av_frame_alloc();
        resFrame->linesize[0] = destW * 3;
        resFrame->data[0] = (uint8_t*)malloc(resFrame->linesize[0] * destH);

        SwsContext * ctx = sws_getContext(decCtx->width,
                                          decCtx->height,
                                          AV_PIX_FMT_YUV420P,
                                          decCtx->width,
                                          decCtx->height,
                                          AV_PIX_FMT_RGB24,
                                          SWS_FAST_BILINEAR, 0, 0, 0);
        sws_scale(ctx, frame->data, frame->linesize, 0,
                  decCtx->height, resFrame->data, resFrame->linesize);
        sws_freeContext(ctx);
        int64_t pts = frame->pts;

        resFrame->format = AV_PIX_FMT_RGB24;
        resFrame->pts = pts;

看起来我的转换帧正确,但是现在编码器向我返回了一个大小为86的数据包,因此我的图像实际上是空白或接近它。我通过以下方式进行编码:

    encCodec = avcodec_find_encoder(AV_CODEC_ID_PNG);

    if (!encCodec) {
        return false;
    }

    encCtx = avcodec_alloc_context3(encCodec);
    if (!encCtx) {
        return false;
    }

    encCtx->bit_rate = decCtx->bit_rate;
    encCtx->codec_type = AVMEDIA_TYPE_VIDEO;
    encCtx->thread_count = 1;
    encCtx->width = decCtx->width;
    encCtx->height = decCtx->height;

    int fps = fmtc->streams[iVideoStream]->r_frame_rate.num / fmtc->streams[iVideoStream]->r_frame_rate.den;
    encCtx->time_base = (AVRational){1, fps};
    encCtx->framerate = (AVRational){fps, 1};

    encCtx->gop_size = decCtx->gop_size;
    encCtx->max_b_frames = decCtx->max_b_frames;
    encCtx->pix_fmt = AV_PIX_FMT_RGB24;

    int ret = avcodec_parameters_from_context(fmtc->streams[iVideoStream]->codecpar, encCtx);
    if (ret < 0) {
        return false;
    }

    ret = avcodec_open2(encCtx, encCodec,  nullptr);
    if (ret < 0) {
        return false;
    }

    ret = avcodec_send_frame(encCtx, source);
    if (ret < 0) {
        return false;
    }

    av_packet_unref(pkt);
    av_init_packet(pkt);

    ret = avcodec_receive_packet(encCtx, pkt);
    if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF)
        return false;
    else if (ret < 0) {
        return false;
    }

    if (ret >= 0)
    {
        FILE * outPng = fopen("./sample.png", "wb");
        fwrite(pkt->data, pkt->size, 1, outPng);
        fclose(outPng);
    }

将图像转换为RGB24或对其进行编码,我该怎么做?

newAgeOfHelloWorld

@parthlr在上面的讨论中提供了可接受的解决方案。但是,您也可以在他的介词下阅读我的评论。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将画布保存为PNG或JPEG文件

来自分类Dev

如何将.xcf文件/图像转换为JPEG或PNG?

来自分类Dev

如何将.xcf文件/图像转换为JPEG或PNG?

来自分类Dev

从HttpResponse将JPEG写入Java / Android中的文件

来自分类Dev

将NEF文件转换为JPEG

来自分类Dev

Android:将PNG ByteArray写入文件

来自分类Dev

解压缩文件,直到获得JPG,JPEG / PNG

来自分类Dev

ffmpeg jpeg流到webm仅创建具有一帧(快照)的文件.webm或空的.webm文件(mjpeg)

来自分类Dev

如何将JPEG注释添加到现有JPEG图像文件

来自分类Dev

将RGB PNG转换为CMYK JPEG(使用ICC色彩配置文件)

来自分类Dev

如何将HighCharts中的多个图表导出到一个文件(png,jpeg,pdf)

来自分类Dev

如何将HighCharts中的多个图表导出到一个文件(png,jpeg,pdf)

来自分类Dev

将区域(100x100px)写入大型文件,而无需读取目标jpeg

来自分类Dev

使用PIL(枕头)将TIF(通过exifread读取)中的EXIF数据写入JPEG文件

来自分类Dev

Exiftool:将元数据从文本文件批量写入JPEG

来自分类Dev

将区域(100x100px)写入大型文件,而无需读取目标jpeg

来自分类Dev

将多个图像文件从JPEG转换为PDF格式

来自分类Dev

如何从javascript请求将matplotlib图形保存到jpeg文件?

来自分类Dev

将 jpeg 文件作为无符号字符数组读取

来自分类Dev

我可以使用ffmpeg将JPEG输出到内存流而不是文件中吗?

来自分类Dev

Cordova / Phonegap如何将PNG文件写入文件系统?

来自分类Dev

将大熊猫数据帧分块写入CSV文件

来自分类Dev

将NA值为空白的数据帧写入csv文件

来自分类Dev

在给定路径下将数据帧写入excel文件

来自分类Dev

使用R将多个数据帧写入.csv文件

来自分类Dev

将数据帧写入文件时如何进行排序?

来自分类Dev

将NA值为空白的数据帧写入csv文件

来自分类Dev

Python-将数据帧写入csv文件

来自分类Dev

SVG文件中的image(jpeg和png)文件如何格式化?

Related 相关文章

  1. 1

    将画布保存为PNG或JPEG文件

  2. 2

    如何将.xcf文件/图像转换为JPEG或PNG?

  3. 3

    如何将.xcf文件/图像转换为JPEG或PNG?

  4. 4

    从HttpResponse将JPEG写入Java / Android中的文件

  5. 5

    将NEF文件转换为JPEG

  6. 6

    Android:将PNG ByteArray写入文件

  7. 7

    解压缩文件,直到获得JPG,JPEG / PNG

  8. 8

    ffmpeg jpeg流到webm仅创建具有一帧(快照)的文件.webm或空的.webm文件(mjpeg)

  9. 9

    如何将JPEG注释添加到现有JPEG图像文件

  10. 10

    将RGB PNG转换为CMYK JPEG(使用ICC色彩配置文件)

  11. 11

    如何将HighCharts中的多个图表导出到一个文件(png,jpeg,pdf)

  12. 12

    如何将HighCharts中的多个图表导出到一个文件(png,jpeg,pdf)

  13. 13

    将区域(100x100px)写入大型文件,而无需读取目标jpeg

  14. 14

    使用PIL(枕头)将TIF(通过exifread读取)中的EXIF数据写入JPEG文件

  15. 15

    Exiftool:将元数据从文本文件批量写入JPEG

  16. 16

    将区域(100x100px)写入大型文件,而无需读取目标jpeg

  17. 17

    将多个图像文件从JPEG转换为PDF格式

  18. 18

    如何从javascript请求将matplotlib图形保存到jpeg文件?

  19. 19

    将 jpeg 文件作为无符号字符数组读取

  20. 20

    我可以使用ffmpeg将JPEG输出到内存流而不是文件中吗?

  21. 21

    Cordova / Phonegap如何将PNG文件写入文件系统?

  22. 22

    将大熊猫数据帧分块写入CSV文件

  23. 23

    将NA值为空白的数据帧写入csv文件

  24. 24

    在给定路径下将数据帧写入excel文件

  25. 25

    使用R将多个数据帧写入.csv文件

  26. 26

    将数据帧写入文件时如何进行排序?

  27. 27

    将NA值为空白的数据帧写入csv文件

  28. 28

    Python-将数据帧写入csv文件

  29. 29

    SVG文件中的image(jpeg和png)文件如何格式化?

热门标签

归档