直播相关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
相关文章:
直播相关03-录制麦克风声音, ffmpeg 命名,使用命令行完成录音
一 ffmpeg 命令 ffmpeg arg1 arg2 -i arg3 arg4 arg5ffmpeg 全局参数 输入文件参数 -i 输入文件 输出文件参数 输出文件arg1:全局参数 arg2:输入文件参数 arg3:输入文件 arg4:输出文件参数 arg5:输出文件 二 ffprobe …...
VUE3中ref与reactive
ref:支持所有类型reactive:只支持引用类型(Obj,Array...)两者都是实现数据视图响应式 JS逻辑使用中 ref:需要使用.value reactive:不需要使用.value <el-button click"handle()" type"primary"…...

高职院校人工智能技术和无人机技术实训室建设方案
一、方案背景与需求分析 1.1 人工智能与无人机技术发展概况 人工智能(AI)和无人机技术作为当今科技领域的两大热点,正以前所未有的速度发展和渗透到各行各业中。根据国际数据公司(IDC)的报告,全球人工智能市场规模预计将在2024年…...

x-cmd pkg | shtris: 在终端体验经典的俄罗斯方块游戏
目录 简介首次用户技术特点竞品和相关项目进一步阅读 简介 shtris 是一个由 shell 脚本,参考 俄罗斯方块指南 (2009) 实现的俄罗斯方块游戏。 首次用户 本文的 demo 展现了如何通过 x-cmd 快速启动使用 shtris 。x-cmd也提供了1分钟教程可以帮你快速入门。 技术…...

Linux基础---07文件传输及解决yum安装失效的方法
Linux文件传输地图如下,先选取你所需的场景,若你是需要Linux和Linux之间传输文件就查看SCP工具即可。 一.下载网站文件 前提是有网: 检查网络是否畅通命令:ping www.baidu.com,若有持续的返回值就说明网络畅通。Ctr…...
[项目][WebServer][Makefile Shell]详细讲解
目录 1.Makefile2. build.sh3.test.sh 1.Makefile 为了方便构建项目,并将其发布,使用Makefile来管理构建项目 bin httpserver cgi test_cgi cc g GLD_FLAGS -stdc11 -D DEBUG_SHOW LD_FLAGS $(GLD_FLAGS) -lpthread src main.cc curr $(shell p…...

ElementUI大坑Notification修改样式
默认<style lang"scss" scoped>局部样式,尝试用deep透传也无效 实践成功方法:单独写一个style <style> .el-notification{position: absolute !important;top: 40% !important;left: 40% !important; } </style> 也支持自…...
vivado中的diagram
在 Vivado 中,“Diagram” 选项卡是 IP Integrator 的一部分,它用于创建和编辑 Block Design。Block Design 是一种图形化的设计方法,它允许设计者通过拖放组件(如 IP 核和自定义模块)并连接它们来构建复杂的数字电路设…...

项目实现:云备份②(文件操作、Json等工具类的实现)
云备份 前言文件操作实用工具类设计文件属性的获取文件的读写操作文件压缩与解压缩的实现文件目录操作 Json 实用工具类设计编译优化 前言 如果有老铁不知道当前项目实现的功能是什么的话,可以先移步这篇文章内容: 云备份项目的介绍 其中介绍了云备份项…...

内网穿透技术总结
内网穿透是一种网络技术,通过它可以使外部网络用户访问内部网络中的设备和服务。一般情况下,内网是无法直接访问的,因为它位于一个封闭的局域网中,无法从外部访问。而通过内网穿透,可以将内部网络中的设备和服务暴露在…...

Git使用—把当前仓库的一个分支push到另一个仓库的指定分支、基于当前仓库创建另一个仓库的分支并推送到对应仓库(mit6828)
把学习过程中遇到的Git问题汇总如下(后续学习遇到问题会及时更新此专栏): Git原理及常用命令小结——实用版(ing......)、Git设置用户名邮箱-CSDN博客 解决git每次push代码到github都需要输入用户名以及密码-CSDN博客…...

windows11+ubuntu20.04.6双系统安装
记录win11和ubuntu20.04.6在单个硬盘上安装的主要流程 系统说明 BIOS模式: UEFI 硬盘: 1TB固态 内存: 32GB 步骤 1、 准备两个不小于16GB的U盘,一个用于装Windows,一个用于装ubuntu,注意8G的U盘虽然能够…...

如何通过 PhantomJS 模拟用户行为抓取动态网页内容
引言 随着网页技术的不断进步,JavaScript 动态加载内容已成为网站设计的新常态,这对传统的静态网页抓取方法提出了挑战。为了应对这一挑战,PhantomJS 作为一个无头浏览器,能够模拟用户行为并执行 JavaScript,成为了获…...
ARM驱动学习之8 动态申请字符类设备号
ARM驱动学习之8 动态申请字符类设备号 KernelCode: • 字符设备函数在文件“include/linux/fs.h”中 • alloc_chrdev_region() 是动态分配主次设备号。 • 宏定义MAJOR提取dev_t数据中的主设备号源码: /*** alloc_chrdev_region() - register a range of char dev…...

TCP.IP四层模型
一、TCP/IP模型协议分层 1、应用层: 2、传输层: TCP:传输控制协议 UDP:用户数据报协议 3、网络层: IP: 国际协议(IP地址) ICMP: 互联网控制消息协议(互联网…...
极狐GitLab DevSecOps 功能合集(七大安全功能)
极狐GitLab 是 GitLab 在中国的发行版,专门面向中国程序员和企业提供企业级一体化 DevOps 平台,用来帮助用户实现需求管理、源代码托管、CI/CD、安全合规,而且所有的操作都是在一个平台上进行,省事省心省钱。可以一键安装极狐GitL…...

进阶SpringBoot之异步任务、邮件任务和定时执行任务
SpringBooot 创建 Web 项目 异步任务: service 包下创建 AsyncService 类 Async 异步方法 Thread.sleep(3000) 停止三秒,捕获异常 package com.demo.task.service;import org.springframework.scheduling.annotation.Async; import org.springfram…...

【设计模式-桥接】
定义 桥接模式(Bridge Pattern)是一种结构型设计模式,它通过将抽象部分与实现部分分离,使它们都可以独立地变化。桥接模式的关键在于将类的抽象部分与其实现部分解耦,以便两者可以独立地变化。这种设计模式的一个主要…...

JVM JMM 专题篇 ( 12000 字详解 )
一:JVM 简介 JVM 是 Java Virtual Machine 的简称,意为 Java 虚拟机,虚拟机是指通过软件模拟的具有完整硬件功能的、运行在一个完全隔离的环境中的完整计算机系统。 常见的虚拟机:JVM、VMwave、Virtual Box,JVM 和其…...

【C++】—— list 模拟实现
【C】—— list 模拟实现 1 list 基础结构2 默认构造3 迭代器3.1 整体框架3.2 成员函数3.3 begin() 与 end() 的实现3.4 operator-> 的实现3.5 const 迭代器3.5.1 const 迭代器为什么命名 const_iterator3.5.2 const 迭代器的实现3.5.3 合并两个迭代器 4 源码 1 list 基础结…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...

【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...

算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...