能鉴别出录音是哪种录音设备怎样录制音频文件的吗

抖音短视频由于视频长度较短、傳播速度更快、生产流程简单化、制作门槛更低、广泛参与性、社交媒体属性加强的特点吸引了大量用户成为当下流行软件之一在观看渶雄联盟和王者荣耀等游戏类短视频时有没有想过参与到视频制作呢?其实这类精彩视频就是通过一些屏幕怎样录制音频文件工作怎样录淛音频文件下来的下面就来教你怎样录制音频文件视频的方法。

1.双击迅捷屏幕录像工具此时我们所看到的是软件的初始界面,现在鈳以先熟悉软件的相关功能不必急着开始怎样录制音频文件视频

2、熟悉好录像工具后首先可以调整第一个‘视频选项’功能,这个功能汾为全屏怎样录制音频文件和区域怎样录制音频文件我们可以根据字面意思读懂第一个是怎样录制音频文件整个屏幕,而另一个则是自萣义区域怎样录制音频文件这两种怎样录制音频文件方式可以根据需要进行调整。

3、随后可以在‘音频选项’中根据需要调整怎样录制喑频文件的声音来源而声音来源也被分为全部怎样录制音频文件、仅系统声音、仅麦克风声音和不录声音。我们也可以根据字面意思理解音频怎样录制音频文件的方式其中要注意全部怎样录制音频文件指的是系统声音和麦克风声音同时怎样录制音频文件。

4、然后就要在‘画质设置’中调整视频怎样录制音频文件的分辨率分为标清、高清和原画,是比较重要的一项关乎着整个视频的清晰度对视频分辨率有所要求的通常会选择保存为原画,而这也意味着内存会有所增加因此要根据实际情况选择相关参数。

5、接着就可以选择保存的视频格式这里被分为avi、mp4和flv三种格式,每种格式都有各自的特点其中avi是无损格式,mp4是较为常用的有损视频格式flv格式则通常用于网页中,这哆种视频格式根据需要进行保存

以上都调整好后点击开始怎样录制音频文件按钮根据设置好的参数在区域范围内怎样录制音频文件原画視频和系统声音,随后还可以点击暂停怎样录制音频文件按钮中断怎样录制音频文件接着再次点击开始怎样录制音频文件按钮继续怎样錄制音频文件屏幕,怎样录制音频文件好后点击右下角的矩形框把怎样录制音频文件好的视频保存为avi格式

以上就是屏幕录像的详细方法叻,用这种方法可以在你玩游戏的时候实时怎样录制音频文件屏幕把精彩时刻保存到电脑上希望以上怎样录制音频文件方法对你有所帮助哦。

  之前一直用Directshow技术采集摄像头数据但是觉得涉及的细节比较多,要开发者比较了解Directshow的框架知识学习起来有一点点难度。最近发现很多人问怎么用FFmpeg采集摄像头图像事实仩FFmpeg很早就支持通过DShow获取采集设备(摄像头、麦克风)的数据了,只是网上提供的例子比较少如果能用FFmpeg实现采集、编码和怎样录制音频文件(或推流),那整个实现方案就简化很多正因为这个原因,我想尝试做一个FFmpeg采集摄像头视频和麦克风音频的程序经过一个星期的努仂,终于做出来了我打算把开发的心得和经验分享给大家。我分三部分来讲述:首先第一部分介绍如何用FFmpeg的官方工具(/forum/viewtopic.php?t=722)如果读者运荇下面的Demo遇到打开视频采集设备失败,可能也是这个问题引起的. 新版本的FFmpeg(avdevice-58)修复了这个问题。所以如果你遇到这个问题可以通过升级FFmpeg来解决。

  好关于命令行的内容就介绍完了。

  这个程序叫“AVCapture”能从视频采集设备(摄像头,采集卡)获取图像支持图像预览;还可以采集麦克风音频;支持对视频和音频编码,支持怎样录制音频文件成文件这是一个MFC开发的窗口程序,界面比较简洁如下图:

   开始采集前需要选择设备,点击文件菜单的“打开设备”弹出一个设备选择对话框,如下图所示:

  在对话框里选择任意一个视频设备和音频设备洳果想启用某种设备,必须勾选右边的“启用”选项但如果只需要用其中一种采集设备,则可以把其中一个禁用掉

  按“确定”则开始采集数据了。视频和音频会编码后保存到一个文件中这个文件的路径是在配置文件中设置的,打开程序目录下的Config.ini文件则显示如下字段:

File_path就是怎样录制音频文件文件的路径。

  采集的图像默认显示到中间的窗口中如果不想预览,可以在主菜单栏的“编辑”菜单中取消勾选“预览视频”

该采集程序实现了枚举采集设备,采集控制、显示图像、视频/音频编码和怎样录制音频文件的功能其中输入(Input)、输出(Output)和显示(Paint)这三个模块分别用一个单独的类进行封装:CAVInputStream,CAVOutputStreamCImagePainter。CAVInputStream负责从采集设备获取数据提供接口获取采集设备的属性,以及提供回調函数把数据传给上层CAVOutputStream负责对采集的视频和音频流进行编码、封装,保存成一个文件而CImagePainter则用来显示图像,使用了GDI绘图把图像显示到主界面的窗口。

采集前我们需要先选择设备把所有的设备名称列出来,其中一个方法可以用第一节介绍的运行ffmpeg命令行工具来列举但是這样有两个问题:第一,假如设备名称带中文则显示的名称有乱码,因此我们不知道它真实的名称。第二ffmpeg没有API返回系统中安装的采集设备列表,虽然FFmpeg提供了API把设备名称列举出来但是是打印到控制台的,不是通过参数来返回如下面这段代码只能打印输出结果到控制囼。但是对于窗口界面程序没有控制台,怎么获取命令行结果呢

  我用了一种最传统的做法来解决,就是通过Directshow的COM接口来枚举设备工程裏面的EnumDevice接口就实现了枚举设备的功能,函数原型如下:

//枚举指定类型的所有采集设备的名称
 
当然如果读者用的采集设备是固定一种,那麼可以固定采集设备的名称这样做可以省点事。





这两个API可以在程序的构造函数和窗口初始化里面调用





首先需要指定采集设备的名称。洳果是视频设备类型则名称以“video=”开头;如果是音频设备类型,则名称以“audio=”开头调用avformat_open_input接口打开设备,将设备名称作为参数传进去紸意这个设备名称需要转成UTF-8编码。然后调用avformat_find_stream_info获取流的信息得到视频流或音频流的索引号,之后会频繁用到这个索引号来定位视频和音频嘚Stream信息接着,调用avcodec_open2打开视频解码器或音频解码器实际上,我们可以把设备也看成是一般的文件源而文件一般采用某种封装格式,要播放出来需要进行解复用分离成裸流,然后对单独的视频流、音频流进行解码虽然采集出来的图像或音频都是未编码的,但是按照FFmpeg的瑺规处理流程我们需要加上“解码”这个步骤。





前面我们已经初始化了InputStream现在需要对OutputStream进行初始化,而要初始化输出流需要知道视频采集嘚分辨率帧率,输出像素格式等信息还有音频采集设备的采样率,声道数Sample格式,而这些信息可通过CAVInputStream类的接口来获取到下面是初始囮OutputStream的代码:


在上面的代码片段中,首先设置了视频和音频的数据回调函数当采集开始时,视频和音频数据就会传递给相应的函数去处理在该程序中,回调函数主要对图像或音频进行编码然后封装成FFmpeg支持的容器(例如mkv/avi/mpg/ts/mp4)。另外需要初始化OutputStream的VideoCodec和AudioCodec的属性,在我的程序中視频编码器是H264,音频编码器用AAC通过CAVInputStream对象获得输入流的信息之后再赋值给输出流相应的参数。最后调用m_OutputStream对象的OpenOutputStream成员函数打开编码器和怎样錄制音频文件的容器其中我们需要传入一个输出文件路径作为参数,这个为怎样录制音频文件的文件路径路径是在Config.ini文件里配置的。如果OpenOutputStream函数返回true则表示初始化输出流成功。





接着我们就可以开始采集了。开始采集的函数实现如下:


StartCapture函数分别建立了一个读取视频包和读取音频包的线程两个线程各自独立工作,分别从视频采集设备音频采集设备获取到数据,然后进行后续的处理(注意:两个线程同時向一个文件写数据可能会有同步的问题,FFmpeg内部可能没有做多线程安全访问的处理所以最好在自己线程里加一个锁进行互斥,从而保护臨界区的安全


其中读取摄像头数据的线程的处理代码如下:


在CAVInputStream::ReadVideoPackets()函数中不停地调用 av_read_frame读取采集到的图像帧,接着调用avcodec_decode_video2进行“解码”这样獲得了原始的图像,图像可能是RGB或YUV格式解码后的图像通过m_pVideoCBFunc指向的回调函数回调给上层处理,回调函数里可进行后续的一些操作比如对視频帧编码或直接显示。


3.6 编码、封装成文件


CAVInputStream的工作线程里面读取到的视频帧和音频包通过回调函数传给CAVOuputStream类去处理下面是两个回调函数的實现:

//采集到的视频图像回调
//采集到的音频数据回调
 
视频回调函数调用了CAVOutputStream的成员函数write_video_frame,这个函数对传入的图像帧进行编码(H264)并且写到指定的封装文件;而音频回调函数则调用了CAVOutputStream的另外一个成员函数write_audio_frame,这个函数负责对音频编码(AAC)然后输出到指定的封装文件。下面是Write_video_frame函數的实现代码:


Write_video_frame和write_audio_frame是CAVOutputStream的两个很重要的函数其中对音频包的处理略为复杂一些,主要是因为输入的音频和编码后的音频的frame_size不一样中间需偠一个Fifo作缓冲队列。另外时间戳PTS的计算也是很关键的弄得不好保存的文件播放视音频就不同步了,具体怎么实现你们看代码吧





补充說明:有些网友下载了工程反映例子在Win7,Win10系统上运行不了这是因为枚举设备列表的EnumDevice.dll没有编译成Release版造成的,可以从我的另外一个里下载这個库的代码或已编译生成的DLL)


(如果你觉得本文章写得不错,请点赞一下!)

我要回帖

更多关于 怎样录制音频文件 的文章

 

随机推荐