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

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

一 ffmpeg 命令

ffmpeg arg1 arg2 -i arg3 arg4 arg5ffmpeg 全局参数 输入文件参数 -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.mp3ffprobe -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 deviceD  dshow           DirectShow captureD  gdigrab         GDI API Windows frame grabberD  lavfi           Libavfilter virtual input deviceD  libcdioE sdl,sdl2        SDL2 output deviceD  vfwcap          VfW video capture

linux 上是这样的

  • 列表中有个alsa,是linux平台的多媒体系统库
  • 我们可以使用alsa去操作多媒体输入设备(比如录音设备)
ffmpeg version 7.0 Copyright (c) 2000-2024 the FFmpeg developersbuilt 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-nonfreelibavutil      59.  8.100 / 59.  8.100libavcodec     61.  3.100 / 61.  3.100libavformat    61.  1.100 / 61.  1.100libavdevice    61.  1.100 / 61.  1.100libavfilter    10.  1.100 / 10.  1.100libswscale      8.  1.100 /  8.  1.100libswresample   5.  1.100 /  5.  1.100libpostproc    58.  1.100 / 58.  1.100
Devices:D. = Demuxing supported.E = Muxing supported---DE alsa            ALSA audio outputDE fbdev           Linux framebufferD  kmsgrab         KMS screen captureD  lavfi           Libavfilter virtual input deviceDE oss             OSS (Open Sound System) playbackE sdl,sdl2        SDL2 output deviceDE sndio           sndio audio playbackDE video4linux2,v4l2 Video4Linux2 output deviceD  x11grab         X11 screen capture, using XCBE xv              XV (XVideo) output device

Mac的输出结果如下所示:

  • 列表中有个avfoundation,是Mac平台的多媒体系统库
  • 我们可以使用avfoundation去操作多媒体输入设备(比如录音设备)

Devices:D. = Demuxing supported.E = Muxing supported--D  avfoundation    AVFoundation input deviceD  lavfi           Libavfilter virtual input deviceE 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 dshowdshow支持的
-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 developersbuilt 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-chromaprintlibavutil      58.  2.100 / 58.  2.100libavcodec     60.  3.100 / 60.  3.100libavformat    60.  3.100 / 60.  3.100libavdevice    60.  1.100 / 60.  1.100libavfilter     9.  3.100 /  9.  3.100libswscale      7.  1.100 /  7.  1.100libswresample   4. 10.100 /  4. 10.100libpostproc    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= 44100Last 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.lryc.cn/news/439864.html

相关文章:

  • VUE3中ref与reactive
  • 高职院校人工智能技术和无人机技术实训室建设方案
  • x-cmd pkg | shtris: 在终端体验经典的俄罗斯方块游戏
  • Linux基础---07文件传输及解决yum安装失效的方法
  • [项目][WebServer][Makefile Shell]详细讲解
  • ElementUI大坑Notification修改样式
  • vivado中的diagram
  • 项目实现:云备份②(文件操作、Json等工具类的实现)
  • ‌内网穿透技术‌总结
  • Git使用—把当前仓库的一个分支push到另一个仓库的指定分支、基于当前仓库创建另一个仓库的分支并推送到对应仓库(mit6828)
  • windows11+ubuntu20.04.6双系统安装
  • 如何通过 PhantomJS 模拟用户行为抓取动态网页内容
  • ARM驱动学习之8 动态申请字符类设备号
  • TCP.IP四层模型
  • 极狐GitLab DevSecOps 功能合集(七大安全功能)
  • 进阶SpringBoot之异步任务、邮件任务和定时执行任务
  • 【设计模式-桥接】
  • JVM JMM 专题篇 ( 12000 字详解 )
  • 【C++】—— list 模拟实现
  • Redis主要问题
  • vue3 ref的用法及click事件的说明
  • 通信工程学习:什么是HFC混合光纤同轴电缆
  • 怎么浏览URL的PDF文件呢
  • 【2025届华为秋招机考三道编程题之一】华为校招留学生软件开发工程师-真题机考笔试/(200分)- 跳格子3(Java JS Python C)
  • 高性能缓存利器:Caffeine 在 Spring Boot 中的应用
  • pWnOS的第二种全新解法(ssh私钥破解、webmin漏洞提权)
  • Maven入门学习笔记
  • linux驱动开发-arm汇编基础
  • 【HarmonyOS】鸿蒙头像上传-(编辑个人信息页- 头像上传)+实时数据更新
  • [数据集][目标检测]无人机识别检测数据集VOC+YOLO格式6986张1类别