首页 > 编程语言 >C#使用FFmpeg录制视频

C#使用FFmpeg录制视频

时间:2023-02-07 14:46:08浏览次数:75  
标签:dshow 30 FFmpeg min C# max 录制 00000259a63dc680 fps

FFmpeg通过控制台命令可以方便地录制USB摄像头和屏幕,本文使用C#中的Process类调用FFmpeg命令,并通过获取控制台输出参数实现录制视频的完整功能。

Gitee完整代码:FFmpegWrappedSharpRecorder

1、获取设备列表

FFmpeg命令:

ffmpeg.exe -list_devices true -f dshow -i dummy

关键输出: 

[dshow @ 0000018b1a24c740] "USB2.0 HD UVC WebCam" (video)
[dshow @ 0000018b1a24c740] "麦克风阵列 (Realtek(R) Audio)" (audio)

设备列表信息是在控制台的错误信息流中输出的,需要重定向错误信息。另外,可根据上述输出示例提取出音视频设备列表。

需要注意的是,需要设置输出编码为UTF8,防止中文显示乱码。

2、获取视频设备分辨率列表

FFmpeg命令:

ffmpeg.exe -list_options true -f dshow -i video="USB2.0 HD UVC WebCam"

关键输出: 

[dshow @ 00000259a63dc680] DirectShow video device options(from video devices)
[dshow @ 00000259a63dc680]  Pin "捕获" (alternative pin name "捕获")
[dshow @ 00000259a63dc680]   vcodec=mjpeg min s=1280x720 fps = 30 max s = 1280x720 fps = 30
[dshow @ 00000259a63dc680]   vcodec=mjpeg min s=800x600 fps = 30 max s = 800x600 fps = 30
[dshow @ 00000259a63dc680]   vcodec=mjpeg min s=640x480 fps = 30 max s = 640x480 fps = 30
[dshow @ 00000259a63dc680]   vcodec=mjpeg min s=352x288 fps = 30 max s = 352x288 fps = 30
[dshow @ 00000259a63dc680]   vcodec=mjpeg min s=320x240 fps = 30 max s = 320x240 fps = 30
[dshow @ 00000259a63dc680]   vcodec=mjpeg min s=176x144 fps = 30 max s = 176x144 fps = 30
[dshow @ 00000259a63dc680]   vcodec=mjpeg min s=160x120 fps = 30 max s = 160x120 fps = 30
[dshow @ 00000259a63dc680]   pixel_format=yuyv422 min s=640x480 fps = 30 max s = 640x480 fps = 30
[dshow @ 00000259a63dc680]   pixel_format=yuyv422 min s=1280x720 fps = 10 max s = 1280x720 fps = 10
[dshow @ 00000259a63dc680]   pixel_format=yuyv422 min s=800x600 fps = 20 max s = 800x600 fps = 20
[dshow @ 00000259a63dc680]   pixel_format=yuyv422 min s=352x288 fps = 30 max s = 352x288 fps = 30
[dshow @ 00000259a63dc680]   pixel_format=yuyv422 min s=320x240 fps = 30 max s = 320x240 fps = 30
[dshow @ 00000259a63dc680]   pixel_format=yuyv422 min s=176x144 fps = 30 max s = 176x144 fps = 30
[dshow @ 00000259a63dc680]   pixel_format=yuyv422 min s=160x120 fps = 30 max s = 160x120 fps = 30

设备列表信息是在控制台的错误信息流中输出的,需要重定向错误信息。另外,可根据上述输出示例提取出视频设备分辨率列表。

3、获取视频编码器列表

FFmpeg命令:

ffmpeg.exe configure -encoders

关键输出: 

V....D libx264              libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (codec h264)
V....D libx264rgb           libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 RGB (codec h264)
V....D libopenh264          OpenH264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (codec h264)
V....D h264_amf             AMD AMF H.264 Encoder (codec h264)
V....D h264_mf              H264 via MediaFoundation (codec h264)
V....D h264_nvenc           NVIDIA NVENC H.264 encoder (codec h264)
V..... h264_qsv             H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (Intel Quick Sync Video acceleration) (codec h264)
V....D libx265              libx265 H.265 / HEVC (codec hevc)
V....D hevc_amf             AMD AMF HEVC encoder (codec hevc)
V....D hevc_mf              HEVC via MediaFoundation (codec hevc)
V..... hevc_qsv             HEVC (Intel Quick Sync Video acceleration) (codec hevc)
V....D libkvazaar           libkvazaar H.265 / HEVC (codec hevc)视频编码器列表信息

视频编码器列表信息是在控制台的标准输出流中输出的,需要重定向输出信息。另外,可根据上述输出示例提取出视频编码器列表。

4、录制视频

录制视频需要在开始录制时保留Process对象,在结束录制时退出该进程。

4.1 录制USB摄像头视频

FFmpeg命令:

ffmpeg.exe -f dshow -i video="USB2.0 HD UVC WebCam":audio="麦克风阵列 (Realtek(R) Audio)" -c:v libx264 -s 1280x720 -r 15 D:\test.mp4

其中,-c:v libx264表示使用libx264编码器,-s 1280x720表示设置视频分辨率为1280x720,-r 15表示设置视频帧率为15,最后的D:\test.mp4表示保存录制视频的文件。

4.2 录制屏幕

FFmpeg命令:

ffmpeg.exe -f dshow -i audio="麦克风阵列 (Realtek(R) Audio)" -f gdigrab -i desktop -c:v libx264 -r 15 D:\test.mp4

其中,-f gdigrab表示使用GDI抓屏,-i desktop表示录制屏幕。

注意:这种方式默认会将所有屏幕都录制进去,可以通过指定–offset_x(左上角偏移量X)、–offset_y(左上角偏移量Y)及–video_size(需要录制的宽度和高度)参数实现录制指定区域屏幕的视频。

4.3 停止录制

输入字母q,并等待ffmpeg退出。

_process.StandardInput.WriteLine("q");
_process.WaitForExit();
_process.Close();

5、FFmpegWrappedSharpRecorder程序效果

标签:dshow,30,FFmpeg,min,C#,max,录制,00000259a63dc680,fps
From: https://www.cnblogs.com/xhubobo/p/17098301.html

相关文章

  • C语言填空:交换变量的值
    //交换任意两个整型变量的值//【】位置需要填写相应内容,保证程序能正常运行,无警告提示。【1】main(){inta=1,b=2;printf("a=%d,b=%d\n",a,b);a=【2......
  • golang gc介绍
    1.什么是GC在计算机科学中,垃圾回收(GC)是一种自动管理内存的机制,垃圾回收器会去尝试回收程序不再使用的对象及其占用的内存。最早JohnMcCarthy在1959年左右发明了垃......
  • 双搜浏览器(自制) C#版
    示例完成百度和bing同时搜索,要增加其他搜索方式,增加配置即可。1、引入cefCefSharp.WinForms2、绘制界面布局使用splitContainer完成上下,下(左右)浏览器布局3、设置双......
  • centos7+nginx+uwsgi+python3.7.4+django部署实践
    yuminstallpython3yuminstallpython3-develyum-yinstallgccgcc-c++pip3installuwsgipython3​​manage.py​​runserver10.5.1.65:82uwsgi--iniuwsgi.i......
  • .NET(C#、VB)APP开发——Smobiler平台控件介绍:MarqueeLabel
    本文简述如何在Smobiler中使用MarqueeLabel。Step1.新建一个SmobilerForm窗体,并在窗体中加入MarqueeLabel,控件Size设置(300,30),布局如下MarqueelLabel可以直接在设计器......
  • 我是如何用CAP和BASE两个基础理论卷死其他组员的?
    本文内容整理自博学谷狂野架构师​ CAP定理又被称作布鲁尔定理,是加州大学的计算机科学家布鲁尔在2000年提出的一个猜想。2002年,麻省理工学院的赛斯·吉尔伯特和南......
  • Scaffold-DbContext使用教程
    1.基础准备   安装对应的三个nuget包,第二个nuget由你使用数据库决定 2.命令说明 Scaffold-DbContext为DbContext数据库的和实体类型生成代码。为了使Sca......
  • django1.4设置模板路径和CSS,JS,image等路径的方法
    对于DJANGO这类MVC框架来说,路径问题可以称为一个谜一样的东西,很多人因为对路径不知道如何处理而觉得MVC实在是云里雾里不知所云。本文主要解决django中关于模板路径设置、CS......
  • 图表控件LightningChart.NET 系列教程(八):LightningChart 组件——从工具箱添加至 Windo
    LightningChar​t.NET​ SDK是一款高性能数据可视化插件工具,由数据可视化软件组件和工具类组成,可支持基于Windows 的用户界面框架(WindowsPresentationFoundation)、Win......
  • RPC框架的路由策略
    1为什么选择路由策略?真实环境的服务提供方以集群提供服务,对服务调用方,就是一个接口会有多个服务提供方同时提供服务,所以RPC每次发起请求时,要从多个服务提供方节点里选择一......