直播相关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

要查看FFmpeg命令行使用文档,你可以通过以下几种方式获取详细信息: 1. 通过命令行参数验证可行性:在命令行使用`ffmpeg -h full`命令,将所有选项的详细说明导出到文件中,例如`ffmpeg -h full 2>/dev/null > ffmpeg.txt`。你可以在导出的文件中找到每个选项的详细说明。 2. 阅读官方文档:你可以访问FFmpeg的官方文档`ffmpeg-all`,其中包含了关于FFmpeg的常规用法、日期格式、时间格式、视频大小缩写、帧率缩写、颜色、音频通道含义等信息。 3. 使用命令`man ffmpeg`:在命令行中输入`man ffmpeg`可以查看FFmpeg命令行使用文档。 总结起来,FFmpeg命令行使用文档可以通过命令行参数验证、阅读官方文档或使用`man ffmpeg`命令来获取。希望这些信息对你有帮助! #### 引用[.reference_title] - *1* [ffmpeg命令行使用](https://blog.csdn.net/momo0853/article/details/120957704)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [常见FFmpeg命令行全面分析](https://blog.csdn.net/u011686167/article/details/120879467)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [FFmpeg命令行使用手册-protocols协议汇总篇](https://blog.csdn.net/eguid_1/article/details/107307093)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值