视频编辑器 ffcutter

ffcutter 初版写完有段日子了。本想着把功能再丰富下, UI 规范后再开源,无奈此后一连数月都忙于新家的智能家居系统的设计开发,ffcutter 就淡忘了。就以现状开源了吧,献给有缘人 。

项目地址

开发环境

  • C++17
  • Qt 5.15
  • FFmpeg 4.3.1
  • Visual Studio Community 2019

代码结构

如上图,核心能力以 fccore 动态链接库形式提供,FCService 为接口类。对 FFmpeg 各个功能模块再做一层类封装,简化操作步骤,方便复用。

类名均以 FC 为前缀,取自 Fast forword Cutter。

功能介绍

快速跳转

跳转到指定时间戳后的第一个关键帧。

所谓快速,即只解封装,不解码。对 h264 等帧间编码格式,只有关键帧是内容自足的,B 帧、P 帧的图像内容均依赖相邻帧共同还原。

具体技术细节可参考 FFmpeg AVSEEK_FLAG_BACKWARD 文档。

精确跳转

跳转到不晚于指定时间戳后的第一帧。

跳转耗时同 GOP 大小有很大关系。如果恰好需要跳转到某一关键帧之后的一帧,就需要解码 GOP - 1 帧。

通过预览图快速确定视频截取的起止时间

左键双击预览图,使用预览图对应帧的时间戳填充起始时间编辑框;右键双击,快速填充结束时间编辑框。

如要截取 jpg 等静态图,左键双击要截取的帧,右键双击下一帧。

文字

文字以 FFmpeg drawtext Filter 实现,支持 文本表达式 以显示动态内容,但为了简化使用方式,只支持全视频添加固定文字,不支持指定时间段。

文字支持自选字体,作者存放于 repo 中的几种字体,仅为测试之用,请在使用前确认其授权形式。

字幕

以 FFmpeg subtitles Filter 实现,支持 srt ass 等格式。除支持复杂的时间戳规则外,字幕同文字另一个不同的地方在于,字幕是以流(stream)的形式存储于容器文件中的,而非修改视频帧,将文字绘制于上。

自定义滤镜

理论上支持所有其它 FFmpeg Filter,语法同 ffmpeg.exe,ffcutter 会将其拼接到上边所列 Filter 之后。

不足之处

UI 简陋

敝人区区一草莽大汉,于此精巧之工,实无能为力也~

产品思路感人

没有时间线的概念,不能预览全视频;没有视频回放;没有基于音频的剪辑。

多段剪辑、拼接

一次只能剪辑一个片段。理想的情况下,应支持多段视频剪辑,然后内存中直接拼接成一个视频。

评论