项目列表

项目记录 07 · 桌面应用 · 视频处理

标记场景切换点的视频播放器

打开视频 → 执行场景分割 → 在进度条上标记分割点 → 预览并跳转场景 → 保存片段

C#WPFOpenCvSharpFFMEffmpeg

在进度条上直接看到场景切换点并一键跳转

这是一款 Windows 视频播放器,可找出视频中场景切换的位置并在进度条上标记。场景切换通过 OpenCV 帧差和 VGG16 特征距离两种方式检测,除场景检测外的播放器功能均由我开发。

  • 8 项详细面板中的功能
  • 2 件事接入播放器的场景检测方式
  • 10%每次 Ctrl+滚轮缩小的时间轴范围
播放界面

进度条上的黄色标记就是场景切换点。鼠标悬停在标记上即可预览该帧。

已分配角色
除场景切换检测算法外,播放器功能均由我开发,包括进度条上的分割点标记与预览、时间轴缩放、场景跳转、分割点编辑与保存、用 ffmpeg 保存片段以及媒体信息窗口。
成果
播放器接收 Python 检测结果,在进度条上标记场景切换点,并可在同一界面完成预览、跳转、修改和片段保存。
  1. 1分割点标记将检测到的帧显示为进度条上的标记
  2. 2预览与跳转鼠标悬停在标记上可预览该帧,点击即跳转
  3. 3时间轴缩放用 Ctrl+滚轮以鼠标位置为中心放大和缩小
  4. 4编辑与保存添加和删除分割点、保存元信息、用 ffmpeg 保存片段

此技术预期带来的变更

长视频也能按场景浏览

通过上一场景、下一场景按钮和进度条上的标记,可直接找到想看的场景。

放大后挑选密集的分割点

用 Ctrl+滚轮以鼠标位置为中心放大时间轴,靠得很近的分割点也能分辨并选择。

人工修整自动检测结果

可以删除误检的分割点、补上遗漏的分割点并保存,自动检测后的人工修正在同一界面中完成。

问题及解决方案

  1. 问题在时间轴放大状态下跳到下一场景时,该点会落到可见范围之外。

    已解决。当目标点超出范围时,会把范围扩大到比该点再多 5 秒,使其一并显示。

  2. 问题用 OpenCV 保存片段时会丢失声音。

    已解决。改用 ffmpeg 截取片段,连声音一起保存。

  3. 问题播放器无法得知 Python 检测何时结束。

    已解决。结果文件生成后即绘制分割点并启用按钮,检测运行期间则阻止新的检测。

播放器界面

详细面板

场景分割、场景跳转、分割点编辑和片段保存都在这个面板中完成,同时还显示视频的编码和分辨率等信息。