質問: Git などのバージョン管理ツールの発展の背後には「テキストデータは行単位で簡単に差分が取れ、しかもどのような差分なのか閲覧しやすい」という特徴があるように思います。 逆に音声、画像、動画といったバイナリデータでは "良い感じ" の差分が取りづらく、定期的なバックアップを使ったバージョン管理より高度なバージョン管理がやりにくそうです。個人的に動画編集をしていると、動画に対して Git のようなバージョン管理ができれば良いのにと思うのですが、良いツールが見つかりません。 動画の差分を素朴に1フレームごとピクセル単位でとろうとすると、動画データの圧縮手法や編集手法によっては実際に編集した部分以外のピクセルが変わってしまうことも影響しそうです。機械学習を使えば上手く処理できるかもしれませんが、簡単に検索しただけだと既存研究が良く分かりませんでした。 ### 質問 動画に対して、バージョン管理に使いやすい diff を生成するアルゴリズムは知られていますか?
回答: (私が知る限りですが)字義通りに「動画データ同士から分かり易い差分を抽出する」アルゴリズムは知られていないと思います。 動画データは、空間方向(2次元)×時間方向(1次元)に広がる3次元情報です。このような3次元情報間では単純一致/差分検知を行うことすら計算量的に困難です。さらに動画データは非可逆(lossy)圧縮されることが多いため、圧縮前データをほんの一部だけを改変した場合でも、改変点周辺(空間方向)およびそれ以降(時間方向)の圧縮後データが変化しえます。つまり単純一致検知アルゴリズムでは事実上は役に立たず、ちょうど良い“曖昧さ”をもった一致検知アルゴリズムが必要となるでしょう。 応用目的は異なりますが、動画データ間同士の類似度を計算する(Video Sequence Matching)アルゴリズムはいくつか知られています。この手のアルゴリズムは、例えば動画共有サービスへの違法な他者権利動画アップロード検知用途で実用されています。