.Net 下默認沒有讀寫視頻的類,要進行視頻操作很麻煩,之前用過網上的代碼,用的很不爽。AForge.Net 對 ffmpeg 進行了封裝,不過它引用的dll有點多,且沒提供seek方法,無法跳到指定幀,也有點不爽,俺在 AForge.Net 對FFMPEG 封裝的基礎上,進行了修改,得到 Geb.Video.FFMPEG 庫,現分享出來。
主要功能如下:
l 讀取視頻文件,獲取視頻參數;
l 讀取幀;
l 查找幀;
l 寫入視頻文件。
有了這些功能,可以寫一個簡單的視頻播放器了,當然,視頻轉碼之類的也不在話下。在此基礎上,視頻分析,視頻合成,視頻編輯等等,都可以進行。
License: LGPL v3 license (AFoege.Net 的 license,畢竟是從它修改的). 源碼:https://github.com/xiaotie/GebVideoFFMPEG
演示:
讀取視頻文件,獲取視頻參數
_reader = new VideoFileReader(); _reader.Open(path); String info = String.Format("Video info:\r\n\r\n Width-{0}\r\n Height-{1}\r\n FrameCount-{2}\r\n FrameRate-{3}\r\n Codec-{4}",_reader.Width,_reader.Height,_reader.FrameCount, _reader.FrameRate, _reader.CodecName); tbInfo.Text = info;
讀取下一幀:
ImageRgb24 img = _reader.ReadVideoFrame();
查找幀:
// 指定幀的編號 Int64 idx = _reader.FrameCount * 2 / 3; // 跳到指定幀附近的關鍵幀處,true 為跳到關鍵幀,false 為跳到任意幀 _reader.Seek(idx, true);
寫入視頻文件
VideoFileWriter _writer = new VideoFileWriter(); _writer.Open("output.avi", _reader.Width, _reader.Height, _reader.FrameRate, VideoCodec.MPEG4); // demo 代碼,之處理 100 幀 for (int i = 0; i < 100; i++) { ImageRgb24 img = _reader.ReadVideoFrame(); if (img == null) break; _writer.WriteVideoFrame(img); img.Dispose(); } _writer.Close();
不用時別忘記 Close()。

