如何用ffmpeg实现视频的智能合成与精准分割?

摘要:视频合成与分割程序使用 作者开发了一款软件,可以实现对视频的合成和分割,界面如下: 下载该程序 播放时,可以选择多个视频源;在选中“保存视频”情况下,会将多个视频源合成一个视频。如果只取一个视频源中一段视频,就实现
视频合成与分割程序使用 作者开发了一款软件,可以实现对视频的合成和分割,界面如下:下载该程序 播放时,可以选择多个视频源;在选中“保存视频”情况下,会将多个视频源合成一个视频。如果只取一个视频源中一段视频,就实现了视频分割。 对视频的处理采用了ffmpeg库。作者在此库的基础上,做了进一步封装,使用起来更加简便。 底层处理逻辑可用如下函数表示: bool InitVideo(); bool AddImage(unsigned char* imageFileBuffer, int bufferSize); bool CloseVideo(); 可见底层函数是十分简洁的; 但是ffmpeg函数调用复杂,使用起来不便;将ffmpeg封装亦非易事;本文就讲述对ffmpeg封装的过程。 视频编码与解码   对视频的处理分为两种:解码和编码。视频播放属于解码,视频生成属于编码。视频播放方面的文章和例子很多;我也写过一篇文章《使用Emgu.CV开发视频播放器简述》。 视频其实就是连续的图片,编码的作用就是压缩图片,减小视频文件的占用。可以把视频文件想象成容器,把一些列图片放入容器,经过编码,生成标准格式的视频文件(如mp4),这个过程就是编码; 把不同视频来源的图片放入容器,就实现了视频的合成;把视频中某段包含的图片放入容器,就实现了视频的分割。只要实现了对多个图片到视频的编码,就实现了视频的合成和分割。 初始化编码器,包括选择编码器,生成输入流,写入文件头等操作。
阅读全文