微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何确保 ffmpeg 库使用/不使用 GPU

如何解决如何确保 ffmpeg 库使用/不使用 GPU

我的库(Linux、Debian)使用 FFMpeg 库(avformat、avcodec、swscale 等)从网络摄像机读取视频流。实际上,我需要从网络摄像机中捕获每个视频帧,对其进行解码、缩放并存储在内存中,其他线程将这些数据传递给调用程序进行显示

问题是,所有这些都在 cpu 中运行并占用大量 cpu 资源。如何强制使用 GPU 加速器进行处理?

我有显卡:VGA 兼容控制器:Intel Corporation HD Graphics 620 (rev 02)

我的解码线程看起来像这样(我省略了声明、错误处理等,所以请不要查找语法错误:)))

fmt = avformat_alloc_context(); 
//initialising,setting option by av_dict_set
// finding video stream index
***
 // finding decoder and allocate its contexts

    frame = av_frame_alloc();

    while ( av_read_frame(ctx->fmt,&pkt) >= 0) 
    {
        AVPacket orig_pkt = pkt;

         avcodec_send_packet(ctx->dec_ctx,pkt);
         avcodec_receive_frame(ctx->dec_ctx,frame);
            *** 
// get buffer allocated for store of frame data
             buff = get_free_buffer(ctx);
        sws_scale(ctx->sws,(const uint8_t * const*)frame->data,frame->linesize,ctx->dec_ctx->height,buff->data,buff->linesize);
            ret = decode_packet(ctx,frame,&pkt,&got_frame);
            if (ret < 0)
                break;
            pkt.data += ret;
            pkt.size -= ret;
        }
        while (pkt.size > 0);

        av_packet_unref(&orig_pkt);
    }
*****  

解决方法

你可以在互联网上找到硬件加速的 ffmpeg 重新编码命令,我正在使用

ffmpeg -vaapi_device /dev/dri/renderD128 -i "inputfile" -vf format=nv12,hwupload -c:v h264_vaapi -f mp4 -qp 18 -map 0 "outputfile.mp4"

您可以使用命令 ffmpeg -hwaccels 通过命令 ls /dev/dri/DRI framework 路径列出硬件加速器,然后可以使用命令 ffmpeg -encoders 找到视频编解码器/编码器(上面示例中的 h264_vaapi) }. -f mp4 参数可能不是定义文件格式所必需的,-qp 设置质量(在这种情况下类似于原始文件),-map 0 将尝试使用输入文件的所有流,而不仅仅是最高质量的流,第一个/默认字幕...

另一方面,当我没有定义硬件加速器设备并使用默认编码器 libx264 时,我可以看到 CPU 已被最大化,因此可能没有使用硬件加速。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。