欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ffmpeg windows从内置摄像头采集数据写成yuv文件(最简单的)

程序员文章站 2022-07-02 09:24:27
...

列出设备

ffmpeg -list_devices true -f dshow -i dummy

ffmpeg windows从内置摄像头采集数据写成yuv文件(最简单的)
选用红框中的设备来采集,接着查看设备的参数

查看本机摄像头支持参数

ffmpeg -list_options true -f dshow -i video="Integrated Webcam"

ffmpeg windows从内置摄像头采集数据写成yuv文件(最简单的)
后边会根据红框的内容设置:

代码


void rec_cam()
{
    int nRet = 0;
    char errors[1024] = {};
    avdevice_register_all(); //注册输入设备
    //windows下指定摄像头信息
    AVInputFormat *pIptFmt=av_find_input_format("dshow");
    AVFormatContext *pFmtCtx = nullptr;
    const char* devName = "video=Integrated Webcam";
    AVDictionary *options = nullptr;
    av_dict_set(&options, "video_size", "640x480", 0);//根据红框中摄像头参数设置
    av_dict_set(&options, "framerate", "30", 0);//根据红框中摄像头参数设置
    av_dict_set(&options, "pixel_format", "yuyv422", 0);//根据红框中摄像头参数设置
    nRet = avformat_open_input(&pFmtCtx,devName,pIptFmt,&options);
    if(nRet < 0)
    {
        av_strerror(nRet, errors, 1024);
        fprintf(stderr, "Failed to open video device, [%d]%s\n", nRet, errors);
        printf("avformat_open_input fail");
    }
    FILE *pOutFile = fopen("D:/output/cam.yuv","wb+");
    AVPacket pkt;
    av_init_packet(&pkt);
    while(( 0 == av_read_frame(pFmtCtx, &pkt)) && 0 == nStopFlag)
    {
        fwrite(pkt.data, 1, pkt.size, pOutFile);
        fflush(pOutFile);
        av_packet_unref(&pkt);
    }
}
int mian()
{
	rec_cam();
}

在cmd中

ffplay -pix_fmt yuyv422 -s 640x480 D:\output\cam.yuv

播放成功!!!!!

相关标签: QT+FFMPEG