# 動画の逆再生 — 動画を後ろから再生する

最後のコマから、音も一緒に。

> MP4・MOV・WebMを逆再生にします。音も一緒に逆向きになります。処理はブラウザの中だけで、アップロードも透かしもなく、オフラインでも動きます。

これはhttps://abox.tools/ja/reverse-video/にあるブラウザー用の対話型ツールです。ファイルはそのブラウザーを実行する端末上で処理します。意図した共有や任意の通信機能はページ内で説明します。以下は文章による説明です。利用するにはアドレスを開いてください。

## 動画は**ブラウザー内で処理**されます。処理のためのアップロードはありません。

すべてのコマは、お使いのブラウザが手元のハードウェアで展開し、向きを変え、もう一度符号化します。この道具にはネットワーク機能が一切なく、取りに行く先も送る先もありません。仮に道があったとしても、このページの向こう側に動画を受け取るサーバーが存在しません。

- ✗ アップロードなし
- ✗ 登録なし
- ✗ 透かしなし
- ✓ 音も逆向きに
- ✓ オフラインで動作

## 動画を逆再生にする手順

1. **動画を選びます。** MP4・MOV・M4V・WebMを選択欄にドラッグするか、手で選んでください。ブラウザがディスクから直接読み、その間に何かがどこかへ送られることはありません。
2. **音をどうするか決めます。** 「音も逆向きにする」は、トラックを標本ひとつずつ逆に並べ替えます。話し声が無音ではなく逆再生の話し声として出てくるのはこのためです。音のない動画にするなら外してください。そのほうが速く終わります。
3. **画質にどれだけ使うか決めます。** 映像は符号化し直す必要があります。コマが、元のファイルのどこにも想定されていない順番で出てくるからです。「バランス」は元のファイルが使っていた量に近いところに留まり、「最高画質」はそれより多く使います。
4. **逆にしてダウンロードします。** 処理はお手元のハードウェアで行われるので、かかる時間は順番待ちではなく端末次第です。仕上がった動画は、そのままブラウザのダウンロードへ渡されます。

## 詳しい解説

[動画を逆再生にする方法](https://abox.tools/ja/guides/reverse-a-video/): 動画を後ろから再生する形にします。逆再生が映像と音に何をするのか、なぜ再符号化なしにはできないのか、なぜ切り出しより時間がかかるのか、そして先にやっておくべきことを説明します。

## 箱の中のほかのツール

- [タイムラプス作成ツール](https://abox.tools/ja/timelapse-video/): 1時間の素材が20秒に。
- [動画のコマ切り出し](https://abox.tools/ja/grab-frame/): どの瞬間でも、画質を落とさずに1枚。
- [GIFをMP4に](https://abox.tools/ja/gif-to-mp4/): 各フレームと元の表示時間を、H.264のMP4に。手元で変換し、アップロードしません。
- [動画→GIF変換ツール](https://abox.tools/ja/video-to-gif/): 使う範囲と、大きさと、フレームレートを選ぶだけです。

## よくある質問

### 動画はどこかにアップロードされますか？

いいえ。読み込みも、展開も、逆並べも、符号化も、お使いのブラウザがお手元のハードウェアで行います。この道具にサーバー側はなく、ページの`Content-Security-Policy`には接続してよいアドレスがすべて書かれていて、そのどれもこのサイトのものではありません。言葉より確認という方は、回線を抜いてから逆にしてみてください。

### どの動画形式を逆にできますか？

MP4・M4V・MOVは中身によらず直接読めます。H.264でもHEVCでもAV1でもVP9でも、お使いのブラウザがそのコーデックを展開できるかぎり大丈夫です。それ以外でブラウザが再生できるもの、代表的にはWebMは、ブラウザ自身のプレイヤーを後ろ向きに送っていく方法で逆にします。動きはしますが、その分遅くなります。ブラウザが読むことも再生することもできないファイル、実際にはAVI・WMV・FLV、そしてほとんどのMKVは、途中で失敗する代わりに、その旨を伝えて受け付けません。出てくるのは必ずMP4です。

### 音も逆向きになりますか？

外さないかぎりなります。トラック全体を展開し、標本を逆の順に並べ替え、AACで符号化し直します。この2度目の符号化は避けられません。音声のパケットは数十ミリ秒の音を直前のパケットを基準に符号化したもので、パケットを逆順に書き出すと、短い断片が順方向のまま誤った順序で鳴ります。それは逆再生ではなく故障のように聞こえます。

### 逆にすると画質は落ちますか？

映像は2度目の符号化を受けるので、わずかに落ちます。切り出しのときのように避けることはできません。逆にした動画は、元のファイルのどこにも想定されていない順番でコマを見せるため、すべてのコマを書き直す必要があるからです。ただしこの道具は、元のファイルが使った以上を使いません。それを超えて符号化してもファイルが大きくなるだけで、見た目はよくならないからです。

### 動画のサイズや長さに上限はありますか？

道具に組み込まれた上限はありません。ファイルを一度にメモリへ読み込むこともなく、コマの塊ごとに後ろからたどっていきます。現実的な頭打ちは2つあります。ダウンロード前にメモリの中で組み上がる完成品の動画と、音です。音は全体を抱えておく必要があります。最初の標本を書くために最後の標本が要るからです。

### ファイルによって時間が違うのはなぜですか？

入口が2つあるからです。MP4やMOVはこの道具が直接読み、コマの塊ごとに展開します。速さは端末の性能そのままです。それ以外は、ブラウザ自身のプレイヤーに動画のある瞬間を次々と要求する方法で逆にします。その頭出しのたびに、ブラウザは直前のキーフレームから展開し直すことになります。どちらの経路を使うのか、そしてその理由は、始める前にページが表示します。

### 一部分だけを逆にできますか？

ここではできません。この道具は全体を逆にします。出てくる動画の長さは入れたものとまったく同じで、最後のコマが先頭に来ます。必要な部分は先に[動画カット](https://abox.tools/ja/trim-video/)で切り出してください。あちらはコマを1つも再符号化せずに切り出せます。そのうえで、出てきたものを逆にしてください。

### 無料ですか。アカウントは必要ですか？

無料です。アカウントも、ログインも、試用期間も、透かしもありません。このサイトには広告があり、それが費用を賄っています。広告に動画の情報が渡されることはありません。

## この主張を確かめる方法

- **処理はこのブラウザー内で行います。** 入力と結果はブラウザー内で処理し、処理コードはそれらを処理用にアップロードしません。Content-Security-Policyは資源と接続先を制限しますが、許可済みの相手はリクエストを受け取れます。内容は検査せず、何も送られないことを単独で証明しません。具体的な操作の要求とソースを比較するか、切断中にローカル操作を完了してください。
- **ここからは何も取りに行きません。** この道具にはネットワーク機能が一切ありません。貼り付けるアドレスもなく、ダウンロードするものもなく、初回に落ちてくるエンジンもありません。動画に触れるコードは1バイト残らず、ページを読み込んだときにこのオリジンから来たものです。
- **展開も符号化も手元で行われます。** コマはお使いのブラウザのWebCodecsを通るか、どのみち動画を見せてくれる同じ再生エンジンを通ります。仕上がったファイルはこの端末のメモリの中で組み立てられ、そのままダウンロードへ渡されます。
- **音もここで向きを変えます。** 音のトラックを逆にするには展開が必要で、その展開はブラウザ自身のもので、この端末の上で動きます。誰も聴かず、どこにも残さず、渡すこともできません。ここには1バイトでも送り出すコードの通り道がありません。
- **Googleが読み込むものと、渡されないもの。** 広告と計測のスクリプトはGoogleから来ています。そのどちらにも、動画に関する情報は渡されません。ファイルも、コマも、名前も、サイズも、長さもです。読み、展開し、逆にし、符号化するコードはすべてこのオリジンから配信され、リポジトリに載っています。
- **寄付ボタンが読み込むものと、渡されないもの。** ヘッダーの「Buy me a coffee」ボタンは、cdnjs.buymeacoffee.comのスクリプトが描き、書体はGoogle Fontsから読み込みます。それはリンク以上のものではありません。訪問を報告することもなく、あなたや動画について渡されるものもありません。
- **オフラインで動きます。** 通信を切っても、このページのすべてがそのまま動きます。これがいちばん単純な証明です。

**自分で確かめてください。**以上のどれも、鵜呑みにする必要はありません。このページは、リポジトリにあるテンプレートと設定から、誰でも読んで実行できるビルドスクリプトが生成しています。その結果は`dist`ブランチに置いてあるので、配信されているものと、ソースをビルドした結果とを差分で比べられます。 https://github.com/A-Box-of-Tools/website

まず読むとよいのは、Content-Security-Policyについては`config/site.toml`、どのコマがいつ出るかを決める計算は`src/timeline.js`、ファイルをコマの塊ごとに後ろからたどるループは`src/reverse.js`です。どれも、リクエストを出せるものは何ひとつ読み込んでいません。
