热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C#ffmpeg录制音视频

最近研究用ffmpeg录制桌面视频,以下是研究时碰到的问题以及成果记录下。FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计

最近研究用ffmpeg录制桌面视频,以下是研究时碰到的问题以及成果记录下。

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。

ffmpeg视频采集功能非常强大,不仅可以采集视频采集卡或USB摄像头的图像,还可以进行屏幕录制,同时还支持以RTP方式将视频流传送给支持RTSP的流媒体服务器,支持直播应用。

目前我们使用的是视频采集功能

从cmd命令中进入ffmpeg.exe所在的文件夹

如ffmpeg.exe在 E:\ffmpeg\bin\ffmpeg.exe

E:
cd E:\ffmpeg\bin

获取电脑的音频和摄像头设备:

ffmpeg -list_devices true -f dshow -i dummy

得到以下设备:

screen-capture-recorder  是视频设备

virtual-audio-capturer 是音频设备

如果有带中文乱码可以下载DirectShow SDK自带的工具GraphEdit

查看视频设备参数:

ffmpeg -f dshow -list_options true -i video="screen-capture-recorder"

 pixel_format 像素格式  

s  分辨率

-r 帧率

录制桌面视频有两种方法:

用dshow类型找到桌面输出的设备 要下载一个Screen Capturer Recorder程序 才会得到录制桌面的设备(捕捉视频的速度较快)

ffmpeg -f dshow -r 10 -i video="screen-capture-recorder" -vcodec libx264 -preset:v ultrafast -crf 36 a.mp4

-f 输出类型

-i 输出设备

-r 帧率

-vcodec 视频编码

-preset 视频速度(越快占用cpu越少)

-crf 压缩视频内存

用gdigrab 类型无需安装程序即可捕捉桌面(捕捉视频的速度没有dshow快)

ffmpeg -f gdigrab -framerate 10 -i desktop -vcodec libx264 -preset:v ultrafast -crf 36 a.mp4

-framerate  帧率

-video_size 视频大小

offset_x  设置x轴距离

offset_y   设置y轴距离

录制音频设备:

ffmpeg -f dshow -i audio="virtual-audio-capturer" -acodec aac -strict -2 a.aac

-acodec aac  是ffmpeg自制的AAC编码器,需要开启"-strict experimental"参数,音质也不差。

录制音视频:

ffmpeg -f gdigrab -framerate 10 -i desktop -f dshow -i audio="virtual-audio-capturer" -vcodec libx264 -preset:v ultrafast -crf 36 -acodec aac -strict -2 a.mp4

ffmpeg -f dshow -r 10 -i video="screen-capture-recorder":audio="virtual-audio-capturer" -vcodec libx264 -preset:v ultrafast -crf 36 -acodec aac -strict -2 a.mp4

代码示例如下:

获取音频设备:

var audioDevices = new FilterInfoCollection(FilterCategory.AudioInputDevice);foreach (FilterInfo device in audioDevices ){devicesList.Add(device.Name);}

获取视频设备:

var videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);foreach (FilterInfo device in videoDevices){devicesList.Add(device.Name);}

cmd :

Process p;
public void Init() {p = new Process();//启动引用程序p.StartInfo.FileName = "cmd.exe";p.StartInfo.UseShellExecute = false;p.StartInfo.RedirectStandardInput = true;p.StartInfo.RedirectStandardOutput = true;p.StartInfo.RedirectStandardError = true;p.StartInfo.CreateNoWindow = false;p.StartInfo.WindowStyle = ProcessWindowStyle.Normal;p.OutputDataReceived += new DataReceivedEventHandler(p_OutputDataReceived);p.ErrorDataReceived += new DataReceivedEventHandler(p_ErrorDataReceived);p.Start();p.BeginErrorReadLine();p.BeginOutputReadLine();}void p_ErrorDataReceived(object sender, DataReceivedEventArgs e){if (e.Data != null){Console.WriteLine(e.Data);}//throw new NotImplementedException();}void p_OutputDataReceived(object sender, DataReceivedEventArgs e){if (e.Data != null){Console.WriteLine(e.Data);}}public void stopRecord() {p.StandardInput.WriteLine("q &exit");}public void RecordVideo(string audioDeviceName,string fileName){string command = Application.StartupPath + "\\" + "ffmpeg.exe -f gdigrab -framerate 10 -i desktop -f dshow -i audio=" + audioDeviceName + " -vcodec libx264 -preset:v ultrafast -crf 36 -acodec aac -strict -2 " + fileName;// 向cmd窗口发送输入信息p.StandardInput.WriteLine(command);p.StandardInput.AutoFlush = true;}

demo下载路径:

https://download.csdn.net/download/qq_35319925/16092620?spm=1001.2014.3001.5501

 


推荐阅读
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
  • 如何搭建Java开发环境并开发WinCE项目
    本文介绍了如何搭建Java开发环境并开发WinCE项目,包括搭建开发环境的步骤和获取SDK的几种方式。同时还解答了一些关于WinCE开发的常见问题。通过阅读本文,您将了解如何使用Java进行嵌入式开发,并能够顺利开发WinCE应用程序。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
author-avatar
趣校区导购网
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有