直播相关03-录制麦克风声音, ffmpeg 命名,使用命令行完成录音

一 ffmpeg 命令

ffmpeg arg1 arg2 -i arg3 arg4 arg5

ffmpeg 全局参数 输入文件参数 -i 输入文件 输出文件参数 输出文件

arg1:全局参数
arg2:输入文件参数
arg3:输入文件
arg4:输出文件参数
arg5:输出文件

二 ffprobe 命令

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

三 ffplay 命令

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

四 hide_banner

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

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

五 通过命令行录音

在 windows, linux,mac 上 的 多媒体库 是不一样的,因此我们先要看一下 当前系统的 多媒体库 是啥

5.1 查看当前系统的媒体库是啥?

ffmpeg -devices

Windows的输出结果如下所示:

  • 列表中有个dshow,全名叫DirectShow,是Windows平台的多媒体系统库

  • 我们可以使用dshow去操作多媒体输入设备(比如录音设备)

    C:\Users\Administrator>ffmpeg -hide_banner -devices
    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

linux 上是这样的

  • 列表中有个alsa,是linux平台的多媒体系统库

  • 我们可以使用alsa去操作多媒体输入设备(比如录音设备)

    ffmpeg version 7.0 Copyright (c) 2000-2024 the FFmpeg developers
    built with gcc 13 (Ubuntu 13.2.0-23ubuntu4)
    configuration: --prefix=/home/hunandede/ffmpeg_build --pkg-config-flags=--static --extra-cflags=-I/home/hunandede/ffmpeg_build/include --extra-ldflags=-L/home/hunandede/ffmpeg_build/lib --extra-libs='-lpthread -lm' --bindir=/home/hunandede/bin --enable-gpl --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-pic --enable-shared --enable-nonfree
    libavutil 59. 8.100 / 59. 8.100
    libavcodec 61. 3.100 / 61. 3.100
    libavformat 61. 1.100 / 61. 1.100
    libavdevice 61. 1.100 / 61. 1.100
    libavfilter 10. 1.100 / 10. 1.100
    libswscale 8. 1.100 / 8. 1.100
    libswresample 5. 1.100 / 5. 1.100
    libpostproc 58. 1.100 / 58. 1.100
    Devices:
    D. = Demuxing supported
    .E = Muxing supported

    DE alsa ALSA audio output
    DE fbdev Linux framebuffer
    D kmsgrab KMS screen capture
    D lavfi Libavfilter virtual input device
    DE oss OSS (Open Sound System) playback
    E sdl,sdl2 SDL2 output device
    DE sndio sndio audio playback
    DE video4linux2,v4l2 Video4Linux2 output device
    D x11grab X11 screen capture, using XCB
    E xv XV (XVideo) output device

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

5.2 查看dshow支持的设备

以下用 windows 为例说明

# 查看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 ""

立即退出

结果如下:

C:\Users\Administrator>ffmpeg -f dshow -list_devices true -i dummy
ffmpeg version 6.0-full_build-www.gyan.dev Copyright (c) 2000-2023 the FFmpeg developers
  built with gcc 12.2.0 (Rev10, Built by MSYS2 project)
  configuration: --enable-gpl --enable-version3 --enable-shared --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-libsnappy --enable-zlib --enable-librist --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --enable-libcaca --enable-sdl2 --enable-libaribb24 --enable-libdav1d --enable-libdavs2 --enable-libuavs3d --enable-libzvbi --enable-librav1e --enable-libsvtav1 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libaom --enable-libjxl --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-frei0r --enable-libfreetype --enable-libfribidi --enable-liblensfun --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-d3d11va --enable-dxva2 --enable-libvpl --enable-libshaderc --enable-vulkan --enable-libplacebo --enable-opencl --enable-libcdio --enable-libgme --enable-libmodplug --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libshine --enable-libtheora --enable-libtwolame --enable-libvo-amrwbenc --enable-libilbc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-ladspa --enable-libbs2b --enable-libflite --enable-libmysofa --enable-librubberband --enable-libsoxr --enable-chromaprint
  libavutil      58.  2.100 / 58.  2.100
  libavcodec     60.  3.100 / 60.  3.100
  libavformat    60.  3.100 / 60.  3.100
  libavdevice    60.  1.100 / 60.  1.100
  libavfilter     9.  3.100 /  9.  3.100
  libswscale      7.  1.100 /  7.  1.100
  libswresample   4. 10.100 /  4. 10.100
  libpostproc    57.  1.100 / 57.  1.100
[dshow @ 00000254dd9b6440] "USB Camera" (video)
[dshow @ 00000254dd9b6440]   Alternative name "@device_pnp_\\?\usb#vid_0c45&pid_6366&mi_00#7&2138754&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global"
[dshow @ 00000254dd9b6440] "screen-capture-recorder" (video)
[dshow @ 00000254dd9b6440]   Alternative name "@device_sw_{860BB310-5D01-11D0-BD3B-00A0C911CE86}\{4EA69364-2C8A-4AE6-A561-56E4B5044439}"
[dshow @ 00000254dd9b6440] "OBS Virtual Camera" (none)
[dshow @ 00000254dd9b6440]   Alternative name "@device_sw_{860BB310-5D01-11D0-BD3B-00A0C911CE86}\{A3FCE0F5-3493-419F-958A-ABA1250EC20B}"
[dshow @ 00000254dd9b6440] "Microphone (High Definition Audio Device)" (audio)
[dshow @ 00000254dd9b6440]   Alternative name "@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{65B0B6E6-1296-49C4-B8A3-262F69F315CB}"
[dshow @ 00000254dd9b6440] "virtual-audio-capturer" (audio)
[dshow @ 00000254dd9b6440]   Alternative name "@device_sw_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\{8E146464-DB61-4309-AFA1-3578E927E935}"
[dshow @ 00000254dd9b6440] "Microphone (High Definition Audio Device)" (audio)
[dshow @ 00000254dd9b6440]   Alternative name "@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{7E4D72E6-A93F-4B62-AD15-A64D1D38AA46}"
dummy: Immediate exit requested

说明:

dshow支持的视频设备

"USB Camera":笔记本自带的摄像头


dshow支持的音频设备

Microphone (High Definition Audio Device):外接的麦克风
Microphone (High Definition Audio Device):我们的耳机

注意看,实际上着两个 音频设备是 不一样的

指定设备进行录音

# 使用外接的麦克风进行录音,最后生成一个wav文件
ffmpeg -f dshow -i audio="Microphone (High Definition Audio Device)" 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="Microphone (High Definition Audio Device)"

[dshow @ 00000229f1dd6480] DirectShow audio only device options (from audio devices)
[dshow @ 00000229f1dd6480]  Pin "Capture" (alternative pin name "Capture")
[dshow @ 00000229f1dd6480]   ch= 2, bits=16, rate= 44100
    Last message repeated 1 times
[dshow @ 00000229f1dd6480]   ch= 1, bits=16, rate= 44100
[dshow @ 00000229f1dd6480]   ch= 2, bits=16, rate= 32000
[dshow @ 00000229f1dd6480]   ch= 1, bits=16, rate= 32000
[dshow @ 00000229f1dd6480]   ch= 2, bits=16, rate= 22050
[dshow @ 00000229f1dd6480]   ch= 1, bits=16, rate= 22050
[dshow @ 00000229f1dd6480]   ch= 2, bits=16, rate= 11025
[dshow @ 00000229f1dd6480]   ch= 1, bits=16, rate= 11025
[dshow @ 00000229f1dd6480]   ch= 2, bits=16, rate=  8000
[dshow @ 00000229f1dd6480]   ch= 1, bits=16, rate=  8000
[dshow @ 00000229f1dd6480]   ch= 2, bits= 8, rate= 44100
[dshow @ 00000229f1dd6480]   ch= 1, bits= 8, rate= 44100
[dshow @ 00000229f1dd6480]   ch= 2, bits= 8, rate= 22050
[dshow @ 00000229f1dd6480]   ch= 1, bits= 8, rate= 22050
[dshow @ 00000229f1dd6480]   ch= 2, bits= 8, rate= 11025
[dshow @ 00000229f1dd6480]   ch= 1, bits= 8, rate= 11025
[dshow @ 00000229f1dd6480]   ch= 2, bits= 8, rate=  8000
[dshow @ 00000229f1dd6480]   ch= 1, bits= 8, rate=  8000
[dshow @ 00000229f1dd6480]   ch= 2, bits=16, rate= 48000
[dshow @ 00000229f1dd6480]   ch= 1, bits=16, rate= 48000
[dshow @ 00000229f1dd6480]   ch= 2, bits=16, rate= 96000
[dshow @ 00000229f1dd6480]   ch= 1, bits=16, rate= 96000

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

ffmpeg -f dshow -sample_rate 44100-sample_size 16 -channels 1 -i audio="Microphone (High Definition Audio Device)" out.wav
相关推荐
runing_an_min3 小时前
ffmpeg视频滤镜:替换部分帧-freezeframes
ffmpeg·音视频·freezeframes
ruizhenggang3 小时前
ffmpeg本地编译不容易发现的问题 — Error:xxxxx not found!
ffmpeg
runing_an_min5 小时前
ffmpeg视频滤镜:提取缩略图-framestep
ffmpeg·音视频·framestep
韩曙亮17 小时前
【FFmpeg】FFmpeg 内存结构 ③ ( AVPacket 函数简介 | av_packet_ref 函数 | av_packet_clone 函数 )
ffmpeg·音视频·avpacket·av_packet_clone·av_packet_ref·ffmpeg内存结构
oushaojun21 天前
ubuntu中使用ffmpeg和nginx推流rtmp视频
nginx·ubuntu·ffmpeg·rtmp
莫固执,朋友1 天前
网络抓包工具tcpdump 在海思平台上的编译使用
网络·ffmpeg·音视频·tcpdump
lxkj_20241 天前
修改ffmpeg实现https-flv内容加密
网络协议·https·ffmpeg
cuijiecheng20181 天前
音视频入门基础:MPEG2-TS专题(6)——FFmpeg源码中,获取MPEG2-TS传输流每个transport packet长度的实现
ffmpeg·音视频
VisionX Lab1 天前
数据脱敏工具:基于 FFmpeg 的视频批量裁剪
python·ffmpeg·音视频
柳鲲鹏2 天前
全网首发:Ubuntu编译跨平台嵌入式支持ffmpeg的OpenCV
linux·ubuntu·ffmpeg