当前位置: 首页 > article >正文

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


http://www.kler.cn/news/306837.html

相关文章:

  • 速通汇编(五)认识段地址与偏移地址,CS、IP寄存器和jmp指令,DS寄存器
  • “MIME 媒体类型“用来标识网络传输内容的格式标准
  • [Python办公]常用Python数据采集爬虫技术对比
  • java开发中间件学习记录(持续更新中~)
  • OpenCV_图像旋转超详细讲解
  • 828华为云征文 | 使用Flexus云服务器X实例部署GLPI资产管理系统
  • 计算机网络通关学习(一)
  • jmeter 录制APP脚本
  • 基于R语言结构方程模型分析与实践技术应用
  • SpringCloudAlibaba:Seata
  • 华雁智科前端面试题
  • matlab 单元格数组 和 普通数组
  • Java 流 (Stream) 详解
  • HTTPTomcat
  • QT--connect的使用
  • 【Python篇】深度探索NumPy(下篇):从科学计算到机器学习的高效实战技巧
  • java坏境搭建
  • python学习——对无人机影像有RGB转换到HSV
  • Java 19 新特性-外部函数与内存 API(Foreign Function Memory API)[Preview]
  • 【Qt绘图】—— 运用Qt进行绘图
  • 【论文阅读】Face2Diffusion for Fast and Editable Face Personalization
  • 【FATFS】FATFS简介及下载
  • 接口与抽象类
  • Spring Boot 集成 MongoDB - 入门指南
  • 【CTF Web】BUUCTF BUU BURP COURSE 1 Writeup(X-Real-IP伪造+POST请求)
  • mysql 8.0 时间维度表生成(可运行)
  • VMware Workstation Player虚拟机Ubuntu启用Windows共享目录
  • 网络通信开课作业c++
  • k8s证书过期处理
  • Scratch植物大战僵尸【机器人vs外星人版本】