Introducing Trimly

拍完只是第一步

过去几年里,包括你我在内,越来越多的人购入了各种各样能拍视频的电子小玩意:手里拿的,身上挂的,甚至天上飞的。与此同时,人手一支的智能手机的视频性能也在迅猛发展,许多过去只在专业视频机上才能看到的参数和功能,普通人点几下屏幕便可轻松用上。

如果有幸真的在过着一个值得记录的美好生活的话,这些技术进步自然要善加利用。日常逛街遛娃吃吃喝喝、周末短途出游、长假上山下海走遍世界,每次回到家都会产出少则数 GB,上不封顶的大量视频文件。在插着存储卡拷贝文件时,难免陷入思考:拍是拍完了,然后呢?

拍视频那自然是为了看。但与照片不同,视频文件实在是太大了,大到哪怕钞能力拉满,开个 12TB 的 iCloud,仍然没法优雅解决「我想随时看之前拍的东西」的问题:超大视频是绝无可能放到手机里的,这意味着每次想看的时候,都要现场从云上拉取。视频越大,loading 时间越长,足够让人失去耐心。

看到这里,你可能会说 NAS 等 self host 存储方案。这个理论上是可行的,但还是有几个问题:

  • 多谢 AI,硬盘价格已经起飞了,并且一年半载内看不到回落的迹象
  • 国内家用网络的上行带宽是很有限的,在公网环境 load 家里的高码率视频时,等待过程仍然很痛苦
  • 维护 NAS 以及稳定的公网访问,仍然需要一定的技术门槛和持续工作量

同时,我还有以下几个假设:

  • 绝大多数的人都并不是所谓的「内容创作者」,专业的视频内容制作并非我们的兴趣,因此也不需要特别多「素材」的概念
  • 承认吧朋友们,大多数扔进 NAS 里的东西,基本就是吃灰的命。特别是长视频,你是绝对不会再把它们掏出来完整看一遍的。
  • 在持续拍摄记录的过程中,我们真正会每次打开都能露出笑容的,都是一些散落其中的片段,短则数秒(甚至只是一张 live photo),长则一两分钟。其余很多内容并无长期保存必要

于是,一个理想的视频工作流应该是这样的:

  1. 持续录制长视频
  2. 从长视频中剔除无意义、纯浪费时间和存储的片段,保留下相对有意思的部份,存入硬盘/NAS 等冷存储目的地
  3. 再从有意思的部份中,挑出一些真正会反复观看的精华短片,保存到 iCloud 相册中,所有设备都能随时随地回看
  4. 如果有时间的话,把有意思的部份作为视频素材,剪辑一些轻度的 vlog 等作品

带着以上明确的需求,我开始搜索 Apple 生态里能满足的工具。但最后惊讶的发现,从剪映到达芬奇,或者苹果自家的 iMovie 和 Final Cut Pro,抑或 App Store 里浩如烟海的 app,没有一个能把这件看起来不是很复杂,但对整个工作流至关重要的事情做对。

于是,作为一个近 20 年的苹果产品用户,以及有多年专业音视频开发经验的技术工作者,我给自己,以及可能也有类似需求的你,做了一个把 「从长视频里截取片段」 这件事做到极致的产品:

  1. 能简单的在视频里标记很多个或长或短的片段或者截图/live photo 时刻,然后一键把这些内容导出到 Apple Photos 或者文件系统
  2. 导出内容的时间戳要能对应其真实时间,这样才能在 Apple Photos 里和其他照片/视频正确排序,不像微信发过来的那样全是乱套的
  3. 其他媒体元数据,例如拍摄的 GPS、设备、镜头等信息,都尽可能和原始视频保持一致
  4. 要能正确保留 HDR 视频与图像
  5. 要能直接在预览和导出时应用 LUT,不用再打开那些又大又沉的专业视频编辑器
  6. 尽可能像苹果自己做的一样,不需要特别 fancy 的交互,但一定要能稳定高效解决问题

我把它叫做 Trimly.

Trimly is an adverb that means in a neat, orderly, smartly arranged, or well-groomed manner. It describes actions done with tidiness and smart appearance, and is the adverbial form of the word “trim”

How Trimly Works

原生开发,全平台支持

既然目标是「像苹果自己做的一样」,那肯定是要 iPhone/iPad/Mac 都要支持的。得益于现代的 Apple 开发框架,SwiftUI 已经能比较好的实现一套代码,根据不同的屏幕尺寸和设备特征实现响应式布局。

同时作为 What’s a Computer 的资深受害者,我对 iPadOS + 外接键盘/显示器,以及 Stage Manager 下的可缩放窗口等偏门使用场合都做了深度优化。

另外值得一提的是,Trimly 除了 iCloud 外,没有账号系统且完全不连网。同时使用了 0 个第三方库/SDK,所有功能均通过 Apple 第一方 API 实现。不得不说,现在的 AVFoundation/CoreImage/CoreGraphics 确实已经非常完备了,很多以前需要 libffmpeg 才能实现的功能,现在都能自己做好

符合预期的导入导出

无论原始视频是在 Apple Photos 还是文件系统,Trimly 都会直接读取原始文件(哪怕是在外置硬盘)然后添加剪辑点和导出。几十 G 的视频文件,如果还要加个复制导入流程,很有可能直接撑爆内置存储。

对于导出过程,除了上面提到的保留 HDR 和支持套用 LUT 外,Trimly 还支持不同档位的转码,包括不转码的 passthrough 模式,以及在画质/文件大小之间的不同取舍。不同人对 Apple Photos 里该放多大的东西有不同的需求。

Trimly 希望可以让所有用户都不用再二次转码视频。

Metadata 智能处理

在某个版本的 iOS 相册支持显示 EXIF 信息后,越来越多的用户开始希望自己的媒体内容都能有正确的 metadata,就像很多年前 iTunes 让我们重视音乐的专辑与 ID3 信息一样。

Trimly 会给导出的视频尽可能保留全部的metada. 与此同时,还会根据导出内容在原始视频中的偏移量,智能计算导出内容的时间戳。

举个例子,很多人在看演唱会时会一直拿着 Pocket 录像,同时手机也在不停拍照。Pocket 录制的原始长视频的时间戳是起始时间,如果导出一个五分钟到五分十秒的片段,Trimly 会把这个五分钟的偏移量加上去,这样在 Apple Photos 中,该片段会出现在前五分钟手机拍摄的照片之后。

一些 Apple 自己都不那么上心的功能

iOS 8 推出的 Handoff 功能我非常喜欢,但很少有看到第三方 App 能把这个功能做到真的有用且好用,大多数时候,它只是在 Dock 上一个碍眼的图标。

在开发 Trimly 时,我发现自己有一个真实需要这个功能的场景:在电脑上添加剪辑点到一半时,突然需要出门或者去卫生间,但心流不想被中断。因此,我实现了编辑记录的 iCloud 同步,以及授权文件夹内的检索功能。这样,只要两台设备的访问范围里都有相同的文件,就可以无缝接力同步了。

定价

在开发 Trimly 的过程中,相当多的技术选型与架构设计,特别是涉及音视频处理管线的部份,以及和 PhotoKit 打交道的各种技术细节,都远比我预期的复杂。能把所有功能做到 just works,还是具有一定门槛,不是随便 vibe coding 就能轻松做出来,并且整个架构做到清晰可维护的。

在过去几个月里,我自己一直是 Trimly 的头号用户,持续深度使用几乎每一个功能,并尽力打磨每一个细节。目前的完成度也自认为远超绝大多数 vibe 的半成品。

与所有人一样,我痛恨订阅制收费,并且一直是一次性付费模式的拥趸。因此,我设置了发展中地区6元/1美元,发达地区3美元的定价。一次购买,全平台可用。考虑到这是一个可以重塑整个工作流的工具,我认为还是相当便宜的。‌

希望 Trimly 可以帮到和我一样有类似需求的朋友。

官网:https://trimly.zshbleaker.me