zoukankan      html  css  js  c++  java
  • 【秒懂音视频开发】19_视频录制01_命令行

    本文的主要内容:演示如何利用命令行采集摄像头的视频数据。
    阅读本文之前,建议先阅读《音频录制01_命令行》对常用命令作一个基本认识。

    Windows

    dshow支持的设备

    ffmpeg -f dshow -list_devices true -i dummy
    

    输出结果大致如下所示。

    DirectShow video devices (some may be both video and audio devices)
      "Integrated Camera"
    DirectShow audio devices
      "麦克风阵列 (Realtek(R) Audio)"
    

    Integrated Camera是我笔记本上自带的摄像头,等会我们就是通过这个摄像头采集视频数据。

    dshow支持的参数

    ffmpeg -h demuxer=dshow
    

    输出结果大致如下所示。

    dshow indev AVOptions:
      -video_size        <image_size> set video size given a string such as 640x480 or hd720.
      -pixel_format      <pix_fmt>    set video pixel format (default none)
      -framerate         <string>     set video frame rate
      -list_devices      <boolean>    list available devices (default false)
      -list_options      <boolean>    list available options for specified device (default false)
    
    • -video_size:分辨率
    • -pixel_format:像素格式
    • -framerate:帧率(每秒采集多少帧画面)
    • -list_devices:true表示列出dshow支持的所有设备
    • -list_options:true表示列出特定设备支持的所有参数

    摄像头支持的参数

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

    输出结果大致如下所示。

    DirectShow video device options (from video devices)
     Pin "捕获" (alternative pin name "捕获")
      vcodec=mjpeg  min s=1280x720 fps=30 max s=1280x720 fps=30
      vcodec=mjpeg  min s=320x180 fps=30 max s=320x180 fps=30
      vcodec=mjpeg  min s=320x240 fps=30 max s=320x240 fps=30
      vcodec=mjpeg  min s=352x288 fps=30 max s=352x288 fps=30
      vcodec=mjpeg  min s=424x240 fps=30 max s=424x240 fps=30
      vcodec=mjpeg  min s=640x360 fps=30 max s=640x360 fps=30
      vcodec=mjpeg  min s=640x480 fps=30 max s=640x480 fps=30
      vcodec=mjpeg  min s=848x480 fps=30 max s=848x480 fps=30
      vcodec=mjpeg  min s=960x540 fps=30 max s=960x540 fps=30
      pixel_format=yuyv422  min s=1280x720 fps=10 max s=1280x720 fps=10
      pixel_format=bgr24  min s=1280x720 fps=10 max s=1280x720 fps=10
      pixel_format=yuyv422  min s=320x180 fps=30 max s=320x180 fps=30
      pixel_format=bgr24  min s=320x180 fps=30 max s=320x180 fps=30
      pixel_format=yuyv422  min s=320x240 fps=30 max s=320x240 fps=30
      pixel_format=bgr24  min s=320x240 fps=30 max s=320x240 fps=30
      pixel_format=yuyv422  min s=352x288 fps=30 max s=352x288 fps=30
      pixel_format=bgr24  min s=352x288 fps=30 max s=352x288 fps=30
      pixel_format=yuyv422  min s=424x240 fps=30 max s=424x240 fps=30
      pixel_format=bgr24  min s=424x240 fps=30 max s=424x240 fps=30
      pixel_format=yuyv422  min s=640x360 fps=30 max s=640x360 fps=30
      pixel_format=bgr24  min s=640x360 fps=30 max s=640x360 fps=30
      pixel_format=yuyv422  min s=640x480 fps=30 max s=640x480 fps=30
      pixel_format=bgr24  min s=640x480 fps=30 max s=640x480 fps=30
      pixel_format=yuyv422  min s=848x480 fps=20 max s=848x480 fps=20
      pixel_format=bgr24  min s=848x480 fps=20 max s=848x480 fps=20
      pixel_format=yuyv422  min s=960x540 fps=15 max s=960x540 fps=15
      pixel_format=bgr24  min s=960x540 fps=15 max s=960x540 fps=15
    

    可以看到摄像头支持的分辨率、像素格式、帧率等参数。

    录制

    ffmpeg -f dshow -i video="Integrated Camera" out.yuv
    

    输出结果大致如下所示。

    Input #0, dshow, from 'video=Integrated Camera':
        Stream #0:0: Video: mjpeg, yuvj422p, 1280x720, 30 fps
    
    Output #0, rawvideo, to 'out.yuv':
        Stream #0:0: Video: rawvideo, yuvj422p, 1280x720, 30 fps
    

    根据输出结果,不难看出:

    • 从摄像头采集的数据,最终存成了YUV格式

    • 摄像头的默认参数

      • 分辨率:1280x720
      • 像素格式:yuvj422p
      • 帧率:30fps

    所以,播放YUV时的命令如下所示。

    • 需要注意的是:YUV文件中只存储了图像信息,并没有声音信息
    • 因此,播放YUV时是听不到任何声音的
    • ffplay的framerate默认值是25
    ffplay -video_size 1280x720 -pixel_format yuvj422p -framerate 30 out.yuv
    

    可以自定义参数进行录制。

    ffmpeg -f dshow -video_size 640x480 -pixel_format yuyv422 -framerate 30 -i video="Integrated Camera" out.yuv
    

    播放录制好的YUV。

    ffplay -video_size 640x480 -pixel_format yuyv422 -framerate 30 out.yuv
    

    Mac

    avfoundation支持的设备

    ffmpeg -f avfoundation -list_devices true -i ''
    

    输出结果大致如下所示。

    AVFoundation video devices:
    [0] FaceTime高清摄像头(内建)
    [1] Capture screen 0
    AVFoundation audio devices:
    [0] Soundflower (64ch)
    [1] Edu Audio Device
    [2] MacBook Pro麦克风
    [3] Soundflower (2ch)
    

    0号设备就是Mac自带的摄像头。

    avfoundation支持的参数

    ffmpeg -h demuxer=avfoundation
    

    输出结果大致如下所示。

    AVFoundation indev AVOptions:
      -list_devices      <boolean>    .D........ list available devices (default false)
      -pixel_format      <pix_fmt>    .D........ set pixel format (default yuv420p)
      -framerate         <video_rate> .D........ set frame rate (default "ntsc")
      -video_size        <image_size> .D........ set video size
    
    • -video_size:分辨率
    • -pixel_format:像素格式
      • 默认是yuv420p
    • -framerate:帧率(每秒采集多少帧画面)
      • 默认是ntsc,也就是30000/1001,约等于29.970030
    • -list_devices:true表示列出avfoundation支持的所有设备

    录制

    # 使用0号视频设备
    ffmpeg -f avfoundation -i 0 out.yuv
    

    然后你可能会遇到一个错误:这个设备(摄像头)不支持29.970030的帧率。

    Selected framerate (29.970030) is not supported by the device
    

    重新设置个30的帧率试试。

    ffmpeg -f avfoundation -framerate 30 -i 0 out.yuv
    

    然后你会看到以下提示信息。

    • 这个设备(摄像头)不支持yuv420p
    • 只支持uyvy422、yuyv422、nv12、0rgb、bgr0
    • 并且自动选择使用uyvy422来替代yuv420p
    Selected pixel format (yuv420p) is not supported by the input device.
    Supported pixel formats:
      uyvy422
      yuyv422
      nv12
      0rgb
      bgr0
    Overriding selected pixel format to use uyvy422 instead.
    

    与此同时,也成功开始采集摄像头的视频数据了。

    • 像素格式:uyvy422
    • 分辨率:1280x720
    • 帧率:30
    Input #0, avfoundation, from '0':
        Stream #0:0: Video: rawvideo, uyvy422, 1280x720
    
    Output #0, rawvideo, to 'out.yuv':
        Stream #0:0: Video: rawvideo, uyvy422, 1280x720, 30 fps
    

    播放录制好的YUV。

    ffplay -video_size 1280x720 -pixel_format uyvy422 -framerate 30 out.yuv
    
  • 相关阅读:
    1021 个位数统计 (15 分
    1020 月饼 (25 分)
    1019 数字黑洞 (20 分)
    1018 锤子剪刀布 (20 分)
    1017 A除以B (20 分)
    KMP 串的模式匹配 (25 分)
    11-散列4 Hashing
    11-散列3 QQ帐户的申请与登陆 (25 分)
    11-散列1 电话聊天狂人 (25 分)
    使用正则表达式验证手机号码合法性
  • 原文地址:https://www.cnblogs.com/mjios/p/14717028.html
Copyright © 2011-2022 走看看