如何在MATLAB中从网络摄像头录制视频?

如何在MATLAB中从网络摄像头录制视频?,matlab,video,webcam,video-recording,Matlab,Video,Webcam,Video Recording,我想知道如何用我的网络摄像头在MATLAB中录制视频。透露了以下内容: 注意:由于一些较旧的功能已被取代和删除,因此该功能现在已更新,可与较新版本的MATLAB一起使用 如果你已经知道怎么做了,那就只需要把图像拼接成一部电影。您可以使用打开电影文件,然后使用该方法添加连续图像。例如: aviObject = VideoWriter('myVideo.avi'); % Create a new AVI file for iImage = 1:100

我想知道如何用我的网络摄像头在MATLAB中录制视频。

透露了以下内容:

  • 注意:由于一些较旧的功能已被取代和删除,因此该功能现在已更新,可与较新版本的MATLAB一起使用

    如果你已经知道怎么做了,那就只需要把图像拼接成一部电影。您可以使用打开电影文件,然后使用该方法添加连续图像。例如:

    aviObject = VideoWriter('myVideo.avi');  % Create a new AVI file
    for iImage = 1:100                       % Capture 100 frames
      % ...
      % You would capture a single image I from your webcam here
      % ...
      writeVideo(aviObject, I);  % Add the image to the AVI file
    end
    close(aviObject);  % Close the AVI file
    

    我刚刚使用了for循环作为一个简单的示例,但是如果您想捕获图像并定期将其添加到AVI文件中,您可能需要使用for循环。

    在这里您可以看到如何从网络摄像头捕获和处理图像的精彩视频,因此录制应该不难:


    在我的大学生活中,我把这个项目命名为


    在这方面,我做了录音和录像,并在matlab编程播放。您可以从下载源代码,首先构建视频输入接口

    vid = videoinput('winvideo',1,'RGB24_400x300');
    
    您需要调整网络摄像头的最后一位。要查找网络摄像头设备(以及其他设备)列表,请使用:

    以下内容使第一个网络摄像头成为一个对象

    a=imaqhwinfo('winvideo',1)
    
    使用查找支持的视频格式列表

    a.SupportedFormats
    
    然后,您将需要确定帧速率(更多信息):

    该属性指定从视频流存储帧的频率。例如,如果我们将其设置为5,则只保留5帧中的1帧,其他4帧将被丢弃。使用帧速率,确定获取帧的频率

    set(vid,'FrameGrabInterval',10);
    
    要确定总共要采集多少帧,请计算以设备帧速率采集的总帧数,然后除以FrameGrabInterval

    capturetime = 30;
    interval = get(vid,'FrameGrabInterval');
    numframes = floor(capturetime * framerate / interval)
    
    您现在可以使用
    getdata
    命令录制和播放视频了(
    peekdata
    也很有用),但是

    如果将获取大量帧,则更实际的做法是将图像记录到磁盘而不是内存中。使用图像采集工具箱,可以将图像直接记录到AVI文件中。我们使用LoggingMode属性对此进行配置

    set(vid,'LoggingMode','disk');
    
    使用avifile命令创建要登录的AVI文件对象。我们必须指定要使用的文件名,以及播放AVI文件的帧速率。然后,将视频输入对象的DiskLogger属性设置为AVI文件

    avi = avifile('timelapsevideo','fps',framerate);
    set(vid,'DiskLogger',avi);
    
    启动延时采集,并等待采集完成。请注意,图像采集工具箱在采集时不会占用MATLAB®。您可以开始采集并在MATLAB中继续工作

    start(vid);
    wait(vid,Inf); % Wait for the capture to complete before continuing.
    
    捕获完成后,检索AVI文件对象,并使用close函数释放与其关联的资源

    avi = get(vid,'DiskLogger');
    avi = close(avi);
    
    处理完视频输入对象后,应使用“删除”功能释放与其关联的硬件资源,并使用“清除”功能将其从工作区中删除

    delete(vid);
    clear vid;
    
    以上的大部分,但不是全部,都是从中提取的

    当您点击
    start(vid)
    时,您可能会注意到在开始获取帧之前有一点延迟。如果您试图将视频与其他内容同步,则这是不好的。在这种情况下,您需要尝试使用:


    有关触发器和同步的更多信息,请参阅。

    我最近写了一篇博客文章,介绍如何通过向ffmpeg程序发送命令行,在MATLAB中录制同步音频和视频。您可以找到更多信息,但下面是一个示例,它使用了一些在我的计算机上有意义的设置

    dos('ffmpeg -list_devices true -f dshow -i dummy')
    
    dos('ffmpeg -f dshow -list_options true -i video="USB2.0 HD UVC WebCam')
    
    dos('ffmpeg -f dshow -video_size 1280x720 -framerate 30 -audio_buffer_size 80 -i video="USB2.0 HD UVC WebCam":audio="Microphone (Realtek High Definition Audio)" -t 10 -c:v libx264 -preset veryfast -crf 25 test_vid2.mp4');
    

    从这个问题上我不清楚你是否试图使用网络摄像机来记录你的MATLAB会话(可能不是,但我看到有人这样做)。是用Camtasia制作和编辑的屏幕截图。
    delete(vid);
    clear vid;
    
    triggerconfig(vid,'manual');
    start(vid); %There'll be a delay here, but nothing is being captured
    trigger(vid); %Use this line when you want the capture to start. There should be very little delay.
    
    dos('ffmpeg -list_devices true -f dshow -i dummy')
    
    dos('ffmpeg -f dshow -list_options true -i video="USB2.0 HD UVC WebCam')
    
    dos('ffmpeg -f dshow -video_size 1280x720 -framerate 30 -audio_buffer_size 80 -i video="USB2.0 HD UVC WebCam":audio="Microphone (Realtek High Definition Audio)" -t 10 -c:v libx264 -preset veryfast -crf 25 test_vid2.mp4');