# Geb.Video.FFMPEG.Demo **Repository Path**: snapshot2018/Geb.Video.FFMPEG.Demo ## Basic Information - **Project Name**: Geb.Video.FFMPEG.Demo - **Description**: Geb.Video.FFMPEG.Demo,操作视频文件 - **Primary Language**: C# - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 1 - **Created**: 2018-08-22 - **Last Updated**: 2023-09-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Geb.Video.FFMPEG.Demo 操作视频文件 .Net 下默认没有读写视频的类,要进行视频操作很麻烦。[AForge.Net](http://www.aforgenet.com/) 对 [ffmpeg](http://ffmpeg.org/) 进行了封装,不过它引用的dll有点多,且没提供seek方法,无法跳到指定帧,也有点不爽,俺在 AForge.Net 对FFMPEG 封装的基础上,进行了修改,得到 Geb.Video.FFMPEG 库,现分享出来。 主要功能如下: - 读取视频文件,获取视频参数; - 读取帧; - 查找帧; - 写入视频文件。 有了这些功能,可以写一个简单的视频播放器了,当然,视频转码之类的也不在话下。在此基础上,视频分析,视频合成,视频编辑等等,都可以进行。 License: [LGPL v3 license](http://www.gnu.org/licenses/lgpl.html) (AFoege.Net 的 license,毕竟是从它修改的). 源码:[GebVideoFFMPEG](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()`。