不重新编码地剪切视频(以及什么时候必须重新编码)
剪一段视频不必等待一次完整的重新编码——dzzz 的视频剪切工具如何在几秒钟内完成裁剪,以及这种速度在哪里会失效。
为什么要这样做
大多数视频剪辑之所以慢,是因为大多数视频剪辑都要重新编码:把每一帧都解码, 应用你要求的改动,再把整段内容作为新的压缩数据重新写出来。对于裁切画面、加 滤镜或加边框来说,这一步确有必要——但对于一次单纯的剪切,你只是想去掉开头 十秒和结尾三十秒,这就有点大费周章了。你保留下来的那部分画面和声音其实完全 不需要改变,只需要被复制下来,减去被剪掉的那些部分。
这正是 dzzz 的视频剪切工具背后的原理,值得在使用之前先弄明白,因为它附 带一个真实存在的限制,是一个更慢、会重新编码的工具所没有的。
怎么做:用这个指定工具
- 选择你的视频。 把 MP4、MOV 或 WebM 文件拖到拖放区,或点击它选择一个。 它会加载进裁剪滑块上方的播放器里。
- 设置起点和终点。 拖动滑块上的起点和终点手柄——两个时间点显示 在滑块下方,滑块下的一条提示会提醒你:剪切点会贴附到最近的关键帧上。
- 剪切并保存。 点击剪切。结果会直接在页面里播放,新旧文件体积并排 显示,保存 / 分享会把文件写入你的设备。
整个过程通常几秒钟就能完成,即使是几分钟长的片段也是如此,因为整个过程里 完全没有发生解码或重新编码。
需要留意的地方
这是流复制(stream copy),不是重新编码——这正是重点所在。 在底层,剪 切工具是直接复制视频和音频数据,而不是先解码再重新写出。这就是它快的原因: 没有耗费处理器的转码步骤,所以一段十分钟的视频,剪切所花的时间大约就是读取 文件所需的时间,而不是几分钟的处理时间。
剪切点会贴附到最近的关键帧,所以你设定的裁剪点可能会略微移动。 压缩视频 只是每隔一段时间存储一张完整画面(关键帧),关键帧之间的内容都是相对上一帧 的差异值存储的。流复制只能在关键帧处干净地开始播放,所以如果你把起点手柄拖 到两个关键帧之间的某个时刻,实际的剪切点会落在它之前最近的那个关键帧上—— 结果可能会比你设定的位置提前一瞬间开始。对于大多数剪切来说,比如去掉片段开 头或结尾的空白时段,这一点根本察觉不到;但对于需要精确落在某一帧上的剪切, 这个精度就不够了。
剪切工具本身没有可以回退使用的重新编码模式。 如果你真正需要的是逐帧精确 ——不是“差不多就行”,而是你拖动到的那一帧——流复制在原理上就做不到这一点, 而这个工具本身也没有内置一条更慢的、解码再重写的路径来弥补这一点。当你想快 速去掉片段的开头和结尾、又不需要逐帧精确的时间点时,剪切工具就是正确的选 择;如果你确实需要那种精确度,那你要找的是另一种工具,而不是这一个。
加边框工具会对视频重新编码,但不会对照片重新编码。 如果你在剪切之后的下 一步是添加边框——拍立得边缘、图片上方留出的说明文字空间——那个工具在处理视频 输入时总是会重新编码,因为要在每一帧上都加上边框,这和单纯复制是完全不同的 工作;该工具对此并不掩饰,还会提示“在电脑上会快得多”。如果你从剪切好的片段 里真正想要的是一张带边框的静态图片,而不是另一段视频,这仍然可以做到:在你 想要的那一刻暂停剪切好的片段,把那一帧从你的设备上另存为照片(截图就可以), 再把这张图片拖进加边框工具——和给视频加边框不同,给照片加边框是即时完成的, 完全不需要重新编码。
常见问题
为什么我剪切后的视频会比我拖动到的位置提前一瞬间开始?
这就是上面说的关键帧贴附。剪切工具从不重新编码,所以只能在关键帧处干净地 剪切,而最近的那个关键帧通常会比你选定的起点早一点点。这是为了速度做出的 取舍,不是缺陷——如果这个工具重新编码以精确命中你要的那一帧,运行时间会长 得多。
我能在一步里同时完成剪切和加边框吗?
不能在一个工具里完成。先用剪切工具,因为它几乎瞬间完成、也不会损失任何画 质;然后把剪切好的结果送进加边框工具去加边框。先剪切也意味着会重新编码的 加边框步骤,只需要处理你实际保留下来的那部分片段。
剪切会影响画面或声音的质量吗?
不会。因为剪切工具复制的是压缩数据本身,而不是先解码再重新编码,你保留下 来的那部分视频和原始文件是逐比特完全一致的——没有任何画质损失,这也是流复 制在适合你的需求时值得使用的另一半原因。