- 2012-02-20 (月) 20:56
- 雑記
最近はビデオのmotion interpolation(フレーム間を補間してフレームレートを上げてヌルヌルにできたりする)をリアルタイムでやれちゃう環境が結構簡単に作れると聞いたので、少しググった。
mvtools2を使う方法が一番融通が効きそうだったので、これで任意の動画を60fps再生させる感じにしてみた(参考にしたページ: これ)。MPC-HC x64+ffdshow x64を普段のビデオ再生に使っているので、MPC-HC x86+ffdshow x86の方を60fps再生用にする。
0. 使っていない人はffdshowを用意
個人的にはK-Lite Codec Pack使ってます。LAV Splitterもついてるし。
1. avisynthを導入
ここからダウンロードして普通にインストールするだけ。
2. avisynth MTを導入
avisynthをマルチスレッドに対応させる。ここからダウンロード。
アーカイブ内のavisynth.dllをsystem32にコピー(上書き)。またアーカイブのpluginsフォルダ内のMT.dllをavisynthのpluginsフォルダにコピー。
3. MVTools version 2を導入
ここの一番下からダウンロード。アーカイブ内のmvtools2.dllをavisynthのpluginsフォルダにコピー。
4. ffdshowの設定
ffdshow x86のvideo decoderで、Avisynth項目内を設定。AviSynthにチェック、Add ffdshow video sourceを非チェック、3:2 PulldownはIgnore pulldown、Input colorspacesはYV12のみ、Buffer back/aheadにチェックを入れて10/10。コード入力欄に以下を貼り付ける。
SetMemoryMax(1280)
SetMTMode(5,0)
ffdShow_source()
SetMTMode(2)
super=MSuper(pel=2, hpad=0, vpad=0)
backward_1=MAnalyse(super, chroma=false, isb=true, blksize=16, blksizev=16, searchparam=3, plevel=0, search=3, badrange=(-24))
forward_1=MAnalyse(super, chroma=false, isb=false, blksize=16, blksizev=16, searchparam=3, plevel=0, search=3, badrange=(-24))
backward_2 = MRecalculate(super, chroma=false, backward_1, blksize=16, blksizev=16, searchparam=2, search=3)
forward_2 = MRecalculate(super, chroma=false, forward_1, blksize=16, blksizev=16, 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)
MBlockFps(super, backward_3, forward_3, num=60000, den=1001, mode=4)
SetMTMode(1)
GetMTMode(false) > 0 ? distributor() : last
各種パラメータはMVToolsのページを参照しながら適当に調整。↑は我が家の環境(Core i7 875K)に合わせてます。MSuperのpel、MBlockFpsのmode、MAnalyse/MRecalculateのsearchあたりをいじるのが手軽。最終的なfpsはMBlockFpsのnumをdenで割った値になる。↑では60000/1001=59.94fps。num=85, den=1とかにすれば85fpsになる。
ffdshowのCodecs設定で対象にしたいフォーマットのDecoderをlibavcodecにしておくことを忘れずに。
5. おわり
あとは適当なx86プレイヤーでffdshowを通して再生すれば59.94fpsになっている(MPC-HCならオプションで内部フィルタを切っておく)。上手くいっていないような気がする時はffdshowのOSD設定でFrame durationを表示させてみる。59.94fpsなら16.6833msくらいになるはず(1000/59.94)。ただしWMVだとこの値はうまく表示されない。
Core i7 875Kで720pの動画を59.94fps再生したときのCPU使用率は30%弱くらいでした。フラグムービーとか再生させると楽しい。モニタのリフレッシュレートの限界fpsで再生するともっと楽しい(でもWMVは60fps以上にするとなぜかガクガクになっちゃう)。
関連する記事:
- Newer: テスト2
- Older: muspy – 新譜が出たらメールで知らせてくれるサービス
Comments:4
- ぺた 12-02-24 (金) 0:29
-
上記の通りに設定したのですが、ffdshowのAviSynthにチェックを入れて動画を再生させるとMPC起動時にMPCが落ちてしまいます。
AviSynthのチェックを外すと普通にMPC+ffdshowで動画を見れます。
原因は何が考えられるでしょうか?当方あまり動画関連の処理に詳しくないので見よう見真似状態です。
こちらのPC環境は
OS:Windows7 64bit
メモリ:4GB
グラフィック:GeForce GTX 470
です。ffdshowのバージョンはrevision 2527 (msvc 2008 x86 unicode)
MPCのバージョンはMPC – HC 32bit (x86) v1.6.0.4014よろしくお願い致します。
- APM 12-02-24 (金) 3:44
-
僕はavisynthのことをほとんど知らないので
より詳しい方に尋ねていただければ正確かとは思いますが、
たとえばSetMemoryMaxの値を落としてみるなどはいかがでしょうか。 - xd9157 12-02-27 (月) 1:21
-
>>メモリ:4GB
MVToolsはメモリ馬鹿食いしますから、Systemも含めて4GBだと厳しいと思いますよ。
当方の環境だと1920x1080pのH264(4Mbps/High@L4.0)でSetMemoryMax(1280)だとMPC-HCが落ちるのでとりあえず倍のSetMemoryMax(2560)にして安定して再生できています。
ただmpc-hc.exeが常時3000MB近く消費してますが。 - APM 12-02-28 (火) 4:12
-
SetMemoryMaxの値を落としすぎるとMPCが落ちることを僕の環境でも確認できました。
解像度の小さい動画なら落ちず大きい動画では落ちるということであれば、
メモリ不足を疑うのがよさそうです。
Trackbacks:0
- Trackback URL for this entry
- http://an-pan-man.com/archives/2012/02/20_2056.php/trackback
- Listed below are links to weblogs that reference
- ffdshow + avisynth + avisynth MT + mvtools2で任意の動画を60fps再生 from APM in the hole
