.Net下使用 Geb.Video.FFMPEG 操作視頻文件


.Net 下默認沒有讀寫視頻的類,要進行視頻操作很麻煩,之前用過網上的代碼,用的很不爽。AForge.Netffmpeg 進行了封裝,不過它引用的dll有點多,且沒提供seek方法,無法跳到指定幀,也有點不爽,俺在 AForge.Net 對FFMPEG 封裝的基礎上,進行了修改,得到 Geb.Video.FFMPEG 庫,現分享出來。

主要功能如下:

l 讀取視頻文件,獲取視頻參數;

l 讀取幀;

l 查找幀;

l 寫入視頻文件。

有了這些功能,可以寫一個簡單的視頻播放器了,當然,視頻轉碼之類的也不在話下。在此基礎上,視頻分析,視頻合成,視頻編輯等等,都可以進行。

License: LGPL v3 license (AFoege.Net 的 license,畢竟是從它修改的). 源碼:https://github.com/xiaotie/GebVideoFFMPEG

演示:

wps_clip_image-5141

代碼下載:Geb.Video.FFMPEG.Demo

讀取視頻文件,獲取視頻參數

_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()。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM