Help us understand the problem. What is going on with this article?

複数の動画を画面n分割で同期した動画をつくるのに ffmpeg, opencv, ruby でやってみた ヽ(゚ー゚*ヽ)(ノ*゚ー゚)ノわぁい

More than 5 years have passed since last update.

最近はやりのユーチューバーの皆さん。モンストで遊んだ動画 :movie_camera: をYouTubeにたくさん投稿されてます :tv: とても全部は見切れないので有名な :punch: 人気動画配信者のものだけざざっと観るだけです。

モンストのガチャの動画は結構好き :thumbsup: で、リアクションを見てると :smile: 楽しい。そこで、↓こんな感じで画面四分割した同期した動画をつくれないかなーとやってみました :movie_camera:

モンストガチャを四分割で同期した動画
qiita.png

実現に向けてやること

  • タイミングを合わせる :watch: のが重要です。
  • そのために各動画のガチャのタイミングが一致するフレーム番号 :1234: を見つける必要があります。

さっそくやってみますので下準備

動画 :tv: から画像ファイル :file_folder: を取り出す

ffmpeg を使って↓下のようにしてフレームを画像にしてしまいます。その前に下準備でfpsを20fpsとかに揃えておくのが良いかもしれません。それにしても画像処理はPCを熱く :fire: してくれます。

ffmpeg -i foo.avi -r 1 -s WxH -f image2 foo-%03d.jpeg

特徴となるタイミングの画像を準備

今回うまくいくかわかりませんが、モンストのガチャで顔 :smiley: がぐるぐる回ったときの270度ぐらい回ったタイミングを使ってみます。

gacha.png

各動画で↑上の画像が出てくるタイミングさえ揃えられれば、その前がどうであれ、

ガチャ→光演出→モンスターゲット

の流れが綺麗にそろうはずです。それにしてもなかなか金の卵 :cooking: が出ませんね。

最近イベントでやってる青いガチャやゴジラガチャは対応できません! :anger: とほほ

opencv を使って、テンプレートマッチングをする

rubyを使っているので opencv をインストールした後に ruby-opencv というgemを入れた環境を準備しました。両方ともインストールにてこずりました。メモを取っていたらqiitaの記事に書けたのに :cry:

ruby-opencv の使い方は↓下の記事を参考にしました。とても分かりやすいです :thumbsup: テンプレートマッチングはテンプレートの特徴量に近い対象画像の部分を捜査して、最もマッチする場所を教えてくれる機能で、opencvにはすぐに使えるものが実装されています。

http://qiita.com/okitan/items/9f277d7fc0479c9f4ca4

テンプレートマッチングは画像処理・検索の基本のきなので、最近はやりのディープラーニング :pencil: なんかと比べると大したことない感じもしますが、使い道によっては超強力です :penguin:

いくつかの動画で実験して、うまくいきそうなので、この方法で進めるよ。テンプレートマッチングの結果で得られる結果の数値はあくまで相対的なものだから、はずれのフレームから得られる結果と当たりのフレームから得られる結果に明らかな差が出ているようなら、それを採用してOKと考えるよ。グラフ :bar_chart: にしてみると一目瞭然だったりします。

フーレム番号がわかったら前後を程度にトリミング

動画のトリミング :scissors: は ffmpeg を使います。みんなが大好き -filter_complex を使っていくよ。trimを使おう。単純だから -vf でもいいんだけど :wink:

ffmpeg -i src1.mp4 -filter_complex "[0:v]trim=start_frame=10:end_frame=401" dst1.mp4

これで、フレームの10番目から400番目までが入った動画ができるよ :smile: 簡単だね :musical_note: 例えばもう一つの動画は70フレームがずれてたら、↓下の感じになるかもね。簡単すぎてやばいね :scream:

ffmpeg -i src2.mp4 -filter_complex "[0:v]trim=start_frame=80:end_frame=481" dst2.mp4

この二つだけでも横に並べれば比較動画ができるね :hammer:

四分割動画の作成

これも ffmpeg を使うとあっという間にできちゃいます。dst1.mp4 みたいな感じで、動画が4つあったとすると :oden: overlay 使って簡単に。元の動画サイズを 1280x720 と仮定して、それらを 640x360 に縮小しつつ四分割のモザイク動画にするよ :monkey:

**※このコマンドライン実は検証してないから間違ってるかも :hear_no_evil:

ffmpeg -i dst1.mp4 -i dst2.mp4 -i dst3.mp4 -i dst4.mp4 -filter_complex "nullsrc=size=1280x720 [base];[0:v]scale=640:360[scaled0];[1:v]scale=640:360[scaled1];[2:v]scale=640:360[scaled2];[3:v]scale=640:360[scaled3];[base][scaled0]overlay=x=0:y=0[out0];[out0][scaled1]overlay=x=640:y=0[out1];[out1][scaled2]overlay=x=0:y=360[out2];[out2][scaled3]overlay=x=640:y=360" comp.mp4

よくわからなかったらここを見て :dolphin:
https://trac.ffmpeg.org/wiki/Create%20a%20mosaic%20out%20of%20several%20input%20videos

:cry: 書いてたら眠くなってきたのでこの辺で

scleen_x_x
是非フォローをお願いいたします。ruby/ubuntu/ffmpeg/node.js/Android 関連の投稿が主 ヽ(゚ー゚*ヽ)(ノ*゚ー゚)ノわぁい 。無所属新人。現在放浪・休憩中。動画コンテクストを分析して意味付け、面白さを解釈するエンジン(scleen)をつくってます。Deep-Learningの少し先です。自分が好きな動画が簡単に見つかるといいよね♪
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away