美文网首页ios 开发
FFmpeg音视频录制

FFmpeg音视频录制

作者: iOS小洁 | 来源:发表于2022-12-28 22:48 被阅读0次

    一、查看可用设备

    ffmpeg -devices
    

    Mac的输出结果如下所示:

    • 列表中有个avfoundation,是Mac平台的多媒体系统库
    • 我们可以使用avfoundation去操作多媒体输入设备(比如录音设备)
    Devices:
     D. = Demuxing supported
     .E = Muxing supported
     --
     D  avfoundation    AVFoundation input device
     D  lavfi           Libavfilter virtual input device
      E sdl,sdl2        SDL2 output device
    

    二、查看avfoundation支持的设备

    # 查看dshow支持的设备
    ffmpeg -f avfoundation -list_devices true -i ''
    
    • -f avfoundation
      • avfoundation支持的
    • -list_devices true
      • 打印出所有的设备
    • -i ''-i ""
    • 立即退出

    输出结果如下

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

    三、查看avfoundation参数

    通过命令查看一下avfoundation可以使用的参数

    # 从ffmpeg -devices命令的结果可以看得出来:avfoundation属于demuxer,而不是muxer
    ffmpeg -h demuxer=avfoundation
    

    打印如下

    Demuxer avfoundation [AVFoundation input device]:
    AVFoundation indev AVOptions:
      -list_devices      <boolean>    .D......... list available devices (default false)
      -video_device_index <int>        .D......... select video device by index for devices with same name (starts at 0) (from -1 to INT_MAX) (default -1)
      -audio_device_index <int>        .D......... select audio device by index for devices with same name (starts at 0) (from -1 to INT_MAX) (default -1)
      -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
      -capture_cursor    <boolean>    .D......... capture the screen cursor (default false)
      -capture_mouse_clicks <boolean>    .D......... capture the screen mouse clicks (default false)
      -capture_raw_data  <boolean>    .D......... capture the raw data from device connection (default false)
      -drop_late_frames  <boolean>    .D......... drop frames that are available later than expected (default true)
    
    • -video_size:分辨率
    • -pixel_format:像素格式
      • 默认是yuv420p
    • -framerate:帧率(每秒采集多少帧画面)
      • 默认是ntsc,也就是30000/1001,约等于29.970030
    • -list_devices:true表示列出avfoundation支持的所有设备

    四、指定设备进行录音

    # 在Mac上通过编号指定设备
    ffmpeg -f avfoundation -i :2 out.wav
    # :0表示使用0号音频设备
    # 0:2表示使用0号视频设备和2号音频设备
    

    五、指定设备进行录制视频

    # 使用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
    

    相关文章

      网友评论

        本文标题:FFmpeg音视频录制

        本文链接:https://www.haomeiwen.com/subject/wtpaqdtx.html