cut-frames応用

Cut Frames

cut-framesは、Gimp用の拙作スクリプトです。 MPlayerを使って作ったファイルか ら、このページや私のブログ にあるような体操の分析写真を作ったりするのが、 かなり楽になります。Gimp-1, Gimp-2どちらでも使えると思います。 要望、質問などはブログにお願いします。 尚、ここの説明は、cut-frames Ver 0.41を対象にしています。

Gimpでは、GAPという動画を扱う為のプラグインがありますが、 用途も使い方もかなり異なります。

できる事

cut-framesでは、元の動画 "movie.mp4" (本物の動画ファイルはサイズが大き過ぎるので雰囲気です)から、 次のような画像を作る事が出来ます。

1. 横に並ぶ連続写真

横幅を人間を収めるだけの幅に切り詰められます。

横に並ぶ連続写真

次のように、腰の高さを揃えてしまう事も出来ます。今の例では 低くなったみたいに見えるだけです。

腰の高さを揃えた

2. 縦に並ぶ連続写真

縦幅を人間を収めるだけの幅に切り詰められます。 宙返りではあまり意味ありませんが。

縦に並ぶ連続写真

3. 動画の元

切り出した各フレームを縦や横に並べるのではなく、 レイヤーにして重ねる事ができます。この動画は、 肩を中心にした小さい範囲だけを切り出して、レイヤーに重ねた物を GIFアニメーションとして保存した例です。

使い方

1. フレームをタイルにしたファイルを作る

動画を用意し、MPlayerを使って、必要な部分のフレームをタイルにしたファイル を作ります。基本的なやり方は、MPlayerの使い方 に書いたので参考にして下さい。以下の説明では、秒間30フレームで録画された、 サイズ320x240の動画ファイル"movie.mp4"を例にします。

横に並ぶ連続写真を 作る場合は、横一列のタイルにするとやりやすくなります。 次のコマンドは、"movie.mp4"の2秒目から69フレームを、 3フレーム飛ばし(全部で23フレームになる)にし、サイズ120x90( この値をフレームのサイズ指定の時利用します) に縮小してから、横一列に並べる例です。

mplayer -ss 2 -frames 70 -vo jpeg -vf framestep=3,scale=120:90,tile=23:1::0:0 movie.mp4

ファイルは自動的に"00000001.jpg"と言う名前でカレントディレクトリに 作られます。

00000001.jpg

縦に並ぶ連続写真を 作る場合は、横一列のタイルにするとやりやすくなります。 上のコマンドで、"tile=23:1::0:0"の部分の代わりに "tile=1:23::0:0" にすれば、各コマが縦に並んだファイルができます。

00000001.jpg

2. Gimpを起動してそのファイルを開く

Gimpの機能を使って、画像の色を調整したりもやってしまって下さい (参考: 色を綺麗にする, 線画にする)。 但し、 画像の拡大縮小をすると、フレームのサイズ指定の時、 少しややこしくなります。

3. パス作成ツールを選択

パス作成ツールは本来、ベジエ曲線を作るツールですが、cut-framesでは、 まったく違う用途に利用します。

パス作成ツール

4. 一ヶ所クリック(ダミー)

画像の中のどこでもいいので、一ヶ所クリックします。内部上の都合です。 忘れてしまいがちですが、これを 忘れると、切り出しがうまくいかなかったり、エラーになったりします。

ダミー

5. 切り出しの最初のフレームを指定

(ここでは標準的なの指定方法を説明します。簡易指定方法、スムージング時のキー になるフレームの指定方法については、 cut-frames応用: パスの指定補足 を参照して下さい)

上の一ヶ所クリックに続けて、最初に切り出したいフレームの中の一点を クリックしたまま、少しドラッグすると次のようになります。 描かれる曲線は、無視して下さい。 (分かりやすいように、画像の色は薄くしてあります。)

出だし

クリックした所にある○を端点、ドラッグして表れる二つの□をコントロール と言います。(二つのコントロールの位置は、個別に移動させる事ができます。) cut-framesでは、下の絵の様に二つのコントロールの位置によって決まる長方形 を使って、切り出すフレームの大きさを指定します。一方、端点の方は、フレームを 並べる時の基準点を指定します。

端点とコントロール

6. 残りのフレームの切り出し範囲を指定していく

以下、同様にして、残りのフレームに対して、端点とコントロールの位置を使って、 切り出す範囲を指定していきます (参考: 指定する端点の高さを一定にする)。 但し、残りのフレームに関しては、 cut-framesを使う時に指定するフレームの並べ方によって次の違いがあります。

横に並べる場合
指定した幅と基準点の縦の位置だけ が使われ、縦幅は最初のフレームの値に揃えられる。
縦に並べる場合
指定した高さと基準点の横の位置 だけが使われ、横幅は最初のフレームの値に揃えられる。
レイヤーにして重ねる場合
基準点の縦横の位置だけ が使われ、フレームの大きさは最初のフレームの大きさに揃えられる。 つまり、この場合には、コントロールの位置の情報は使われないので、 重ねる基準になる端点だけを順にクリックしていくだけでよい。

尚、いずれの場合も、切り出す部分がフレームの外にはみ出てしまう時には、 そこは透明になります。

残りのフレーム
横に並べるとき

7. cut-framesを使って切り出しを行う

画像を右クリックして現れるメニュー の中から、 Script-FuGymnpcut-frames を選択して現れるダイアログで幾つか指定を行って切り出しを行います。

dialog
Frame Width, Frame Height
元の動画の1フレームの 幅と高さを入れます。例えば、MPlayerのタイル出力時、ビデオフィルタで scale=120:90と指定した場合には、 Frame Width = 120, Frame Height = 90にします。この値が狂っていると、 正しい切り出しができないので注意して下さい。
方向 (Orientationと表示されるかも)
切り出したフレームを並べる方向を指定します。
Path Smoothing (方向で"Layer" を指定したときだけ有効になります)
パス作成ツールで指定した位置を補正するためのオプションです。
パス作成ツール指定時のクリック位置の微妙な「ずれ」のために、 そのまま切り出しを行うと、動画にした時、もの凄く細かく 画面がぶれてしまいます。このオプションを大きな値にする程、 切り出しする位置を補正して、滑らかに各位置をつなごうと試みます (0にすると、完全に指定したままの位置で切り出しを行います。)
切り出しが思った通り行かない時には、この値を色々変えてやり直してみて下さい。

補足: 動画を作る

cut-framesを使って、切り出しを行う際、方向を layerに指定すると、切り出された各フレームはレイヤーに なって、一番最初のフレームの上に順に重ねられます。この画像は動画を作る 元になります。取り敢えずは、 画像を右クリックして、フィルタアニメーション動画再生 を選んで現れるウィンドウ内で、再生/停止ボタンを押すと、 動かしてみる事が出来ます。

この画像を動画に保存するには、次の三つの方法があります。

  1. アニメーションGIFとして保存する
  2. 各フレームを別々に保存し、MEncoderを利用する
  3. Gimpのプラグイン GAPを利用する

3.のGAPを利用する方法は、私が分かっていないので、割愛します。

1. アニメーションGIF

Gimpで、ファイルを保存するときに、".gif"と拡張子を付けると現れるダイアログ で、アニメーションとして保存を選び、 エクスポートボタンを押して下さい。 又、ダイアログが現れるので、そこで、秒間何フレームで再生させるか等を 指定して下さい。

2. MEncoderを利用

MEncoderを使って動画を作るためには、まず、各フレームを連番のファイルに保存す る必要があります。これには、いっちーさん作のGimpスクリプト Continuous Saveを、私が少し変更した、 たむぶん版Continuous Saveを利用します。 これをインストールしてあれば、以下で連番のファイルが作れます。

  1. 画像を右クリックして、 メニューから Script-FuUtilsContinuous Save を選ぶ
  2. JPEG, PNGのどちらかの保存形式を指定する
  3. 保存する位置、ファイル名の最初に付ける名前を指定する (その他のオプションは最初のままで良い)
  4. OKを押す

例えば、2.でJPEGを指定し、3.は最初の"MyPicture_"のままにした場合には、 カレントディレクトリに、"MyPicture_00000001.jpg", "MyPicture_00000002.jpg", ... と言うファイルが作られます。

最後に、MPlayerに付属のMEncoderを用いて ファイルから動画を作る事が出来ます。今の、 "MyPicture_"の例では、

mencoder "mf://MyPicture_*.jpg" -mf type=jpg:fps=30 -o output.avi -ovc lavc -lavcopts vcodec=mpeg4

とすれば、秒間30フレームの早さで再生される音の無い動画 "output.avi"ができ上がります。

ダウンロードとインストール

cut-frames.scmを保存して、

にコピーして下さい。

あとやりたい事

更新履歴

Ver 0.6 (2019.7.14)
- Gimp-2.10でも動くようにした
Ver 0.5 (2018.02.20)
- サイト復活。Ver 0.41と同じ物かも知れない。
Ver 0.41 (2009.5.31)
- バグ修正。Ver 0.34でできたことはできるようになったはず。
Ver 0.4 (2009.5.27)
- Gimp 2.4以降用に修正
- まだ、バグだらけだが、取り敢えず
Ver 0.34 (2005.3.31)
- 少し要らないところを捨てて綺麗にした
- 端点が画像の外にあるときに、少し対応した(めんどくさくなって途中で止めた)
Ver 0.33 (2005.3.29)
- Smoothingのキーフレームのバグ(プラスマイナスの間違い)を修正
Ver 0.32 (2005.3.26)
- デバッグ用のprint命令を削除
Ver 0.31 (2005.3.25)
- パスの簡易指定のバグを修正
Ver 0.3 (2005.3.24)
- パスの簡易指定を出来るようにした
- Smoothingで補正したパスはやはり残さないように戻した
- 全体的なプログラムの整理
Ver 0.2 (2005.3.15)
- Path Smoothingは、Layerで切り出すときだけ有効になるようにした
- Layerで切り出す時に、Smoothingのヒントになるフレームを指定できるようにした
- Smoothingで止まらなくなる事があるバグを修正した(今度は大丈夫と思う)
- Smoothingで補正したパスも残すようにした(バグあるくさい)
- Smoothingの最大値を4から5に変更した
Ver 0.11 (2005.3.11)
- 連絡先をブログにした
Ver 0.1 (2005.3.9)
- 公開

ホームへ ブログへ