# 视频倒放 — 把片子反过来放

最后一帧排在最前，连声音一起。

> 把 MP4、MOV 或 WebM 反过来放，声音也一并倒过来。全在浏览器里跑：什么都不上传，没有水印，断网照样能用。

这是一个浏览器交互工具，地址是 https://abox.tools/zh/reverse-video/。文件在运行该浏览器的设备上处理。主动分享和可选联网功能都在页面上说明。下文是它的文字说明；使用工具请打开该地址。

## 你的视频**在浏览器里处理**，无须上传处理。

每一帧都由你自己的浏览器在你自己的硬件上解码、掉头、再编码。这里没有任何东西能取或能发，因为这个工具压根就没有网络功能。就算有路可走，页面的另一端也根本没有服务器可以接收视频。

- ✗ 不上传
- ✗ 不注册
- ✗ 无水印
- ✓ 声音也倒过来
- ✓ 断网可用

## 视频倒放的步骤

1. **选一个视频。** 把 MP4、MOV、M4V 或 WebM 拖到选择框里，或者自己找出来。浏览器直接从磁盘上读，这期间没有任何东西发往别处。
2. **决定声音怎么办。** “声音也倒过来”会把音轨一个采样一个采样地掉头，说话声因此出来的是倒着放的说话声，而不是一片安静。要做无声片子就把它关掉，那样还更快。
3. **决定花多少画质。** 画面必须重新编码，因为帧出来的顺序是原文件里根本没有为之编码过的。“均衡”会贴近原片花掉的量，“最佳画质”则花得更多。
4. **倒过来，然后下载。** 活是在你自己的硬件上干的，所以花多久取决于你的机器，而不是排队。做好的视频直接交给浏览器的下载。

## 说得更细的版本

[怎么把视频倒过来放](https://abox.tools/zh/guides/reverse-a-video/): 把片子反着放：倒放对画面和声音都做了什么，为什么它绕不开重新编码，为什么比剪辑慢，以及动手之前该先做哪一步。

## 工具箱里还有

- [延时视频](https://abox.tools/zh/timelapse-video/): 一小时的素材，二十秒看完。
- [视频截帧](https://abox.tools/zh/grab-frame/): 任意位置，一张原画质静帧。
- [GIF 转 MP4](https://abox.tools/zh/gif-to-mp4/): 每一帧都带着 GIF 给它的延时，变成 MP4 里的 H.264。在你的机器上转，文件从不上传。
- [视频转 GIF](https://abox.tools/zh/video-to-gif/): 挑好段落、尺寸和帧率。

## 常见问题

### 我的视频会被传到哪里去吗？

不会。它由你自己的浏览器在你自己的硬件上读取、解码、倒序和编码。这个工具没有服务端，页面的 `Content-Security-Policy` 里写着它允许联系的每一个地址，没有一个属于本站。你要是宁可自己查也不愿听我们说，拔掉网线，照样倒一个试试。

### 哪些视频格式可以倒放？

MP4、M4V 和 MOV 直接读，里面装什么都行：H.264、HEVC、AV1 或 VP9，只要你的浏览器能解那个编码。其他浏览器能播的东西，最典型的是 WebM，则是靠让浏览器自己的播放器一步步往回走来倒放，能成，但慢一些。浏览器既读不了也播不了的文件，实际上就是 AVI、WMV、FLV 和大多数 MKV，会带一句说明直接拒掉，而不是走到一半才失败。出来的一律是 MP4。

### 声音会一起倒过来吗？

会，除非你把它关掉。整条音轨会被解码，采样按相反顺序排好，再重新编码成 AAC。这第二遍编码没法省：一个音频包是几十毫秒的声音，而且是相对前一个包编码出来的，所以把包倒着写出去，只会让一小段一小段正着播、顺序却是乱的，那听上去像故障，不像倒放。

### 倒放会掉画质吗？

画面会被编码第二遍，这要付一点代价。这里没法像剪辑那样避开：倒过来的片子按一个原文件根本没为之编码过的顺序显示帧，所以每一帧都得重写一遍。这个工具不会做的是花得比原片更多，因为超过那条线之后再编码，只会把文件撑大，画面并不会更好看。

### 视频的大小或时长有上限吗？

工具里没有写死的上限，文件也不会一次性读进内存，而是一组一组帧地往回走。真正的天花板有两个：一个是下载前要在内存里拼起来的成品视频，另一个是声音，它必须整条留着，因为倒放得先拿到最后一个采样才能写出第一个。

### 为什么有的文件慢，有的快？

因为进去的路有两条。MP4 或 MOV 由这个工具直接读取，一组一组帧地解码，机器多快它就多快。其他的则是不停地向浏览器自己的播放器要片子的某一时刻，而每一次这样的跳转都会让浏览器从前面的关键帧重新解码。页面会在你开始之前说明它走的是哪一条，以及为什么。

### 能只倒放其中一段吗？

这里不行。这个工具倒的是整段：出来的片子和进去的一样长，只是最后一帧排在最前。先用[视频剪辑](https://abox.tools/zh/trim-video/)把你要的那段剪出来，那个工具剪的时候一帧都不用重新编码，然后再把剪出来的东西拿来倒。

### 它免费吗，需要注册吗？

免费，没有账号，不用登录，没有试用期，也没有水印。本站带广告，经费就是从那儿来的，广告拿不到任何关于你视频的信息。

## 这条隐私承诺怎么核实

- **处理在这个浏览器里完成。** 本工具在浏览器里处理输入和结果，处理代码不把它们上传去处理。Content-Security-Policy 限制可用资源和连接目的地，但已允许的主机仍可接收请求。策略不检查载荷，不能单独证明什么都没有发出。请把具体操作的请求与源码核对，或断网完成该本地操作。
- **这里不会去取任何东西。** 这个工具压根就没有网络功能：没有地址可填，没有东西要下载，第一次用也不会拉什么引擎。碰到你视频的每一个字节，都是页面加载时从这个源来的。
- **解码和编码都在本地。** 帧要么走你自己浏览器里的 WebCodecs，要么走本来就会给你放这个片子的那套播放引擎。成品文件在这台机器的内存里拼好，然后直接交给下载。
- **声音也是在这儿掉头的。** 要把一条音轨倒过来就得先解码，而这个解码用的是浏览器自己的，跑在这台机器上。没有谁在听，没有谁留着，也没有什么能把它递出去：这里根本不存在一条能发出一个字节的代码路径。
- **Google 加载了什么，又拿不到什么。** 广告脚本和统计脚本来自 Google。关于你视频的信息，一条也没有交给它们，文件、某一帧、名字、大小、时长都没有。读取、解码、倒序、编码的每一行代码都由这个源提供，也都摆在仓库里。
- **捐助按钮加载了什么，又拿不到什么。** 页首那个“Buy me a coffee”按钮由 cdnjs.buymeacoffee.com 的脚本画出来，字体取自 Google Fonts。它不过是个链接，不上报访问，也拿不到关于你或你视频的任何东西。
- **断网也照样能用。** 断开网络，这个页面上的一切照常工作。这是最省事的一条证明。

**你可以自己核对。**上面这些不用你信。这个页面是仓库里的模板和配置生成出来的，构建脚本你能读，也能自己跑一遍，跑出来的结果就提交在 `dist` 分支上。拿实际发给你的内容，跟你自己从源码构建出来的结果对一遍就知道了： https://github.com/A-Box-of-Tools/website

最值得先读的几个文件：`config/site.toml` 里是 Content-Security-Policy，`src/timeline.js` 是决定哪一帧在什么时候出来的那套算法，`src/reverse.js` 是一组一组帧地把文件往回走的循环。它们都没有引入任何能发出请求的东西。
