当前有需求在window系统录制视频(带声音的),需要支持USB摄像头 或者 支持RTSP的网络摄像头 录制的视频文件需要带压缩的,减少文件储存体积
Fmpeg 是领先的多媒体框架,能够解码、编码、转码、混合、解密、流媒体、过滤和播放人类和机器创造的几乎所有东西(百度的),可以使用现成的 此处 [\狗头]
本次开发采用 C#语言 + ffmpeg 来实现录制 一个录制工具
开发环境 .Net 4.0 + VS2019
录制视频用到的几个FFmpeg的命令行参数说明
参数 | 描述 |
-threads 2 | 指定使用CPU核数(要控制下,要不然CPU的消耗很高) |
-f dshow | 使用微软的DirectShow采集 |
-s 1280x360 | 指定使用摄像头的分辨率 (前提是摄像头支持该分辨率) |
-i video="摄像头的名字" | 指定某个摄像头 |
-vcodec h264 | 视频编码 这里使用h264编码 |
-i video="麦克风名字" | 指定某个麦克风 |
-acodec aac | 音频编码 这里使用aac编码 |
-strict -2 | 双声道 可加可不加 |
-t 120 | 可以指定要录多久就自动停止 单位秒 如果不需要自动停止就不加这项 |
-vf drawtext=\"格式\" | 可以设置画面上的遮罩标题 |
-f mp4 | 指定输出的视频格式 |
-s 1280x360 | 指定输出的视频文件的分辨率(和上面的作用不一样哦,有前后之分的) |
-y | 同名就自动覆盖 |
例如
ffmpeg.exe -threads 2 -f dshow -s 1280x360 -i video="USB Camera" -vcodec h264 -i video="USB (麦克风)" -acodec aac -f mp4 -s 1280x360 -y "D://video//test.mp4"
如果要获取MP4视频文件的某帧转为图片,方便做视频的缩略图 可以使用该指令
ffmpeg.exe -i "D://video//test.mp4" -ss 1 -r 1 -vframes 1 -y "D://video//test.mp4.jpeg"
思路:
1、创建一个录制的任务管理类,监控当前录制的,等待录制的,需要结束录制的(主要是监控进程句柄是否存在)
2、创建一个生产录制任务的工厂类,用于生成一个指令和创建一个Process进程任务
3、回调消息,比如录制开始,录制报错(可能没有摄像头,没有麦克风,要考虑进去),录制完成的后续逻辑
使用到的ffmpeg的 shared文件 本次开发使用 ffmpeg-3.4.2-win32 文件列表如下:
您可以网上下载
下一章就开始写代码