動画差分を表示 & グラフ化するプログラム。
リアルタイム計算。
30フレームごとに動画差分を描画、グラフを更新するようになっている(書き換えれば調整可能)。
- 動画のバージョニングをしているため、プロジェクトの書き出し後に変更点が知りたかった
- 稀にプロジェクトの一部が壊れるので、破壊されたシーンを検知したかった
- AviUtlで差分比較するのが面倒だった
- グラフ化して定量的に差分比較したかった
- ライブラリの理解を深めたかった(あまり使ったことがないので)
演算がちょっと重めなので、軽量化したい。
- Windows 11
- VSCode 1.83.1
- Python 3.11.6 (Microsoft Store)
- OpenCV
pip install opencv-python
- NumPy
pip install numpy
- Matplotlib
pip install matplotlib
- どこか好きなところに diffm.py を保存
- 実行できるもので開く
- 引数を指定して実行
> python diffm.py "A.mp4" "B.mp4" 60 1
- 第1引数 = 動画A
- 第2引数 = 動画B
- 第3引数 = 描画間隔(オプション)
- 第4引数 = しきい値(オプション)
- 1 <= 描画間隔 (整数)
- 0 <= しきい値 <= 255 (小数)
- 第4引数を指定すると、しきい値以上の差分を "over" フォルダに書き出すようになります。
over フォルダの中身は、実行ごとに初期化されません(誤削除を防ぐため)。
以前のデータが残っていれば、予め空っぽにしてから実行してください。
「diffm」ウィンドウをバツで閉じると、他のウィンドウも閉じる。
1を指定すると、1フレームごとにグラフや動画を更新します。その分処理は重めです。
そのため、動画の1秒間あたりのフレーム数(24/30/60フレーム等)を推奨してます。こうすることで、動画の1秒分ごとに更新されます。
※この設定はグラフのプロットには影響しません。
比較動画A: M:\Users\~\A.mp4
比較動画B: M:\Users\~\B.mp4
描画間隔(フレーム): 30
閾値: 1.0
frame: < 30 | brightness: 0
frame: < 60 | brightness: 1.3613686342592592 *
……
各行で、1~30フレームまで、31~60フレームまで …… の明るさ(差分)の最大値を出しています。 しきい値が0以上のときに「*」が付き、このフレーム間にある明るさ(差分)が最大のフレームを、over フォルダに出力します。