关于音视频,看了很多的博客,发现都很难正确的打开设备与录制。然后就自己瞎搞,突然发现能正确的录制与打开了,故此记录一下。
一、官方wiki

https://trac.ffmpeg.org/wiki/Capture/ALSA
提取一句关于音频录制的命令:

ffmpeg -f alsa -channels 1 -sample_rate 44100 -i hw:0 -t 30 out.wav

linux选择alsa的设备,mac上是avfoundation,sample_rate指的是采样率,channels是通道数,视系统而定,笔者这里选择单通道会报错,错误如下:

[alsa @ 0x55b0f9f49780] cannot set channel count to 1 (Invalid argument)
hw:0: Input/output error

然后我修改成了双通道就ok了。这里还有一个坑就是插上耳机的时候,打开系统设置可以查看到相关的状态

主机分了两对插口MIC和SPK,一个是前置,一个是后置。MIC是麦克风,SPK是声音。坑就是无论-i 后面带的参数是什么,设备都无法正常打开,拔掉MIC的插口,设备就可以正常使用了,但是没麦接收音频录制下来,当然是什么都没有。这里卡了很久。所以就去官方wiki上查看相关参数,使用F6选择声卡,然而也并没有什么用。

报错信息是:
[alsa @ 0x55e15eb4b780] cannot open audio device hw:0 (Device or resource busy) hw:0: Input/output error
提示设备忙碌,麦克风被占用,但是拔了插都不行,重启也不行。最后发现正是因为打开了系统设置这个界面在占用中…,真的是吃了没文化的亏啊…
二、验证
使用ffplay out.wav播放一下视频验证就好了。
三、使用ffmpeg的库录制音频
1、安装apt install ffmpeg
至于其他的依赖库,缺什么补什么就好了
2、代码实现
头文件

//
// Created by 黑桃k on 2021/3/8.
//#ifndef LEANCPP_AV_H
#define LEANCPP_AV_H
extern "C" {#include "libavcodec/avcodec.h"
#include "libavdevice/avdevice.h"
#include "libavutil/common.h"
#include "libavutil/frame.h"
#include "libavformat/avformat.h"};
#endif //LEANCPP_AV_H

主函数文件

#include <iostream>
#include "av.h"
using namespace std;int main() {// register deviceavdevice_register_all();// set logger levelav_log_set_level(AV_LOG_DEBUG);// get input device formatAVInputFormat *format = av_find_input_format("alsa");// init contextAVFormatContext *fmt_ctx = nullptr;std::string deviceName = "hw:0";AVDictionary *options = nullptr;// open audio deviceint ret = avformat_open_input(&fmt_ctx, deviceName.c_str(), format, &options);if (ret < 0) {std::cout << "Failed to open audio device!" << std::endl;}AVPacket ptk;av_init_packet(&ptk);string filepath = "test.pcm";FILE *out = fopen(filepath.c_str(), "wb");int count = 0;while (!ret && count++ < 1000) {ret = av_read_frame(fmt_ctx, &ptk);// write filefwrite(ptk.data,ptk.size,1,out);std::cout << "ptk.size:" << ptk.size << std::endl;std::cout << "count:" << count << std::endl;// release ptkav_packet_unref(&ptk);}fflush(out);fclose(out);// close deviceavformat_close_input(&fmt_ctx);std::cout << "Hello, World!" << std::endl;return 0;
}

CMakeList.txt

cmake_minimum_required(VERSION 3.17)
project(leanCpp)
set(CMAKE_CXX_STANDARD 14)
include_directories(include)
add_executable(leanCpp main.cpp include/av.h)
target_link_libraries(leanCpp avutil avdevice avformat avcodec)

测试:ffplay -ar 44100 -ac 2 -f s16le test.pcm
这里还是有坑的,代码默认的格式,笔者也不是很清楚,属于刚入坑的新手,后续阅读源码在更新吧。使用ffmpeg -formats | grep PCM 查看系统支持的pcm格式,然后试了s16le,发现可以正常播放了。
嗯嗯…记录一下这个坑,欢迎小白报团…

ffmpeg录制音频 命令行与C++实现相关推荐

  1. 07_音频录制01_命令行

    终于要开始进行FFmpeg实战了,一起来感受一下FFmpeg的强大吧. 命令简介 FFmpeg的bin目录中提供了3个命令(可执行程序),可以直接在命令行上使用. ffmpeg ffmpeg的主要作用 ...

  2. 【秒懂音视频开发】07_音频录制01_命令行

    命令简介 FFmpeg的bin目录中提供了3个命令(可执行程序),可以直接在命令行上使用. 3个命令 ffmpeg ffmpeg的主要作用:对音视频进行编解码. # 将MP3文件转成WAV文件 ffm ...

  3. 音视频处理 ffmpeg初级开发 命令行工具-实用命令

    参考链接 ffmpeg Documentation 作者:smallest_one  链接:FFmpeg命令行工具-实用命令 - 简书 目录 1,help命令使用 1.1 ffmpeg命令的语法结构 ...

  4. ubuntu下用ffmpeg录制音频文件

    ubuntu下用ffmpeg命令可以录制视频文件和音频文件,其中录制音频文件很简单,其基本格式为: ffmpeg -f alsa <input_options> -i <input_ ...

  5. ffmpeg 视频裁剪 命令行+C实现(无B帧视频)

    ffmpeg 命令行 ffmpeg -i k.mp4 -ss 00:00:00 -t 10 out.pm4 -ss 指定裁剪的开始时间,精确到秒 -t 被裁剪后的时长. c代码实现 说一些主要 avf ...

  6. FFmpeg+Python打造命令行工具箱

    目录 总操作模式的设计 一次可以处理多个文件. 一个例子 多文件处理的技巧 参数设计 输出路径 工具一.Gif 转换器 方法来源 效果参考 实际指令 代码以及使用 工具二.画面裁切(crop) 参数 ...

  7. FFmpeg下载及命令行使用

    下载地址 访问FFmpeg官网 选择Dlownload 选择 Windows Package 选择相应版本 点击进行下载,并进行解压,可得到如下几个文件 版本说明 Static: 只包含了3个体积很大 ...

  8. ffmpeg / avconv是通用的视频/音频编解码命令行工具【转】

    来自:http://blog.csdn.net/smilefyx/article/details/46793685 通用是既指他们可以处理各种各样的编码的视频和音频,转换成各种需要的格式,又指他们是跨 ...

  9. ffmpeg / avconv是通用的视频/音频编解码命令行工具

    转载自:http://blog.openlg.net/index.php/archives/767 ffmpeg / avconv是通用的视频/音频编解码命令行工具. 通用是既指他们可以处理各种各样的 ...

  10. ffmpeg c++代码推流RTSP/RTMP(命令行推流)

    由于ffmpeg推出的rtsp或者rtmp端口需要Listen,所以需要开启端口TCP/UDP,之后采用ffmpeg向端口推送数据 第一,安装rtsp-simple-server release下载地 ...

最新文章

  1. node上传资源到又拍云
  2. php中函数的定义格式,在php中函数定义的格式
  3. Linux下主DNS与辅助DNS的配置(上)
  4. MVC、MVP、MVVM分别是什么?有什么区别?
  5. storyboard搭建项目_swift项目第五天:swift中storyBoard Reference搭建主界面
  6. resize和reverse的区别
  7. 秘籍分享:SLB实例克隆
  8. vscode必备插件_10个必备的Visual Studio Code (VS code)插件
  9. 【OJ】洛谷函数与结构体题单题解锦集
  10. 微服务难点剖析 | 服务拆的挺爽,问题是日志该怎么串联起来呢?
  11. python_cookie
  12. 百度云BaaS体系揭秘,突破共识机制、单机计算和串行处理三大瓶颈
  13. fatal error: hb.h: 没有那个文件或目录
  14. linux spi驱动开发学习-----spidev.c和spi test app
  15. 小白如何打造一个基础的留言板网站(二)
  16. Allergo 无法修改单位
  17. 111-unsplash-for-chrome-2021-07-22
  18. 一体机(广告投放机)开发
  19. FirefoxOS横竖屏切换应用开发一般方法总结
  20. Conflunce从JIRA同步用户账户的配置方法

热门文章

  1. iOS应用出现未验证应用的问题排查
  2. iOS证书描述文件说明
  3. 听听周报-谷歌发布首款真无线耳机 Pixel Buds|苹果发布全新头戴式耳机 Beats Solo Pro
  4. [词根词缀]cre/cred/crit/cult字根由来及词源C的故事
  5. pic pwm 占空比可调 源码_PWM占空比 调节实例
  6. 绕过校园网认证实现免费上网【三端】
  7. 如果你的开发板上STM32采用外部晶振,那么就不能选择BYPASS Clock Source (旁路时钟源)模式,否则STM32将会工作不正常。
  8. Excel简单学习笔记(1)
  9. 中国各省的简称及省会
  10. 【路由器无线桥接的步骤实现】水星路由器MW150R作为副路由器无线桥接TP-Link主路由器