LosslessCut 3.67.1 更新全解析:拼接对话框改进、系统语言支持与截图到剪贴板
【免费下载链接】lossless-cutThe swiss army knife of lossless video/audio editing项目地址: https://gitcode.com/gh_mirrors/lo/lossless-cut
本篇文章以 versions/3.67.1.md 版本说明为骨架,结合仓库源码,深入剖析 LosslessCut 3.67.1 引入的三项核心改进:拼接(concat)对话框的交互升级、基于操作系统语言的界面自动适配,以及新增的captureSnapshotToClipboard截图到剪贴板键盘动作。读完本文,你将掌握这一版本每个新特性的操作入口、默认快捷键、底层实现原理,以及如何在批量剪辑工作流中组合使用它们。
3.67.1 版本概览
LosslessCut 3.67.1 是一个以"体验打磨"为主的维护型版本。根据 versions/3.67.1.md 的官方说明,本次更新共包含 4 项内容:
- Improve concat dialog—— 全面改进多文件拼接对话框的用户体验与兼容性检查
- Enable system language support—— 支持跟随操作系统语言自动切换界面语言
- Capture snapshot to clipboard
captureSnapshotToClipboard—— 新增"截图到剪贴板"键盘动作,可直接将当前帧复制为图片 - Bugfixes and improvements—— 若干错误修复与体验改进
在 src/renderer/src/versions.json 中,该版本对应的highlightsMd字段与版本说明文件完全一致,是应用内"What's new"(更新日志对话框,自 3.67.0 起引入)所展示的内容。结合前后版本(3.67.0 与 3.67.2)的演进脉络可以看出,3.67.x 系列正在集中优化文件合并、键盘操作体系与多语言支持三块基础能力。
改进一:拼接对话框(Concat Dialog)的用户体验升级
对话框的定位与使用场景
拼接(merge/concatenate)是 LosslessCut 中把多个视频文件首尾相接合并为一个文件的批量操作。在 src/renderer/src/components/ConcatDialog.tsx 的对话框描述中明确说明了它的边界:
此对话框用于按顺序串联文件,例如
[file1][file2][file3]。它不能用于并行合并轨道(例如给视频添加一条音轨)。请确保所有文件的编码格式与编码参数(fps、分辨率等)完全一致。
也就是说,concat 只做"接龙式"合并,不做多轨混合。这是判断拼接结果是否正确的第一原则。
文件兼容性检查:核心改进点
拼接最棘手的问题在于:如果各文件的编码参数不一致(如帧率不同、分辨率不同、像素格式不同),合并结果可能无法正常播放。3.67.1 的改进重点正是围绕这一点展开的。
从源码看,对话框会调用 ffprobe 读取每个待拼接文件的流元数据(readFileFfprobeMeta),然后将后续文件与第一个文件逐流(stream)比对,检查的参数包括:
| 参数键 | 含义 | 比对方式 |
|---|---|---|
codec_name | 编码器名称(如 h264、aac) | 严格相等 |
width/height | 画面尺寸 | 严格相等 |
pix_fmt | 像素格式(如 yuv420p) | 严格相等 |
level/profile | 编码等级与规格 | 严格相等 |
sample_fmt | 音频采样格式 | 严格相等 |
avg_frame_rate | 平均帧率 | 按比值解析后容差 0.01 比较 |
r_frame_rate | 实时帧率 | 严格相等 |
time_base | 时间基 | 严格相等 |
这一比对逻辑位于 src/renderer/src/components/ConcatDialog.tsx。注意帧率的特殊处理:avg_frame_rate通过parseRatio解析为数值后,以 0.01 的容差(sigma)进行比较,避免30000/1001与29.97这类等价写法被误判为不匹配(详见源码中引用的 讨论 #2740 相关注释)。
当检测到问题时,文件行会显示黄色警告图标,点击后弹出"Mismatches detected"(检测到不匹配)表格,逐条列出Track(轨道号)、Parameter(参数)、Expected(期望值)、Actual(实际值),其中"实际值"以红色加粗突出显示;若某个文件多出了第一个文件没有的轨道,则标记为 "Extraneous"(多余轨道)。全部通过的文件则显示绿色对勾。
对话框同时提供了"Check compatibility"(检查兼容性)复选框来控制是否启用这项预检:未启用时会明确警告"合并操作可能不会产生有效输出文件";启用后若发现问题仍允许继续合并,但会提示"结果文件可能无法播放"。此外,在简易模式(simple mode)下该项默认开启且不显示复选框,以避免干扰初级用户。
输出文件命名与选项
拼接结果的文件名由合并模板(merged file template)控制。3.67.0 起该模板可以像普通导出一样使用变量,3.67.1 继续沿用了这一能力。默认模板定义在 src/renderer/src/util/outputNameTemplate.ts:
${FILENAME}-merged-${EPOCH_MS}${EXT}即"源文件名 +-merged-+ 毫秒时间戳 + 扩展名",保证每次合并都不覆盖同名输出。简易模式下,对话框会根据第一个文件自动生成完整文件名并预填到模板输入框,用户无需手动处理变量(ConcatDialog.tsx)。
点击"Options"(选项)按钮可展开合并参数:
- Include all tracks?—— 是否包含全部音/视/字幕/数据轨道;未勾选时仅包含默认流
- Preserve original metadata when merging? (slow)—— 合并时保留原始元数据(较慢)
- Preserve all MP4/MOV metadata?—— 仅在输出格式为 MOV 时出现,保留 MP4/MOV 全部元数据
- Create chapters from merged segments? (slow)—— 从合并的段落生成章节(较慢)
- Always open this dialog when opening multiple files—— 打开多个文件时总是弹出本对话框
- Clear batch file list after merge—— 合并完成后清空批量文件列表
这些选项中的preserveMetadataOnMerge、preserveMovData、segmentsToChapters等均来自用户设置(useUserSettings),会随会话持久化。拼接还受普通导出对话框中相关设置的约束,例如输出目录选择器OutDirSelector决定保存位置,OutputFormatSelect决定输出容器格式(默认根据第一个文件自动推荐,见 ConcatDialog.tsx)。
改进二:启用系统语言支持
语言检测链路
3.67.1 之前,LosslessCut 的界面语言需要手动指定;本版本起应用会读取操作系统当前区域设置来作为默认语言。底层实现位于 src/main/i18n.ts:
.use({ type: 'languageDetector', async: false, detect: () => app.getLocale() })即通过 Electron 主进程的app.getLocale()获取系统语言代码,作为 i18next 语言检测器的返回值;随后在 src/main/index.ts 的changeLanguage函数中调用i18n.changeLanguage(...)完成切换,语言偏好同时会写入配置存储(src/main/configStore.ts 中的language字段),因此用户手动选择的语言会被记住并优先于系统语言。
语言包资源
仓库的 locales 目录维护了 38 种语言的翻译文件,每种语言一个translation.json,包括:
- 东亚:
zh_Hans(简体中文)、zh_Hant(繁体中文)、ja(日语)、ko(韩语) - 欧洲:
de、fr、es、it、pt、pt_BR、ru、uk、pl、cs、sk、ro、hu、nl、sv、nb_NO、nn、da(含挪威语 Bokmål 与 Nynorsk)等 - 中东/南亚:
ar、he、fa、tr、ta、si等 - 世界语:
eo、id、vi、et、fi、lt、sl、sr、hr等
值得注意的是 src/main/i18nCommon.ts 中的一段注释:开发团队出于对部分语言翻译质量的顾虑,默认仍回退到英语,即"系统语言支持"是尽力而为的回退策略——检测到系统语言但该语言质量未知时,会安全地显示英文而非错误的翻译。这保证了多语言支持不会破坏核心体验。另外,3.67.1 的相邻版本 3.68.0 继续新增了挪威语 Bokmål(Norsk Bokmål),可见该语言体系仍在持续扩充中。
改进三:新增captureSnapshotToClipboard截图到剪贴板动作
功能入口与默认快捷键
3.67.1 为"截取当前帧图片"提供了新的键盘动作captureSnapshotToClipboard,与既有的captureSnapshot(保存为文件)和captureSnapshotAsCoverArt(设为封面)并列。它在键盘动作类型定义中注册,见 src/common/types.ts 中的KeyboardAction联合类型;在快捷键面板中归入 output 分类,显示名称为 "Capture snapshot to clipboard",见 src/renderer/src/components/KeyboardShortcuts.tsx。
默认快捷键定义于 src/main/configStore.ts:
{ keys: 'ShiftLeft+KeyC', action: 'captureSnapshotToClipboard' }即Shift+C。注意 3.67.0 起按键绑定改为使用原生 Web 键盘事件(KeyC表示物理键盘上的 C 键),因此该快捷键在不同键盘布局下行为一致,不会受输入法或布局切换影响。该快捷键可在应用的快捷键设置中按需修改。
底层实现:FFmpeg 取帧 + Electron 剪贴板
动作的完整调用链如下:
- 触发与取时:渲染进程在 src/renderer/src/App.tsx 中实现
captureSnapshotToClipboard,先通过getRelevantTime()获取当前播放时间点(若存在选中段落,取相关时间而非随意位置),随后调用useFrameCapture暴露的captureFrameToClipboard(见 src/renderer/src/hooks/useFrameCapture.ts)。 - FFmpeg 抽取单帧:主进程 src/main/ffmpeg.ts 中的
captureFrameToClipboard构造 ffmpeg 命令:-ss <时间戳> -i <视频> -frames:v 1 -q:v <质量> -c:v mjpeg -f image2 -,即将指定时间点的一帧编码为 JPEG 并输出到标准输出(不落盘)。 - 写入系统剪贴板:主进程将 stdout 字节流通过
nativeImage.createFromBuffer转为原生图像对象,再调用clipboard.writeImage写入系统剪贴板,见 src/main/ffmpeg.ts。此时在任意应用中直接Ctrl+V(或Cmd+V)即可粘贴该截图。
整个流程全程不产生临时文件,适合快速分享画面、插入文档或聊天工具等场景。执行期间界面会显示"Exporting"状态并屏蔽并发操作(workingRef防重入);成功后弹出 toast 提示 "Screenshot captured clipboard"(在未禁用通知的前提下),简易模式下还会触发彩带动画(src/renderer/src/App.tsx)。如果 FFmpeg 解析失败,则会通过统一的错误处理机制提示 "Failed to capture frame"。
与已有截图动作的对比
| 动作 | 默认快捷键 | 输出方式 | 典型用途 |
|---|---|---|---|
captureSnapshot | 另有绑定 | 保存为图片文件 | 批量导出帧、做素材 |
captureSnapshotAsCoverArt | — | 写入媒体封面元数据 | 快速为视频设置封面 |
captureSnapshotToClipboard | Shift+C | 直接写入系统剪贴板 | 快速粘贴分享、插入文档 |
三者共享 FFmpeg 取帧参数(质量由captureFrameQuality设置控制,对应-q:v),区别仅在输出目标。对剪辑工作流而言,"截图到剪贴板"省去了打开输出目录、重命名文件再复制的环节,是最轻量的取帧方式。
其他修复与改进
3.67.1 的末尾条目 "Bugfixes and improvements" 涵盖了本版本未单独列出的稳定性修复。从仓库版本序列(versions.json)看,紧随其后的 3.67.2 移除了有问题的"自动纠正视频 Codec tag"选项并新增hevc_metadata=aud=insert位流过滤器,3.68.0 又新增了FILES模板变量与多项键盘动作——这说明 3.67.1 的"修复与改进"也包含了对上一版本(3.67.0 引入的 UI/无障碍/深色模式、原生键盘事件等)的回归修正,为后续功能迭代打下了稳定基础。
升级与验证建议
- 升级方式:通过应用内自动更新、各发行渠道(Flathub、Snap、MS Store、MAS 等)获取 3.67.1 及后续版本;本版本说明可通过菜单中的"What's new"对话框再次查看(内容源自 versions.json 的
highlightsMd)。 - 验证拼接功能:准备两段编码参数一致的视频,打开批量列表执行合并;再故意混入一段不同帧率或分辨率的视频,观察"Mismatches detected"表格是否准确列出 Track、Parameter、Expected、Actual 四列信息。
- 验证系统语言:将操作系统区域切换为中文(
zh_Hans)、日语或德语等已支持语言后重启应用,确认界面跟随系统语言;再在设置中手动切换语言,确认偏好被持久化。 - 验证截图到剪贴板:打开任意视频,按
Shift+C,在图像编辑器中粘贴,确认画面与当前时间点一致且无临时文件残留。
综上,LosslessCut 3.67.1 虽是一个小版本,却通过拼接兼容性检查、系统语言回退策略与剪贴板取帧三个方向的打磨,显著降低了多文件合并与画面分享的操作成本,值得所有批量剪辑用户升级体验。
【免费下载链接】lossless-cutThe swiss army knife of lossless video/audio editing项目地址: https://gitcode.com/gh_mirrors/lo/lossless-cut
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考