美文网首页
07_音频录制_命令行

07_音频录制_命令行

作者: 咸鱼Jay | 来源:发表于2022-10-24 13:46 被阅读0次

    终于要开始进行FFmpeg实战了,一起来感受一下FFmpeg的强大吧。

    命令简介

    FFmpeg的bin目录中提供了3个命令(可执行程序),可以直接在命令行上使用。

    3个命令

    ffmpeg

    ffmpeg的主要作用:对音视频进行编解码。

    # 将MP3文件转成WAV文件
    ffmpeg -i xx.mp3 yy.wav
    

    当输入命令ffmpeg时,可以看到ffmpeg命令的使用格式是:

    ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...
    

    简化一下,常用格式是:

    ffmpeg arg1 arg2 -i arg3 arg4 arg5
    
    • arg1:全局参数
    • arg2:输入文件参数
    • arg3:输入文件
    • arg4:输出文件参数
    • arg5:输出文件

    更多详细用法,可以参考官方文档:ffmpeg-all.html,或者使用以下命令查看:

    # 简易版
    ffmpeg -h
    # 详细版
    ffmpeg -h long
    # 完整版
    ffmpeg -h full
    
    # 或者使用
    # ffmpeg -help
    # ffmpeg -help long
    # ffmpeg -help full
    

    ffprobe

    ffprobe的主要作用:查看音视频的参数信息。

    # 可以查看MP3文件的采样率、比特率、时长等信息
    ffprobe xx.mp3
    

    当输入命令ffprobe时,可以看到ffprobe命令的使用格式是:

    ffprobe [OPTIONS] [INPUT_FILE]
    # OPTIONS:参数
    # INPUT_FILE:输入文件
    

    更多详细用法,可以参考官方文档:ffprobe-all.html,或者使用以下命令查看:

    # 简易版
    ffprobe -h
    # 详细版
    ffprobe -h long
    # 完整版
    ffprobe -h full
    
    # 或者使用
    # ffprobe -help
    # ffprobe -help long
    # ffprobe -help full
    

    ffplay

    ffplay的主要作用:播放音视频。

    # 播放MP3文件
    ffplay xx.mp3
    

    当输入命令ffplay时,可以看到ffplay命令的使用格式是:

    ffplay [options] input_file
    # options:参数
    # input_file:输入文件
    

    更多详细用法,可以参考官方文档:ffplay-all.html,或者使用以下命令查看:

    # 简易版
    ffplay -h
    # 详细版
    ffplay -h long
    # 完整版
    ffplay -h full
    
    # 或者使用
    # ffplay -help
    # ffplay -help long
    # ffplay -help full
    

    hide_banner

    增加-hide_bannder参数可以隐藏一些冗余的描述信息,可以去实践比较以下2条命令的区别:

    ffprobe xx.mp3
    
    ffprobe -hide_banner xx.mp3
    
    # ffmpeg、ffprobe、ffplay都适用
    

    通过命令行录音

    查看可用设备

    使用命令行查看当前平台的可用设备:

    ffmpeg -devices
    

    Windows的输出结果如下所示:

    • 列表中有个dshow,全名叫DirectShow,是Windows平台的多媒体系统库
    • 我们可以使用dshow去操作多媒体输入设备(比如录音设备)
    Devices:
     D. = Demuxing supported
     .E = Muxing supported
     --
      E caca            caca (color ASCII art) output device
     D  dshow           DirectShow capture
     D  gdigrab         GDI API Windows frame grabber
     D  lavfi           Libavfilter virtual input device
     D  libcdio
      E sdl,sdl2        SDL2 output device
     D  vfwcap          VfW video capture
    

    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
    

    查看dshow支持的设备

    # 查看dshow支持的设备
    ffmpeg -f dshow -list_devices true -i dummy
    
    # 或者
    # ffmpeg -list_devices true -f dshow -i ''
    # ffmpeg -list_devices true -f dshow -i ""
    
    • -f dshow

      • dshow支持的
    • -list_devices true

      • 打印出所有的设备
    • -i dummy-i ''-i ""

      • 立即退出

    因此,命令的执行结果大致如下所示:

    DirectShow video devices (some may be both video and audio devices)
      "Integrated Camera"
    
    DirectShow audio devices
      "线路输入 (3- 魅声T800)"
      "麦克风阵列 (Realtek(R) Audio)"
    
    • dshow支持的视频设备

      • Integrated Camera:笔记本自带的摄像头
    • dshow支持的音频设备

      • 线路输入 (3- 魅声T800):外接的麦克风
      • 麦克风阵列 (Realtek(R) Audio):笔记本自带的麦克风

    查看avfoundation支持的设备

    在Mac平台,使用的是avfoundation,而不是dshow。

    ffmpeg -f avfoundation -list_devices true -i '' 
    

    输出结果如下所示:

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

    列表中的MS-T800是外接的麦克风。在Mac上,FFmpeg还给每一个视频、音频设备进行了编号,比如MS-T800的编号是0、Mac自带麦克风的编号是2。

    指定设备进行录音

    # 使用外接的麦克风进行录音,最后生成一个wav文件
    ffmpeg -f dshow -i audio="麦克风阵列 (Realtek(R) Audio)" out.wav
    
    # 在Mac上通过编号指定设备
    ffmpeg -f avfoundation -i :2 out.wav
    # :0表示使用0号音频设备
    # 0:2表示使用0号视频设备和2号音频设备
    
    • 可以使用快捷键Ctrl + C终止录音
    • 我这边的测试结果显示,音频参数是:
      • Windows:44100Hz采样率、16位深度、2声道、1411Kbps比特率
      • Mac:48000Hz采样率、16位深度、2声道、1536Kbps比特率

    设置dshow的参数

    先通过命令查看一下dshow可以使用的参数,详情可以查看官方文档:dshow参数

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

    部分输出结果如下所示:

    # 采样率
    -sample_rate         <int> set audio sample rate (from 0 to INT_MAX)
    # 采样大小(位深度)
    -sample_size         <int> set audio sample size (from 0 to 16)
    # 声道数
    -channels            <int> set number of audio channels, such as 1 or 2 (from 0 to INT_MAX)
    # 列出特定设备支持的参数
    -list_options        <boolean> list available options for specified device (default false)
    

    然后再看看你的设备支持哪些参数。

    ffmpeg -f dshow -list_options true -i audio="麦克风阵列 (Realtek(R) Audio)"
    

    输出结果如下所示:

    DirectShow audio only device options (from audio devices)
      Pin "Capture" (alternative pin name "Capture")
      min ch=1 bits=8 rate= 11025 max ch=2 bits=16 rate= 44100
      
    # 可以看出来:采样率范围是11025~44100Hz
    

    接下来设置录音时的音频参数。

    ffmpeg -f dshow -sample_rate 15000 -sample_size 16 -channels 1 -i audio="麦克风阵列 (Realtek(R) Audio)" out.wav
    

    相关文章

      网友评论

          本文标题:07_音频录制_命令行

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