オンライン授業が始まる中、動画内でスライドを使っているのにスライドを配布してくれない謎の先生がたくさんいます。 このプログラムは授業動画からスライドをぶっこぬくものです。
なお、Mac(Catalina)の人はこのレポジトリに実行可能ファイル(SlideBukkonuki)があるので、
OpenCVが入っていれば
./SlideBukkonuki
で動くと思います。
動かない場合は以下の通り。
brewは入っているものとします。
brew install pkg-config
brew install opencv
git clone https://github.com/takonasu/SlideBukkonuki.git
cd SlideBukkonuki
sh compile.sh
適当にcompile.shの中身を編集してください。
windowsフォルダーのREADME.md を参照ください。
GUI版を使いたい方はこちらを参照ください。
windowsの人はこちらを参照ください。
- 授業動画(あらかじめダウンロードしておいてください。)
- コンパイル済み実行可能ファイル
./SlideBukkonuki -i ./kougi.mp4 -o ./pictures -t 1 -r 430 -a 1 -f 3
./SlideBukkonuki -o ./pictures
オプション | デフォルト | 説明 |
---|---|---|
-i | ./movie.mp4 | 入力動画のパスを指定してください。 |
-o | ./ | 出力先のフォルダーのパスを指定してください。 |
-t | 10 | 閾値(詳細は後述します) |
-r | 0 | トリミング開始位置 動画にスライドの他先生が写ってる場合にスライドのみをトリミングできます。 左から何ピクセルかを指定してください。 |
-a | 0 | スライドのアスペクト比 0を指定すると4:3 0以外の整数を指定すると16:9になります。 |
-f | 5 | フレーム取得間隔(秒) スライドが切り替わり判定を何秒ごとにするか整数で指定します。 先生のスライド切り替えがあまりにも早い場合は小さくするといいです。 小さすぎると計算量が多くなり時間がかかる場合があります。 |
% ./SlideBukkonuki -i karaoke.mp4 -t 10 -f 100
**********設定確認**********
閾値:10.00000
トリミング開始位置:0
スライド取得間隔:100秒
アスペクト比:4:3
**********設定確認終わり**********
変化割合:5.078125
変化割合:6.250000
変化割合:5.078125
変化割合:0.000000
変化割合:0.000000
変化割合:0.000000
変化割合:5.468750
変化割合:0.000000
変化割合:0.000000
変化割合:1.562500
変化割合:0.000000
変化割合:0.000000
変化割合:0.000000
変化割合:2.734375
この場合、変化を見るとスライドを切り替えても変化の割合が一桁になっています。
この変化の割合は%で表されているため、0-100の範囲で表示されます。
この場合、閾値を1にすると確実にスライドの変化を捉えることができそうです。
よって、
% ./SlideBukkonuki -i karaoke.mp4 -t 1 -f 100
のように閾値を1にしてあげれば、変化の割合が1を超えているものに関しては保存してくれます。
トリミングの際に指定する数値は上の図の「トリミングするピクセル幅」と描かれているところです。 横幅を指定されたアスペクト比(4:3または16:9)で自動計算するので、横幅の自動計算結果が動画幅を超える場合はエラーとなります。 エラーが出た場合トリミング指定を0にしてみてください。 なお、動画のアスペクト比が16:9で授業スライドが16:9でトリミングする事は想定していません。
基本的には、この図のように動画が16:9で授業スライドが4:3の時を想定している機能です。
よくわからない人は0を指定しておけば問題はないです。
このプログラムは動画の変化を確認してスライドを切り替えたか判定しています。 先生によってはアニメーションを多用したり、スライドのデザインによってはあまり変化が見られない先生もいます。 そのため、先生によって変化の割合が全く異なってしまうために閾値を指定する必要があります。
動画から画像抽出:https://kisqragi.hatenablog.com/entry/2019/11/02/130921
相談しながら折り紙折ってた人: おしゅん
Windows版のビルド: しゃちぽこ
Mac GUI版 : takpika,SGO
作者はプログラミングマジで苦手でC++も114514年ぶりくらいに触ったのでソースコードには稚拙な部分があります。 何でこの処理してるんだ、もっといいやり方があるぞ等ありましたらバンバン教えてください。 なんせ、ずっと家にいて暇ですから・・・。 何かあればたこなすまでお願いします。
コントリビュートを歓迎しております。まずは改善したい内容をissueに書いてください。 自分で解決できる問題はissueを立てた後にassignするので建てたissueにその旨を書いてください。 beta版等、安定していないものはdevelopブランチに入れられます。