ドラクエの戦闘シーンチェンジエフェクトを作る


ニコニコ動画に投稿された「DQエンカウント風AviUtlシーンチェンジ用素材 sm30578410」を元に ffmpeg でも同じことを実装する。配布されたファイルは 8bit PNG なのでそれを使い、グラデーションマスクを作成し2入力を合わせる方法をとる。サンプルコマンドの出力コーデックは適宜変える。input1.mp4 と input2.mp4 は 640×360 30000/1001 fps の動画である。それに伴って。color ソースもそれに統一する。シーンチェンジは input1.mp4 から input2.mp4 の順番に切り替わるのがドラクエの戦闘シーンチェンジエフェクトになる。

ドラクエIの戦闘エフェクト

ffmpeg -loop 1 -i "DQ1エンカウント風.png" -f lavfi -i color=s=640x360:r=30000/1001,format=yuva420p -i input1.mp4 -i input2.mp4 -filter_complex fps=30000/1001,scale=640:360:flags=neighbor,setsar=1/1,format=yuva420p,shuffleplanes=0:1:2:0[0a];[2]lut=val:128:128:enable='st(0,between((mod(n,4)),0,1));ld(0)*between(t,1.5,2)',format=yuva420p[2a];[0a][1]blend=c3_expr='gt(A,(T-2)*255)*255',[2a]lut2=x:x:x:y,[3]overlay[v];[2:a]atrim=duration=2,asetpts=PTS-STARTPTS[a2];[3:a]atrim=2,asetpts=PTS-STARTPTS[a3];[a2][a3]concat=v=0:a=1[a] -map [v] -map [a] -t 6 -vcodec ffv1 -acodec aac dq1.mkv

解説

  • 入力順に、エフェクト画像、エフェクト画像を映像にするテストソース、シーンチェンジ前の映像、シーンチェンジ後の映像
  • color=s=640x360:r=30000/1001,format=yuva420p
    テストソースの解像度とフレームレートの指定。アルファチャンネルを追加する
  • scale=640:360:flags=neighbor,setsar=1/1,format=yuva420p,shuffleplanes=0:1:2:0
    エフェクト画像を neighbor で補間なしのリサイズし、画像の sar を揃えアルファチャンネルを追加し、輝度チャンネルをアルファチャンネルにコピーする
  • lut=val:128:128:enable='st(0,between((mod(n,4)),0,1));ld(0)*between(t,1.5,2)',format=yuva420p
    グレーに色を点滅し、タイムライン編集でシーンチェンジ前の点滅を 1.5秒から2秒の間に作り、アルファチャンネルを追加する
  • blend=c3_expr='gt(A,(T-2)*255)*255'
    アルファチャンネルに開始2秒から1秒間で徐々に255(透過しない)にする
  • lut2=x:x:x:y
    2入力のアルファチャンネルを1入力のと入れ換える

ドラクエⅡの戦闘エフェクト

ffmpeg -loop 1 -i "DQ2エンカウント風.png" -f lavfi -i color=s=640x360:r=30000/1001,format=yuva420p -i input1.mp4 -f lavfi -i color=s=640x360:r=30000/1001 -i input2.mp4 -filter_complex fps=30000/1001,scale=640:360:flags=neighbor,setsar=1/1,format=yuva420p,shuffleplanes=0:1:2:0[0a];[2]lut=val:128:128:enable='st(0,between((mod(n,4)),0,1));ld(0)*between(t,1.5,2)',format=yuva420p[2a];[0a][1]blend=c3_expr='gt(A,(T-2)*255)*255',[2a]lut2=x:x:x:y,[3]overlay,trim=duration=3,setpts=PTS-STARTPTS[23];[4]trim=3,setpts=PTS-STARTPTS,[23]concat[v];[2:a]atrim=duration=2,asetpts=PTS-STARTPTS[a2];[4:a]atrim=2,asetpts=PTS-STARTPTS,[a2]concat=v=0:a=1[a] -map [v] -map [a] -t 6 -vcodec ffv1 -acodec aac dq2.mkv

解説

ドラクエIの戦闘エフェクトから違う部分だけ。シーンチェンジの背景が黒になるのがドラクエIの戦闘エフェクトと違う

  • 入力順に、エフェクト画像、エフェクト画像を映像にするテストソース、シーンチェンジ前の映像、シーンチェンジ背景の黒映像、シーンチェンジ後の映像
  • overlay,trim=duration=3,setpts=PTS-STARTPTS
    シーンチェンジ背景が黒映像なので背景を透過させて黒映像を映す。あとで concat するので trim する
  • trim=3,setpts=PTS-STARTPTS
    シーンチェンジ後の映像をつなげるために trim で開始時間をずらす

ドラクエⅢの戦闘エフェクト

上2つのエフェクト以外はこのコマンド例を使う
ffmpeg -loop 1 -i "DQ3エンカウント風.png" -f lavfi -i color=s=640x360:r=30000/1001 -i input1.mp4 -i input2.mp4 -filter_complex fps=30000/1001,scale=640:360:flags=neighbor,setsar=1/1,format=yuva420p,shuffleplanes=0:1:2:0[0a];[2]lut=val:128:128:enable='st(0,between((mod(n,4)),0,1));ld(0)*between(t,1.5,2)',format=yuva420p[2a];[0a][1]blend=c3_expr='gt(A,(T-2)*255)*255',[2a]lut2=x:x:x:y,[1]overlay,trim=duration=3[23];[3]trim=3:4,setpts=PTS-STARTPTS,geq='p(X,Y)*clip(T,0,1)':'clip(p(X,Y),128-clip(T*128,0,128),128+clip(T*128,0,128))'[3a];[3]trim=4,setpts=PTS-STARTPTS,[23][3a]concat=3[v];[2:a]atrim=duration=2,asetpts=PTS-STARTPTS[a2];[3:a]atrim=2,asetpts=PTS-STARTPTS,[a2]concat=v=0:a=1[a] -map [v] -map [a] -t 6 -vcodec ffv1 -acodec aac dq3.mkv

解説

ドラクエⅡの戦闘エフェクトに加えて黒映像からのフェードアウトが追加される
白と黒を使ったフェード効果 を参照
入力順に、エフェクト画像、エフェクト画像を映像にするテストソース、シーンチェンジ前の映像、シーンチェンジ後の映像

個別フィルタの解説

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)