源码分为前端(./src
)和后端(./src/backend
)两部分,前端负责界面的显示,后端负责资源管理与视频处理。
src
文件夹中的XXXManager
头文件与源文件分别对应主窗口UI中的XXX
部分,如VideoListManager
对应视频列表。DialogManager
则管理所有对话框,如导入视频文件的对话框。QtBasedVideoEditor
中包含了主窗口的UI定义,以及主窗口的初始化与信号槽的连接。
src/backend
文件夹中,Resource
定义了资源类型;Resources
管理所有资源;Editor
负责视频的剪裁、切分、合并;ResVideo
(Res意为Result)管理生成最终视频。后端的3个负责执行的类都使用了单例模式。
用户通过主窗口UI进行操作,前端获取到必要的参数后,将参数传递给后端。
后端进行相应处理,如将视频文件加入视频资源列表,或将某视频资源加入生成最终视频所需的视频列表。
后端处理完成后,前端重新从后端获取数据,更新UI。如 VideoList、MaterialList 从Resources中获取数据,Timeline 从 ResVideo 中获取数据。
Timeline
菜单部分的功能,如将视频与素材添加到时间轴,后端由ResVideo
负责。添加资源到时间轴的过程不会真正修改视频,而是将修改的操作记录下来,等到需要生成最终视频时,才调用ffmpeg一次性完成所有修改。
功能主要在菜单栏中。中央区域的Play
按钮与进度条在播放视频时可用。
细节与亮点说明
-
大部分功能都支持批量处理,即选中多个资源后,点击对应的菜单项,可以同时对多个资源进行操作。顺序则是按照选中的顺序,因此十分方便。导入功能同样支持批量导入。
-
File菜单:
- 导入后会显示相关资源的信息,如视频的大小、时长。
- “导出视频文件”提供了较丰富的选项。会将时间轴上的所有变化应用到最终视频上,如内嵌字幕、覆盖图片。
-
Edit菜单:
- 起止时间支持使用小数。
-
Timeline菜单
- 添加素材时会根据选中的素材,自动分析添加的是哪一种素材(字幕、图片、文本),并弹出相应的对话框。
- 选项较丰富,如文本可以设置字号、颜色、字体。
-
View菜单:
- Preview: 预览选中的视频。循环播放。
- Preview Result: 生成并预览结果视频。若在本次点击与上一次点击之间没有对视频进行任何修改,则不重新生成视频,可直接预览上一次生成的视频,以节省时间。
-
时间轴中,第一条是视频轴,第二条是字幕轴,第三条及以后是素材轴(当前时间轴放不下时就新增一条)。将字幕与其他素材分开,是考虑到字幕没有明确的持续时长。
- 不同视频与素材用不同色块区分。各视频与素材都标有id与名称,方便对应到具体资源。
- 视频轴上能看到视频的长度比例与顺序。素材轴上也能看到素材的长度比例;当素材的长度超过视频总长度时,会自动缩短显示长度到恰好覆盖整个时间轴。
-
支持一个资源使用多次,如将一个视频资源添加到时间轴多次,或将一个图片资源添加到时间轴多次。
-
在预览窗口中,可以通过拉进度条来调整视频的播放进度。点击Play/Pause按钮可以播放/暂停视频。时间轴处的进度条也会同步更新。
-
退出时弹窗提示再次确认。
-
程序会在
./tmp
目录下生成临时文件,退出时会自动删除该目录(正在预览的视频则不会删除)。