当前位置: 首页 > 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

相关文章:

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

一 ffmpeg 命令 ffmpeg arg1 arg2 -i arg3 arg4 arg5ffmpeg 全局参数 输入文件参数 -i 输入文件 输出文件参数 输出文件arg1&#xff1a;全局参数 arg2&#xff1a;输入文件参数 arg3&#xff1a;输入文件 arg4&#xff1a;输出文件参数 arg5&#xff1a;输出文件 二 ffprobe …...

VUE3中ref与reactive

ref&#xff1a;支持所有类型reactive&#xff1a;只支持引用类型(Obj&#xff0c;Array...)两者都是实现数据视图响应式 JS逻辑使用中 ref&#xff1a;需要使用.value reactive&#xff1a;不需要使用.value <el-button click"handle()" type"primary"…...

高职院校人工智能技术和无人机技术实训室建设方案

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

x-cmd pkg | shtris: 在终端体验经典的俄罗斯方块游戏

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

Linux基础---07文件传输及解决yum安装失效的方法

Linux文件传输地图如下&#xff0c;先选取你所需的场景&#xff0c;若你是需要Linux和Linux之间传输文件就查看SCP工具即可。 一.下载网站文件 前提是有网&#xff1a; 检查网络是否畅通命令&#xff1a;ping www.baidu.com&#xff0c;若有持续的返回值就说明网络畅通。Ctr…...

[项目][WebServer][Makefile Shell]详细讲解

目录 1.Makefile2. build.sh3.test.sh 1.Makefile 为了方便构建项目&#xff0c;并将其发布&#xff0c;使用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>局部样式&#xff0c;尝试用deep透传也无效 实践成功方法&#xff1a;单独写一个style <style> .el-notification{position: absolute !important;top: 40% !important;left: 40% !important; } </style> 也支持自…...

vivado中的diagram

在 Vivado 中&#xff0c;“Diagram” 选项卡是 IP Integrator 的一部分&#xff0c;它用于创建和编辑 Block Design。Block Design 是一种图形化的设计方法&#xff0c;它允许设计者通过拖放组件&#xff08;如 IP 核和自定义模块&#xff09;并连接它们来构建复杂的数字电路设…...

项目实现:云备份②(文件操作、Json等工具类的实现)

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

‌内网穿透技术‌总结

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

Git使用—把当前仓库的一个分支push到另一个仓库的指定分支、基于当前仓库创建另一个仓库的分支并推送到对应仓库(mit6828)

把学习过程中遇到的Git问题汇总如下&#xff08;后续学习遇到问题会及时更新此专栏&#xff09;&#xff1a; Git原理及常用命令小结——实用版&#xff08;ing......&#xff09;、Git设置用户名邮箱-CSDN博客 解决git每次push代码到github都需要输入用户名以及密码-CSDN博客…...

windows11+ubuntu20.04.6双系统安装

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

如何通过 PhantomJS 模拟用户行为抓取动态网页内容

引言 随着网页技术的不断进步&#xff0c;JavaScript 动态加载内容已成为网站设计的新常态&#xff0c;这对传统的静态网页抓取方法提出了挑战。为了应对这一挑战&#xff0c;PhantomJS 作为一个无头浏览器&#xff0c;能够模拟用户行为并执行 JavaScript&#xff0c;成为了获…...

ARM驱动学习之8 动态申请字符类设备号

ARM驱动学习之8 动态申请字符类设备号 KernelCode: • 字符设备函数在文件“include/linux/fs.h”中 • alloc_chrdev_region() 是动态分配主次设备号。 • 宏定义MAJOR提取dev_t数据中的主设备号源码&#xff1a; /*** alloc_chrdev_region() - register a range of char dev…...

TCP.IP四层模型

一、TCP/IP模型协议分层 1、应用层&#xff1a; 2、传输层&#xff1a; TCP&#xff1a;传输控制协议 UDP&#xff1a;用户数据报协议 3、网络层&#xff1a; IP: 国际协议&#xff08;IP地址&#xff09; ICMP&#xff1a; 互联网控制消息协议&#xff08;互联网…...

极狐GitLab DevSecOps 功能合集(七大安全功能)

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门面向中国程序员和企业提供企业级一体化 DevOps 平台&#xff0c;用来帮助用户实现需求管理、源代码托管、CI/CD、安全合规&#xff0c;而且所有的操作都是在一个平台上进行&#xff0c;省事省心省钱。可以一键安装极狐GitL…...

进阶SpringBoot之异步任务、邮件任务和定时执行任务

SpringBooot 创建 Web 项目 异步任务&#xff1a; service 包下创建 AsyncService 类 Async 异步方法 Thread.sleep(3000) 停止三秒&#xff0c;捕获异常 package com.demo.task.service;import org.springframework.scheduling.annotation.Async; import org.springfram…...

【设计模式-桥接】

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

JVM JMM 专题篇 ( 12000 字详解 )

一&#xff1a;JVM 简介 JVM 是 Java Virtual Machine 的简称&#xff0c;意为 Java 虚拟机&#xff0c;虚拟机是指通过软件模拟的具有完整硬件功能的、运行在一个完全隔离的环境中的完整计算机系统。 常见的虚拟机&#xff1a;JVM、VMwave、Virtual Box&#xff0c;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 基础结…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...