Skip to content

v5.0.0-alpha

Pre-release
Pre-release

Choose a tag to compare

@OliverZhaohaibin OliverZhaohaibin released this 07 Apr 15:11
· 445 commits to main since this release
b9840cd

🚀 v5.0.0 — Video Editing, Trim System & Platform Stability

🎬 Full non-destructive video editing, a visual trim timeline, centralized keyboard shortcuts, and a sweeping round of Linux/GL stability fixes.

Key Updates

✂️ Video Editing Workflow

  • Introduced a complete non-destructive video editing suite powered by a smooth OpenGL-accelerated preview pipeline.
  • Added a visual trim timeline with thumbnail strip, draggable in/out handles, and real-time playhead clamping inside the trim range.
  • Trim in/out points are saved to the sidecar file and persist across app restarts; the gallery duration badge now reflects the trimmed length.
  • Playback progress bar is remapped to the active trim range so the scrubber always tracks the visible portion of the clip.
  • Fixed stale progress bar after returning from edit mode — duration is force-synced when the video is reloaded.
  • Added video transport keyboard shortcuts (seek, play/pause, frame-step) inside the video edit panel.
  • Simplified the video edit sidebar section layout for a cleaner editing experience.

⌨️ Centralized Keyboard Shortcuts

  • Introduced AppShortcutManager — a single class that owns all application-level keyboard bindings, eliminating duplicated shortcut setup across components.
  • Space bar play/pause now works reliably in both gallery view and detail view.
  • Added full gallery-mode video shortcuts: volume up/down, mute toggle (M key), and playback controls.
  • Fixed M-key mute shortcut registration; renamed shortcut volume constant for clarity.

🔍 Zoom Handle in Gallery / Detail View

  • Added a resize/zoom handle in the video header bar so users can adjust the preview size directly from the gallery and detail view without entering edit mode.
  • Zoom state is emitted via zoomChanged and properly synced when switching renderer surfaces or clearing a frame.

🐧 Linux GL Playback Stability

  • Fixed a critical black-screen bug in adjusted (edited) video playback on Linux caused by Qt's QRhi context not owning the OpenGL state needed by the custom GL renderer.
  • Aligned the Linux QRhi GL viewer with the Qt GL context; used Qt GL functions for VAO creation with an automatic fallback when QRhi rejects VAO binds.
  • Hardened GL matrix uniform uploads and stabilized video frame dispatch on the GUI thread to eliminate flicker and rotation artifacts on Linux.
  • Snapshots non-packed video frames before uploading to prevent intermittent corruption.
  • Fixed Linux edit-preview viewport sizing and queuing of frames to avoid dropped frames during playback.

🖼️ Crop Overlay & Edit Transition Fixes

  • Fixed crop overlay disappearing when the overlay VAO was unavailable — the renderer now falls back to default vertex-array state so the orange crop frame always renders.
  • Cleared stale pre-existing GL errors before binding the overlay VAO; those errors were silently disabling the overlay on Linux.
  • Restored correct crop-frame fade behavior: the orange border always remains visible; only handles and guides are suppressed in faded state.
  • Deferred restoration of the detail chrome and filmstrip until the edit-exit animation fully completes, preventing layout jumps.
  • Respected the user's filmstrip visibility preference when leaving edit mode.
  • Fixed video canvas proportions after exiting edit mode by using crop_center_zoom_strength=1.0 in detail/non-edit mode.

🎞️ Video Metadata & Info Panel

  • Implemented multi-level cross-brand lens extraction for both video and image assets — the info panel now resolves lens model, focal length, and aperture from multiple ExifTool fields across all major camera brands.
  • ExifTool is invoked during video playback enrichment to populate lens/focal-length fields that are absent from the media container.
  • Fixed normalization of raw LensInfo tuples (e.g. "23 23 2 2") into human-readable strings ("23mm f/2").
  • Eliminated duplicated focal-length/aperture suffixes when the lens string already contains mm notation.
  • Fixed the ƒ aperture format in the info panel display.

🐛 Fixes of major bugs

  • Fixed video rotation not refreshing immediately when changed in playback mode.
  • Fixed ExternalToolError not being caught explicitly during playback metadata enrichment, preventing silent failures.
  • Fixed _restore_detail_video_preview to correctly use video_requires_adjusted_preview and pass raw adjustments on the native render path.
  • Fixed out-point reset when re-entering edit mode — PlaybackCoordinator now guards trim remapping in edit mode.
  • Fixed SHA-1 usage in temp file naming replaced with SHA-256 for stronger stability guarantees.
  • Fixed GL glBindTexture redundancy before glGenerateMipmap calls.
  • Used ctypes c_uint GL id buffers to avoid numpy dtype warnings on Windows.
  • Fixed QShortcut parent widget to use the top-level window instead of a nested widget, preventing shortcuts from silently failing.
  • Fixed several other minor bugs and improved overall stability.

🚀 v5.0.0 — 视频编辑、裁剪系统与平台稳定性

🎬 全功能非破坏性视频编辑、可视化裁剪时间线、集中式快捷键管理,以及针对 Linux/GL 稳定性的大规模修复。

核心更新

✂️ 视频编辑工作流

  • 引入了全套非破坏性视频编辑套件,由平滑的 OpenGL 加速预览管线驱动。
  • 新增可视化裁剪时间线,包含缩略图条、可拖动的入点/出点手柄,以及裁剪范围内的实时播放头限制。
  • 裁剪的入点和出点将保存至 Sidecar 文件并在应用重启后持久保存;图库中的时长角标现在会反映裁剪后的长度。
  • 播放进度条已重新映射至激活的裁剪范围,确保进度滑块始终对应片段的可视部分。
  • 修复了从编辑模式返回后进度条停滞的问题——在视频重新加载时强制同步时长。
  • 在视频编辑面板中增加了视频传输快捷键(寻道、播放/暂停、逐帧步进)。
  • 简化了视频编辑侧边栏的布局,提供更清爽的编辑体验。

⌨️ 集中式快捷键

  • 引入 AppShortcutManager —— 统一管理所有应用级键盘绑定的类,消除了跨组件的重复快捷键设置。
  • 空格键播放/暂停现在可在图库视图和详情视图中稳定运行。
  • 增加了完整的图库模式视频快捷键:音量增减、静音切换(M 键)及播放控制。
  • 修复了 M 键静音快捷键的注册问题;为清晰起见重命名了音量快捷键常量。

🔍 图库/详情视图缩放手柄

  • 在视频标题栏增加了调整大小/缩放手柄,用户可以直接在图库和详情视图中调整预览尺寸,无需进入编辑模式。
  • 缩放状态通过 zoomChanged 发送,并在切换渲染表面或清除帧时保持同步。

🐧 Linux GL 播放稳定性

  • 修复了 Linux 上调整(已编辑)视频播放时出现的严重黑屏错误;该错误是由 Qt 的 QRhi 上下文未持有自定义 GL 渲染器所需的 OpenGL 状态导致的。
  • 将 Linux QRhi GL 视图与 Qt GL 上下文对齐;使用 Qt GL 函数创建 VAO,并在 QRhi 拒绝 VAO 绑定时自动回退。
  • 强化了 GL 矩阵 Uniform 上传,并稳定了 GUI 线程上的视频帧调度,以消除 Linux 上的闪烁和旋转伪影。
  • 在上传前对非打包视频帧进行快照处理,以防止间歇性的图像损坏。
  • 修复了 Linux 编辑预览视口的大小计算和帧队列处理,避免播放过程中丢帧。

🖼️ 裁剪叠加层与编辑切换修复

  • 修复了当叠加层 VAO 不可用时裁剪覆盖层消失的问题——渲染器现在会回退到默认顶点数组状态,确保橙色裁剪框始终显示。
  • 在绑定叠加层 VAO 之前清除既有的 GL 错误;这些错误此前会在 Linux 上静默禁用叠加层。
  • 恢复了正确的裁剪框淡出行为:橙色边框始终可见,仅在淡出状态下隐藏手柄和辅助线。
  • 推迟了详情页装饰元素和胶片栏的恢复,直至退出编辑的动画完全结束,防止布局跳动。
  • 退出编辑模式时,将遵循用户对胶片栏可见性的偏好设置。
  • 通过在详情/非编辑模式下使用 crop_center_zoom_strength=1.0,修复了退出编辑模式后的视频画布比例。

🎞️ 视频元数据与信息面板

  • 实现了针对视频和图像资源的多级跨品牌镜头信息提取——信息面板现在可以从所有主流相机品牌的多个 ExifTool 字段中解析镜头型号、焦距和光圈。
  • 在视频播放增强过程中调用 ExifTool,以填充媒体容器中缺失的镜头/焦距字段。
  • 修复了原始 LensInfo 元组(如 "23 23 2 2")向人类可读字符串(如 "23mm f/2")的归一化处理。
  • 当镜头字符串已包含 mm 符号时,消除了重复的焦距/光圈后缀。
  • 修复了信息面板显示中的 ƒ 光圈格式。

🐛 重大错误修复

  • 修复了在播放模式下更改视频旋转角度后无法立即刷新的问题。
  • 修复了在播放元数据增强期间未显式捕获 ExternalToolError 的问题,防止静默失败。
  • 修复了 _restore_detail_video_preview 以正确使用 video_requires_adjusted_preview 并在原生渲染路径上传递原始调整参数。
  • 修复了重新进入编辑模式时出点重置的问题——PlaybackCoordinator 现在会在编辑模式下保护裁剪映射。
  • 临时文件命名中的 SHA-1 替换为 SHA-256,以提供更强的稳定性保障。
  • 修复了 glGenerateMipmap 调用前多余的 GL glBindTexture 操作。
  • 使用 ctypes c_uint 作为 GL ID 缓冲区,以避免 Windows 上的 numpy dtype 警告。
  • 修复了 QShortcut 父级部件,使其指向顶级窗口而非嵌套部件,防止快捷键静默失效。
  • 修复了其他若干细微 Bug 并提升了整体稳定性。