Archive for category フリーソフト開発
カラオケ動画作成のために作ったavisynth関数(1)
Posted by ゆう@ふーりんことゆえっち in Diary, カラオケ動画, フリーソフト開発 on 2012年11月16日
avisynthだけでカラオケ動画を作る人はそういなさそうだし需要はなさそうだけど、
先月のカラオケ動画作成の時にいくつか関数を作ったので晒しておく。
ってか備忘録
うちが関数を使うときは編集しているavisynthスクリプトの最後に関数を書いておいて、本文から呼び出してる。しょっちゅうOS入れ替えるから別ファイルにして置いておくと入れ忘れちゃうしね。
- ぬるぬるフレームレート変更関数 Part2
ぬるぬる60fps化動画を作る時に最後に1行加えておけば簡単に60fps化ができる関数。
いままで指定できるfpsが整数だけだったんだけど今回から分数指定ができるようになって
汎用的に使えるようになった。
クソ重いからこれを付けてプレビューするのは無理っ。編集が終わって最後にチョコっとつければ簡単に高FPS化
準備
http://avisynth.org.ru/mvtools/mvtools2.html
から取ってきたMVtoolsのライブラリをAvisynthのプラグインフォルダに置いておく、
MT対応avisynthが必要(2.6.0以降なら大丈夫)
書式
nurunuru2(clip c, int “targetfps”, int “targetfps_den”)
c 対象動画クリップ
targetfps 目的のfpsの分子
targetfps_den 目的のfpsの分母(省略すると1)
たとえば
29.97fpsだと targetfps=30000 targetfps_den=1001
59.94fpsだと targetfps=60000 targetfps_den=1001
を指定する。
使用例
movie=ffVideoSource(“op.mpg”) return movie.nurunuru2(60) |
これで簡単に60fps化
source
function nurunuru2(clip c, int “targetfps”, int “targetfps_den”){ targetfps_den = default(targetfps_den, 1) SetMTMode(2) super=c.MSuper(pel=4, hpad=0, vpad=0) backward_1=MAnalyse(super, chroma=false, isb=true, blksize=8, blksizev=8, searchparam=3, plevel=0, search=3, badrange=(-24)) forward_1=MAnalyse(super, chroma=false, isb=false, blksize=8, blksizev=8, searchparam=3, plevel=0, search=3, badrange=(-24)) backward_2 = MRecalculate(super, chroma=false, backward_1, blksize=8, blksizev=8, searchparam=2, search=3) forward_2 = MRecalculate(super, chroma=false, forward_1, blksize=8, blksizev=8, searchparam=2, search=3) backward_3 = MRecalculate(super, chroma=false, backward_2, blksize=8, blksizev=8, searchparam=1, search=3) forward_3 = MRecalculate(super, chroma=false, forward_2, blksize=8, blksizev=8, searchparam=1, search=3) c.MBlockFps(super, backward_3, forward_3, num=targetfps, den=targetfps_den, mode=0) SetMTMode(1) GetMTMode(false) > 0 ? distributor() : last } |
- フレーム数指定動画スピード変更関数
いままで、動画のスロー化とかを.ChangeFPS(15).Assumefps(movie)みたいにして数字をいろいろ入れ替えて試していたけど、
倍率を考えるより目的のフレーム数を指定した方が簡単だと思いついた。
書式
changespeed_frame(clip c,int “flamenum”)
c 対象動画クリップ
flamenum 目的のフレーム数
使用例
movie=ffVideoSource(“op.mpg”) fullvideo=movie.Trim(0,300)++movie.Trim(300,400).changespeed_frame(150)++movie.Trim(400,500) return fullvideo |
動画の300~400フレームの部分を150フレームになるようにスロー再生にする。
source
function changespeed_frame(clip c,int “flamenum”) { return c.Changefps(c.FrameRate/c.FrameCount*flamenum).Assumefps(c.FrameRate) # return c.nurunuru2(targetfps = c.FrameRateNumerator*flamenum,targetfps_den=c.FrameRateDenominator*c.FrameCount).Assumefps(c.FrameRate) } |
上のnurunuru2関数を使うとキレイになるかもしれないので使いたい方をコメント(#)付けたり外したりして使ってみて。
割り算の切り捨ての関係で目的のframe数から±1するかもしれない。
- 拡大縮小付き静止画スクロール関数
静止画を単純にスライドショーにするんじゃなくて、
スクロールするとなんかかっこよくなるよね。
って考えて作ってみた。
いろいろ盛り込んでいくうちにどんどん長くなっていった。
と書いているうちに拡大縮小は別関数に分けた方がいいような気がしてきた。
とりあえず、使うにはスクロールさせるのに十分大きな解像度(ピクセル数)の画像1フレームのクリップを用意して、
開始の中心点と終了の中心点、生成するフレーム数を指定するととりあえずスクロールしてくれるはず。
スクロールを始める前とかスクロールした後にしばらく絵を止めていたいことがよくあるから
それも指定できるようにしてる。
ついでにスクロールしながら拡大縮小できるかもしれない(未検証)
引数が多すぎるから簡単に呼べる中間関数を作った方がいいな。
プレビューするときは関数内のSpline36ResizeをPointresizeにしておけば軽くなる。
(条件分岐で切り替えたいけど困ったことにavisynthではif文が使えない)
書式
zoomscroll(clip imageclip, clip baseclip, int start_x, int start_y, int end_x, int end_y, int allframes, int “startstopframes”, int “endstopframes”, int “bcolor”, float “startzoom”, float “endzoom”, bool “preview”)
# (clip) imageclip : スクロールする画像(1フレームでいい)
# (clip) baseclip : 形式を合わせる動画
# (int) start_x : 開始画像の中心点(x)
# (int) start_y : 開始画像の中心点(y)
# (int) end_x : 終了画像の中心点(x)
# (int) end_y : 終了画像の中心点(y)
# (int) allframes : 生成フレーム数
# (int) startstopframes : 開始画像静止フレーム数 (default : 1)
# (int) endstopframes : 終了画像静止フレーム数 (default : 1)
# (int) bcolor : 追加枠色 (Default : $FFFFFF)
# (float) startzoom : 開始画像拡大率 0.1~1(等倍)~N (default : 1)
# (float) endzoom : 終了画像拡大率 0.1~1(等倍)~N (default : 1)
# (bool) preview : プレビューフラグ (trueだとpreview用に高速に動く予定:未実装)
使用例
length=297 e_1=Imagesource(“01_natuki.png”,start=0,end=1,fps= movie.FrameRate) e_2=Imagesource(“02_nene.png”,start=0,end=1,fps= movie.FrameRate) e_3=Imagesource(“03_kagami.png”,start=0,end=1,fps= movie.FrameRate) e_4=Imagesource(“04_numabuti.png”,start=0,end=1,fps= movie.FrameRate) e_5=Imagesource(“05_tsukumo.png”,start=0,end=1,fps= movie.FrameRate) e_1=e_1.Spline36Resize(1280,1216).zoomscroll(movie,640,856,640,360,length,1,40) ss=Dissolve(e_1,e_2,e_3,e_4,e_5,35).Changefps(movie).ConvertToYV12 |
5枚の絵をしたから上へスクロールするものを5つつないだものができる。
source
function zoomscroll(clip imageclip, clip baseclip, int start_x, int start_y, int end_x, int end_y, int allframes, int “startstopframes”, int “endstopframes”, int “bcolor”, float “startzoom”, float “endzoom”, bool “preview”){
## set default value startstopframes = Default(startstopframes,1) bigimageclip = imageclip.AddBorders(baseclip.Width/2,baseclip.Height/2,baseclip.Width/2,baseclip.Height/2,bcolor) bigimageclip = bigimageclip.Loop(allframes,0,0) ## Calc Start Image s_croppoint_x = start_x + baseclip.Width/2 – Round(s_moviesize_x/2) ## Calc End Image e_croppoint_x = end_x + baseclip.Width/2 – Round(e_moviesize_x/2) ## create clip bigimageclip = bigimageclip.assumefps(baseclip.FrameRate) startimage = bigimageclip.Spline36resize(baseclip.Width, baseclip.Height, s_croppoint_x, s_croppoint_y, s_moviesize_x, s_moviesize_y).Loop(startstopframes,0,0) endimage = bigimageclip.Spline36resize(baseclip.Width, baseclip.Height, e_croppoint_x, e_croppoint_y, e_moviesize_x, e_moviesize_y).Loop(endstopframes,0,0) animateimage = bigimageclip.Animate(0,allframes-startstopframes-endstopframes, resizefunc, baseclip.Width, baseclip.Height, s_croppoint_x, s_croppoint_y, s_moviesize_x, s_moviesize_y, baseclip.Width, baseclip.Height, e_croppoint_x, e_croppoint_y, e_moviesize_x, e_moviesize_y) ## return clips return animateimage } |
iPhone4s動画再生環境がちょっと改善
Posted by ゆう@ふーりんことゆえっち in Diary, カラオケ動画, フリーソフト開発 on 2012年1月25日
iPhone4で
- level 3.1以下じゃないとiTunesで転送すらできない。
- マルチ音声トラックにすると同時になってひどいことになる。
- 字幕を別ファイルのassにしておいても合成表示されない。
ってのが原因で動画再生機能が使えねーよ状態だったのが、
「1.」 は 4Sになって解消(おそらくlevel4.1くらいまではいけそう)。「3.」はそもそもAndroidでも厳しいから自分でPlayerアプリを作るとかしないと無理っぽいのであきらめ気味(最近字幕エフェクトに凝りだしたから焼き付けでいいような気がしてきた)。
というところで「2.」の解決法があったのでやっと使い物になりだした。
こちらのサイトにiPhoneでもちゃんと動作するmp4boxのオプションが書いてあった。
いままではYambをつかって映像と音声の合成をしていたんだけど、YambではiPhone対応のオプションが指定できない。
情報が載っているサイトに替わりで動きそうなGUIツールが公開されていたけど、なぜかうちで動かすと処理に失敗して合成元のファイルが消えるというひどい動きをしてくれたので、自分でバッチファイルをつくった。
——— (ここから) ————–
rem mixonoff <Video track> <OnVocal_audio> <offVocal_Audio>
if “%~1″==”” goto USAGE
if “%~2″==”” goto USAGE
set mp4box=C:\progns\x264\MP4Box.exe
set filename=”%~dp1%~n1%_OnOff.mp4″
set filename=%filename:_noaudio=%
if “%~3″==”” goto USAGE
if “%~4″==”” goto ONOFF
if “%~5″==”” goto PLUSONOFF
:ONOFF
%mp4box% -add “%~1” -add “%~2”:lang=jpn:group=1:name=OnVocal -add “%~3”:disable:group=1:name=OffVocal %filename%
pause
exit /b
:PLUSONOFF
%mp4box% -add “%~1” -add “%~2”:lang=jpn:group=1:name=OnVocal -add “%~3”:disable:group=1:name=OffVocal “%~4”:disable:group=1 %filename%
pause
exit /b
:USAGE
echo “mixonoff <Video track> <OnVocal_audio> <offVocal_Audio> “
pause
exit /b
--------- (ここまで) --------------
本文に書くと変になるので ダウンロードリンク置いとく mixonoff
set mp4box=のところにmp4boxの実行ファイルを書いて保存して
上から映像トラック、OnVocalトラック、OffVocalトラックとなっている状態でエクスプローラーで3つのファイルを選択してバッチファイルにドラックアンドドロップ。そうすると「映像ファイル名(拡張子なし)+_OnOff.mp4″というファイル名の動画の出来上がり。
GUIツールは作るのあんまり得意じゃないんでとりあえずバッチファイルで。(そのうち作るかも)
モバイルで再生するためにわざわざ再エンコする気にはならないけど、これならエンコードしないからすぐ終わる。どうしてもモバイルで聞きたいものと今後作るものはこれで作っていくことにしよう。