首页 > 编程语言 >使用OpenCVSharp和NAudio库在C#中录制带有声音的视频并保存下来的代码

使用OpenCVSharp和NAudio库在C#中录制带有声音的视频并保存下来的代码

时间:2023-03-21 20:15:02浏览次数:50  
标签:视频 frame C# NAudio 录制 videoCapture OpenCVSharp new 音频

using OpenCvSharp;
using NAudio.Wave;
// 定义视频和音频的参数
int fps = 30;
Size videoSize = new Size(640, 480);
WaveFormat audioFormat = new WaveFormat(44100, 16, 2);
// 创建视频编码器
VideoWriter videoWriter = new VideoWriter("output.avi", FourCC.XVID, fps, videoSize, true);
// 创建音频录制器
WaveFileWriter audioWriter = new WaveFileWriter("audio.wav", audioFormat);
// 创建视频捕获器
VideoCapture videoCapture = new VideoCapture(0);
videoCapture.Set(CaptureProperty.FrameWidth, videoSize.Width);
videoCapture.Set(CaptureProperty.FrameHeight, videoSize.Height);
videoCapture.Set(CaptureProperty.Fps, fps);
// 创建音频捕获器
WaveInEvent audioCapture = new WaveInEvent();
audioCapture.WaveFormat = audioFormat;
audioCapture.DataAvailable += (sender, e) =>
{
audioWriter.Write(e.Buffer, 0, e.BytesRecorded);
};
// 开始录制音频和视频
videoWriter.Open();
videoCapture.Start();
audioCapture.StartRecording();
while (true)
{
Mat frame = new Mat();
videoCapture.Read(frame);
if (frame.Empty())
break;
videoWriter.Write(frame);
Cv2.ImShow("video", frame);
if (Cv2.WaitKey(1) == 27)
break;
}
// 停止录制音频和视频
videoCapture.Release();
videoWriter.Release();
Cv2.DestroyAllWindows();
audioCapture.StopRecording();
audioWriter.Close();
audioWriter.Dispose();
// 合并音视频
var videoFile = new MediaFile { Filename = "output.avi" };
var audioFile = new MediaFile { Filename = "audio.wav" };
var outputFile = new MediaFile { Filename = "output.mp4" };
using (var engine = new Engine())
{
engine.Convert(videoFile, audioFile, outputFile);
}

首先定义了视频和音频的参数。然后创建了视频编码器和音频录制器,以便能够将视频和音频写入文件。接下来创建了视频和音频的捕获器,以便能够从摄像头和麦克风捕获图像和声音。 在主循环中不断从摄像头中读取图像,并将其写入视频文件中。同时通过OpenCVSharp的ImShow函数将图像显示在屏幕上。当用户按下ESC键时,程序退出主循环。 最后,我们停止录制音频和视频,并将它们合并成一个MP4文件。这里我们使用了FFmpeg的C#封装库FFmpeg.NET来进行音视频合并。

标签:视频,frame,C#,NAudio,录制,videoCapture,OpenCVSharp,new,音频
From: https://www.cnblogs.com/LuoCore/p/17241242.html

相关文章

  • linux 安装anaconda
    一、下载安装包清华镜像站中anaconda的所有版本的网址:https://link.zhihu.com/?target=https%3A//mirrors.tuna.tsinghua.edu.cn/anaconda/archive/在终端输入:选择合......
  • python3 抽象类Abstract Classes
    python3抽象类AbstractClasses抽象类可以这么理解,它就是一个模板,里面声明了子类必须定义的函数,但是对于每个函数都没有给出具体实现。所有函数的实现都是在子类中定义。......
  • 爬虫相关 scrapy架构介绍、scrapy解析数据、settings相关配置,提高爬取效率、持久化方
    scrapy架构介绍#引擎(EGINE)引擎负责控制系统所有组件之间的数据流,并在某些动作发生时触发事件。#调度器(SCHEDULER)用来接受引擎发过来的请求,压入队列中,并在......
  • python - PaddleOCR
    1.安装pip3installpaddleocr-ihttps://pypi.tuna.tsinghua.edu.cn/simplepip3installpaddlepaddle-ihttps://mirror.baidu.com/pypi/simple2.使用frompadd......
  • CF1739C Card Game
    题目地址题意:有n(n为偶数)张大小不同的卡牌,现在A和B玩一个游戏,规则是如果一个人出示了一张卡牌,另一个人无法出示更大的卡牌,他就赢了,如果反之该回合结束,并将这两张牌移除(移......
  • CS/INFO 5304数据预处理
    CS/INFO5304Assignment1:DataPreparationCredit:94pointsGrade:20%offinalgradeSubmission:Filesthatneedtobesubmittedforarelistedattheendofe......
  • CVPR论文解读《Learning To Count Everything》
    密集场景下的目标检测与计数———CVPR论文解读《LearningToCountEverything》计数是我们经常会碰到的问题,使用最贴近我们生活实际的情景举例。例如统计上课已到教室......
  • Pytorch安装与基础知识
    Pytorch安装与基础知识安装环境:Win10专业版显卡:NviidaGeforceGTX1660Ti安装Anacodna官网下载安装安装CudaCuda官网下载安装包。进入CMD,使用命令nvcc-V测......
  • 「解题报告」ARC128F Game against Robot
    好厉害的题。震撼到了。大部分参考Atcoder计数乱做-苹果蓝17。我的观察能力还是太差,一点条件都观察不出来,连\(p\)固定怎么做都不会。下面令\(n\gets\frac{n}{2......
  • Cookie的封装-2与Cookie 的注意事项
    Cookie的封装-2<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Cookie的封装</title></head><body><buttonid="cn">......