Skip to content

動画内のスライドをぶっこぬいて画像としてまとめてくれます

Notifications You must be signed in to change notification settings

takonasu/SlideBukkonuki

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

83 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

スライドぶっこ抜きマン

このプログラムはなに?

オンライン授業が始まる中、動画内でスライドを使っているのにスライドを配布してくれない謎の先生がたくさんいます。 このプログラムは授業動画からスライドをぶっこぬくものです。

コンパイルについて

コンパイルの仕方(Mac)

なお、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)

windowsフォルダーのREADME.md を参照ください。

使い方(Mac)

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ブランチに入れられます。