Winform 攝像頭 預覽播放 同時 生成視頻

耗費了兩天的時間, 最後終於找到了靠譜的方案: 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低,則爲滿房,否則爲快放。 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章