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

posted @   xiaotie  阅读(10387)  评论(52编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2011-01-05 俺滴图像偏色检测,秒杀其它偏色检测算法
2006-01-05 cppunit helloworld详尽篇
点击右上角即可分享
微信分享提示