- Ruby -  のスクリプトを公開する頁


movie_on_playing
  ffmpegを使って,別々に録った演奏動画を合成するツール.色々な環境で撮られた動画を,
と言う手順を自動的に行うスクリプトです.


ダウンロード/準備
■movie_on_playing_v02.rb  → ダウンロード

  Ruby2.2で動作確認していますが,2.x,若しくは古いバージョンでも動作すると思われます.
  実行方法:  ruby  movie_on_playing.rb  control.txt

  合成したい動画と,control.txtファイルを用意します.別途ffmpegをインストールしておいて下さい.

■v02変更点:
  ・複数行で構成された動画を作成出来るように変更.(横だけでなく,縦に連結可能)
  ・その他,幾つかのバグを修正.


control.txt作成
■簡易説明付きcontrol.txt  → ダウンロード

  「キーワード」  「値」を羅列したファイルを用意します.キーワードは以下の通りです.

    ffmpeg  [ffmpegのパス]
    work  [作業用のディレクトリ名]
    out  [出力ファイル名]

  以下のキーワードは,動画の数と同数記述します.省略する事は出来ません.

    movie  [動画のパス]
      動画の所在を記述します.コマンド実行場所と同様,若しくは相対パスが可能です.

    resize  [X]x[Y]
      最初にリサイズする値を指定します.リサイズしない場合でも(元動画のサイズを)記述します.以下にある"crop"は,このリサイズ後の値を元にします.

    volume  [%]
      動画の音量(基準は100%).元の動画の音量が大き過ぎる場合は小さい値,小さ過ぎる場合は大きい値にします.

    fadein  [frame]
      動画が表示されるまでのフェードイン時間を,フレーム数で指定します.このスクリプトは30fpsを想定しているため,1秒の場合は30と記述します.

    delay  [s]
      動画が表示されるまでの遅延時間を(単位:秒で)指定します.他の動画より早く始まってしまう場合はプラスの値(開始を遅らせる),遅く始まってしまう場合はマイナスの値(動画の前を削り,開始を早める)を指定します.プラスの値の方が内部でやや複雑な処理を行っているため,それぞれの動画を演奏開始までに数秒のマージンを取り,マイナスの値を指定する方が不具合は起きにくくなるようです.

    time  [s]
      動画が終了する時間を(単位:秒で)指定します.これは,上の"delay"の値とは無関係で,元動画の時間を基準に決定します.

    crop  [startX]x[startY]  [sizeX]x[sizeY]
      動画の切り抜きの方法を指定します.startX/Yは,左上を基準とした切り抜き開始座標,sizeX/Yはその基準からの切り抜きのサイズです.このsizeX/Yが,その動画の最終的なサイズをなり,これを動画の数の分並べたものが,最終的な動画のサイズとなります.

    skip  [off/on]
      動画の処理を省略するかどうかで,通常は"off"を指定します.1度処理を実行すると,各動画の音が微妙にズレてしまう事が多く,「1つ目と3つ目の動画のタイミングは問題ないが,2つ目の動画の"delay"を変更して何回も実行して調整する」と言った作業が多くなります.この場合,workディレクトリは同様で1つ目と3つ目の動画に対してはskipを"on"とすると,一連の処理を省略するため,処理時間が向上します.勿論,この場合に1つ目と3つ目の動画で指定している他の記述は反映されません.

  以下のキーワードは,必要な時に引数無し(キーワードのみの記述)で指定します.

    row_div
      動画を縦に並べる際に使用します.例えば4つの動画を横に2,縦に2と並べる場合,上までの一連のキーワードを動画2個分を指定した後,"row_div"を1回指定し,その後に動画2個分のキーワードを指定します.


その他
  現状の動作は,動画を全て横に並べて(列を増やして)合成する仕様のため,仕様上は動画の数に制限はありませんが,多くても5個くらいの動画に対応しています.
    → v02にて,縦に並べる事も出来るようにしました.

  control.txtで指定する値の制限に関してはffmpegの仕様/バージョン,及び元動画に影響されます.このため,根本的に動作しないと言う質問には答えられる可能性がありますが,最終的な動画が意図通りに出来なかった,等の質問には答えられない可能性が高いです.

  上記の通り動画が上手く出来ない,途中で止まる場合は,workディレクトリの下の"log.txt"に実行した時間とffmpegの実行コマンドが記述されているので,それを元に調べるのが解決への早道です.


戻る


inserted by FC2 system