耗費了兩天的時間, 最後終於找到了靠譜的方案: OpenCvSharp
播放已解決,保存視頻目前存出來文件大小爲0. 可能是需要下載OpenCV原程序。 正在下,好慢!
核心代碼:
private void PlayCamera()
{
var capture = new VideoCapture(0);
//此處參考網上的讀取方法
int sleepTime = (int)Math.Round(1000 / capture.Fps);
// 聲明實例 Mat類
Mat image = new Mat();
var size = new OpenCvSharp.Size(capture.FrameWidth, capture.FrameHeight);
FourCC fourCC = FourCC.H264; //FourCC.FromString(capture.FourCC);
VideoWriter videoWriter = new VideoWriter();
videoWriter.Open("abc.mp4", fourCC, capture.Fps, size);
// 進入讀取視頻每鎮的循環
while (true)
{
if (playing == false)
{
image.Release();
capture.Release();
videoWriter.Release();
return;
}
capture.Read(image);
//判斷是否還有沒有視頻圖像
if (image.Empty())
break;
// 在picturebox中播放視頻, 需要先轉換成bitmap格式
picImage = this.pictureBox1.Image;
if (picImage != null)
{
picImage.Dispose();
picImage = null;
}
videoWriter.Write(image);
this.pictureBox1.Image = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(image);
// 在Window窗口中播放視頻
//window.ShowImage(image);
Cv2.WaitKey(sleepTime);
}
}
先要 nuget 引入 OpenCVSharp最新版(4.5)
OpenCV程序正在下載.
經測試,不需要opencv的原程序,而是codec(FourCC)要與擴展名對應。比如mjpg要使用.avi, h265或 h264要使用 .mp4
視頻size參數也要和加入的圖片相同,不然輸出的大小也是0
fps可以不同,如果fps比寫入的fps低,則爲滿房,否則爲快放。