スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

メモ7

/*---ログを作成する関数Auto_VFR---*/
今さらですが書いたことが無かった気がするので。
ソースの状態が悪い場合は縞判定オプションを変更してみてください。

function Auto_VFR(
  \clip c,
  /*--- 出力ファイルパス ---*/
  \string file,    #ログのパス名

  /*--- 縞判定に関する設定 ---*/
  #各オプションの説明はTIVTCの"ShowCombedTIVTC - READ ME.txt"を参照
  \int "cthresh"
  \,int "mi"
  \,bool "chroma"
  \,int "blockx"
  \,int "blocky"

  /*--- IsCropに関する設定 (-REFコマンドを使う場合、使うと精度が上がります)---*/
  \,bool "IsCrop"      #通常のログと画面一部をCropしたログを同時に採ります(default"false")
  \,int "crop_height"    #クロップの高さ(default c.height-(16*50))
  \,bool "IsTop"       #画面上部をクロップします(default"false")
  \,bool "IsBottom"     #画面下部をクロップします(default"true")
  \,bool "show_crop"    #クロップされてる状態を確認します(default"false")

  /*--- IsDupに関する設定 (-DUPコマンドを使う場合必要です)---*/
  \,bool "IsDup"      #通常のログとモーション検出のログを同時に取ります(default"false")
  \,int "thr_m"       #(default 10)
  \,float "thr_luma"    #(default 0.010)
\)
スポンサーサイト

メモ6

/*---ログを作成する関数Auto_VFRと、AutoVfr.exeのコマンドの基本例---*/
-SKIPは周期が細かく変更される作品ではない限り、1以上が良いと思います。

※24fpsのみ
 Auto_VFR("log.txt")
 [AutoVfr.exe -i "log.txt" -o "a.def" -SKIP 1 -FIX 0 -30F 0 -60F 0]
//------------------------------------------------------------------

※自動関数のみ
 Auto_VFR("log.txt")
 [AutoVfr.exe -i "log.txt" -o "a.def" -SKIP 1 -FIX 0 -24A 1 -30A 1]
//------------------------------------------------------------------

※TBSアニメ
 TBSCrop().Auto_VFR("log.txt")
 [AutoVfr.exe -i "log.txt" -o "a.def" -SKIP 1 -FIX 0]
//------------------------------------------------------------------

※アプコンアニメ
 Auto_VFR("log.txt",cthresh=12,blocky=8)
 [AutoVfr.exe -i "log.txt" -o "a.def" -SKIP 0 -FIX 0]
//------------------------------------------------------------------

※テロップの24fps化関数を使う場合
 ・下テロップ
 Auto_VFR("log.txt",IsCrop=true,crop_height=256)
 ・上テロップ
 Auto_VFR("log.txt",IsCrop=true,crop_height=256,IsTop=true,IsBottom=false)
 [AutoVfr.exe -i "log.txt" -o "a.def" -SKIP 1 -FIX 0 -REF 150]
//------------------------------------------------------------------

※12fps以下のfpsを使う場合
 Auto_VFR("log.txt",IsDup=true)
 [AutoVfr.exe -i "log.txt" -o "a.def" -SKIP 0 -FIX 0 -DUP 1]

メモ5

/*---基本的な解除方法3---*/
その他24fpsで使用されるのは以下の5つです。
SelectEvery(5,0,1,2,3) -Itsでは(10,0,2,4,6)
SelectEvery(5,0,1,2,4) -Itsでは(10,0,2,4,8)
SelectEvery(5,0,1,3,4) -Itsでは(10,0,2,6,8)
SelectEvery(5,0,2,3,4) -Itsでは(10,0,4,6,8)
SelectEvery(5,1,2,3,4) -Itsでは(10,2,4,6,8)

これらを判定処理に使うと、30pを24pと誤認したり、或いは24pであっても
フレームを飛ばしてしまうなどのおそれがあります。
よって判定自体はまずPullDown(0,2)~(2,4)の5種で行い、その区間を
それぞれ対応する上記関数に置き換えられるかどうか判断し、スキップ数が
少ない等の条件が揃えばPullDownの代わりにたまに使用されます。

動きがほとんど無いシーンなどでは周期に関係なく唐突に使われる事もあります。


/*---基本的な解除方法4---*/
30fpsは以下の2種類があります。
無し -Itsでは<10>
Doubleweave.SelectOdd -Itsでは<01>

Oddはコマンドで"-Odd 1"と入れると使用されるようになりますが、
基本的に使われる事はあまり無いと思います。
TBSの豚が現れた時に背景の絵が全く動いていなければ、もしかすると
使用されるかもしれません。

アニメにおいてはシーン周期自体に30pがある作品以外では30fps自体
オフにしておいた方が無難かもしれません。
例えばテロップが30pであった場合に厄介な事になると思います。

メモ4

/*---5の倍数フレーム数でカットする仕様に関して---*/
30fpsのベースクリップを24fps化した場合、フレーム数が5の倍数でないと
いろいろと問題が発生します。
特に問題なるのが表示時間の変化が起きることです。
この点に関してあまり厳密では無いかもしれませんが平易にまとめてみます。
//------------------------------------------------------------------
例えば「5フレーム@30fps」のクリップがあったとします。
このクリップの表示時間は5/30秒(20/120秒)です。
このクリップを24fps化すると、どんな24fps関数でも4フレームになります。
表示時間は4/24秒(20/120秒)となり、変化は起きません。
//------------------------------------------------------------------
では「6フレーム@30fps」(表示時間:24/120秒)を24fps化するとどうなるか?
これは関数の処理内容によるのですが、多くの関数の場合4フレームになります。
表示時間は先程と同じ4/24秒(20/120秒)です。

ここで二つの問題が生じています。
・間引き判定とは無関係に1フレームがドロップしてしまった。
・表示時間が4/120秒短くなってしまった。

5の倍数でない30fpsクリップを24fps化すると、しばしばこの間引き判定とは
無関係なドロップが発生します。
これはCMカットだけの分割ではほとんど問題になりませんが、細いスパンで
分割を行う場合は無視できなくなるかもしれません。
//------------------------------------------------------------------
では「6フレーム@30fps」を"DoubleWeave.PullDown(0,2)"で24fps化した場合は?
この場合、今度は5フレームになります。
ドロップこそ起きていませんが、表示時間は5/24秒=25/120秒となり、今度は
元クリップよりも長くなってしまいました。

これらの事からドロップの有無に関係なく、元クリップとの表示時間の齟齬は
必ず生じてしまう事が分かります。
//------------------------------------------------------------------
これを調整するのがいわゆる終端補正と呼ばれる処理です。
簡単に言うとカットの最終フレームの表示時間を歪めることで全体の表示時間の
長さの帳尻を合わせています。
//------------------------------------------------------------------
AutoVfrでは仕様上どうしても多分割になることが多く、終端補正の多用も避けた方が
無難と考え、最終カット以外は必ず5の倍数(又はそれと同等の戻りフレーム数に調整)の
フレーム数で分割します。


※よくアニメのエンコサイトとかで見かけるavsの書き方について
tr1=13696
tr2=23975
tr3=43754
tr4=44052
Trim(0,tr1-1).DoubleWeave().SelectEvery(5,0,2) ++ \
Trim(tr1,tr2-1).DoubleWeave().SelectEvery(5,0,2) ++ \
Trim(tr2,tr3-1).DoubleWeave().SelectEvery(5,1,3) ++ \
Trim(tr3,tr4).DoubleWeave().SelectEvery(5,0,2)

この書き方の場合、上述した理由から微妙に問題が生じている事が分かります。
全てのカットが5の倍数で無いとすると、4カット目に辿り着くまでに最大0.1秒程度
表示時間がズレる事があります。
たとえ24fps関数しか使っていなくても、この場合は終端補正を入れてVFR化した方が無難です。

メモ3

/*---frame_refの自動指定---*/
これはivtc_txt60mc(http://forum.doom9.org/showpost.php?p=1466105&postcount=4)
という関数のための機能です。

この関数は60iテロップのあるシーンを24fpsにしてもテキストの移動量が一定になるようにします。
この関数を使うには3-2プルダウン周期のはじまる最初のフレーム番号を指定しなければ
いけませんが、AutoVfrでは以下の2つの方法でこれを自動指定します。

①関数Auto_VFR(IsCrop=true)でログを作成する。
通常クリップのログに加えて、画面の下(または上)部分をクロップしたクリップの
2つのクリップの縞検出ログを同時に作成します。
マニュアル解除が可能な範囲では通常のログしか使いませんが、それが不可能な範囲では
クロップされた側のクロップを読んで周期の判別を試みます。

クロップの高さはcrop_heightで指定できます。
default値の決め方は今思うとあんまりよろしくないので、
Auto_VFR(IsCrop=true,crop_height=256)
とか、ちゃんと明示しておいた方が良いかもしれません。
show_crop=trueでテロップが全部隠れてるかどうかも場合によっては確認が必要です。

※IsCropに関連するパラメータのdefault値
Auto_VFR(IsCrop=false,crop_height=height-(16*50),IsTop=false,IsBottom=true,show_crop=false)

AutoVfr.exeでは -REF 1またはそれ以上の数を指定した場合、このクロップされたログを
使ってframe_refの自動指定を試みます。

②前後区間から推測する。
AutoVfr.exeで -REF 5以上(5フレーム間隔なので)の数を指定した場合、①に加えて
前後のTrimの周期からframe_refを推測して適用します。
例えば-REF 150なら150フレーム以上のテロップシーン(と推察される範囲)に適用されます。

全て推測でかまわない場合はクロップされたログは必要無い事になります。
推測だけでもそう簡単に間違えるようにはなっていないつもりですが、周期不定の場合は
テロップの最中に周期変更が生じている可能性も否定できないので絶対とは言えません。

メモ2

/*---EasyVFRでの1フレーム付加---*/
EasyVFR形式で出力すると、たまに
c001=Trim(1205,1505).DoubleWeave.PullDown(2,4)
c002=Trim(1505,1709).DoubleWeave.PullDown(2,4)
のように5の倍数+1フレームになるTrimがあります。
c001では1フレーム足されていますが、同じ解除方法なのにc002では足されていません。
これはDoubleWeaveクリップの最後から2番目のフレームが縞かどうかによって決まります。

DoubleWeaveクリップの最終フレームはその一つ前のフレームと同一になってしまいます。
もしそこが縞だった場合、ログ上では縞無しだったフレームも縞になってしまうので
1フレーム足す必要があります。

(2,4)の場合では返すフレーム数は増えないのでこのままですが、(1,4)の場合、+1すると
返すフレームも一枚増えてしまうのでLoopで1フレーム削っています。

/*---ドロップフレーム---*/
全てのTrimが5の倍数のフレーム数、又は返すフレーム数が5の倍数の時と同じになる
仕様なので、末端フレームのドロップは(最終Trim以外は)理屈上起きないはずです。

/*---重複フレーム---*/
例えば00011 (1=縞,0=無)という周期のクリップがあるとします。
これをフィールド分けして見ると
aa-bb-cc-cd-de-e・・・・・
という並び方になります(topとbottomの違いはここでは省略)。

これをDoubleWeave.PullDown(2,4)で解除した場合、Trim末端の最後のフレームは"ee"に
なるのですが、次のTrimの先頭フレームも(0フレーム目で周期変更していない限り)"ee"
になるので、もし次のTrimをDoubleWeave.PullDown(0,3)などで解除した場合、フレームの
重複が生じる可能性があります。
AutoVfrでは、少なくともマニュアル解除同士ではこういった重複が起きうる解除は
使用しないようにしています(自動関数が適用された場合はこの限りではありません)。


メモ1

AutoVfrの現時点(ver0.1.0.9)での仕様を散文的にメモっていきます。


/*---基本的な解除方法---*/
例えば 01100 (1=縞,0=無)という周期のクリップをDoubleWeaveすると
0010100101 という周期になります。

このクリップをプルダウン解除する方法は
(1)DoubleWeave.PullDown(0,3) (SelectEvery(10,0,3,5,8)と同じ)
(2)DoubleWeave.PullDown(1,3) (SelectEvery(10,1,3,6,8)と同じ)
(3)DoubleWeave.SelectEvery(10,0,3,6,8)
(4)DoubleWeave.SelectEvery(10,1,3,5,8)
の4通りあります。

AutoVfrで使用されるのは(1)~(3)までで、優先順位は
①最も長い区間解除できること
②①が同じの場合はスキップ数が少ないこと
③それも同じの場合は(1)~(3)の順
となります。


/*---基本的な解除方法2---*/
30p区間をDoubleWeaveすると0101010101 (1=縞,0=無)という周期になります。
縞無し24p(2-4-2-2)ではこの5つの縞のうちのどこかが縞無しなので、
(10,0,2,4,7)
(10,0,2,5,8)
(10,0,3,6,8)
(10,1,4,6,8)
(10,2,4,6,9)
のどれかが適用できるかどうかで30pとの区別をしています。
周期上は30pでも、単に画面が動いてなくて縞が足りない場合は今のところ
24pと判定する他ありません。

ロゴフェードの自動設定関数

この記事はブロとものみ閲覧できます
ブロとも申請

文字列のTrimを編集する関数集(使い方編)

/*CMカット*/
str_trim="Trim(77,4900)++Trim(6700,22852)++Trim(24652,46379)++Trim(48179,49525)"
Eval(str_trim)

/*Trim文字列を0から始まる連結した表記に書き直す*/
str_clean=TrimClean(str_trim)
#Trim(0,4823)++Trim(4824,20976)++Trim(20977,42704)++Trim(42705,44051)

/*1番目のTrimを後ろから3000フレーム(だいたいOP&提供の長さ)で分割*/
str_split=TrimSplit(str_clean,1,3000,back=true)
#Trim(0,1823)++Trim(1824,4823)++Trim(4824,20976)++Trim(20977,42704)++Trim(42705,44051)

/*後ろから2番目のTrimを後ろから2700フレーム(だいたいEDの長さ)で分割*/
str_split=TrimSplit(str_split,TrimCount(str_split)-1,2700,back=true)
#Trim(0,1823)++Trim(1824,4823)++Trim(4824,20976)++Trim(20977,40004)++Trim(40005,42704)
#\++Trim(42705,44051)

/*チャプターファイルの作成*/
WriteChapter(str_split,"chapter.txt","Avant,OP,A-part,B-part,ED,Next")
#編成が毎回同じならここまでの手順で自動でチャプターファイルを作成できる。


/*その他関数と戻り値*/
TrimCount(str_split)
#6
TrimSelect(str_split,2)
#Trim(1824,4823)
TrimRemove(str_split,2)
#Trim(0,1823)++Trim(4824,20976)++Trim(20977,40004)++Trim(40005,42704)++Trim(42705,44051)
str_bob=TrimBob(str_split)
#Trim(0,3647)++Trim(3648,9647)++Trim(9648,41953)++Trim(41954,80009)++Trim(80010,85409)
#\++Trim(85410,88103)
TrimWeave(str_bob)
#Trim(0,1823)++Trim(1824,4823)++Trim(4824,20976)++Trim(20977,40004)++Trim(40005,42704)
#\++Trim(42705,44051)

文字列のTrimを編集する関数集

TrimClean

< syntax >
TrimClean(string str_trim)
TrimCount(string str_trim)
TrimSelect(string str_trim,int int_select)
TrimRemove(string str_trim,int int_select)
TrimSplit(string str_trim,int int_select,int int_frame,bool "back")
TrimBob(string str_trim)
TrimWeave(string str_trim)
WriteChapter(clip c,string str_trim,string file,string chapter_name,float "fps")
※ここに書かれていない繰り返し処理用の引数は使用しないこと

<備考>
実際のクリップではなく文字列のみを編集する。
実は括弧とかカンマの位置を調べてるだけなので形式が不備だとNGかも。
Trim(1000,0)とかTrim(1000,-1)みたいなフレームの絶対値表記でないのもNG。

テキスト部分だけivtc_txt60mcで処理

function txt60mcHybrid(clip c,int frame_ref,bool "draft",int "field",int "txt_area",bool "top",bool "show"){
h=c.height()
draft=default(draft,false)
field=default(field,0)
show=default(show,false)
field=(field>1)?1:(field<0)?0:field
txt_area=default(txt_area,(h==1080)?280:h/4)
txt_area=(txt_area%2==0)?abs(txt_area):abs(txt_area-1)
top=default(top,false)
crop_c1=(top==false)?0:txt_area
crop_c2=(top==false)?h-txt_area:0
num=frame_ref%5
offset1=select(field,select(num,0,0,0,1,1),select(num,1,0,0,2,1))
offset2=select(field,select(num,3,2,2,4,3),select(num,3,3,2,4,4))
c1=c.crop(0,crop_c1,0,h-txt_area).DoubleWeave().Pulldown(offset1,offset2)
c_e=c1.Trim(c1.framecount-1,-1).SeparateFields().FreezeFrame(1,1,0).weave()
c1=(num==3)?c1.Trim(0,c1.framecount-2)++c_e:c1

c2=c.crop(0,crop_c2,0,txt_area).ivtc_txt60mc(frame_ref,draft=draft)
c2=(show==false)?c2:c2.coloryuv(gain_v=32)
return (top==false)?StackVertical(c1,c2):StackVertical(c2,c1)
}
/*
<利点>
・ivtc_txt60mcで処理する面積を小さくすることで大幅に高速化
・bobフレームの面積を減らすことで画質がUP(するかも)
<不安な点>
・境目が不自然にならないかどうか。テストした限りでは全然問題ない(bobにはtdeintを使用)
<備考>
frame_refごとにPulldownで選択できるoffsetの組み合わせは2種類あるが、
基本的にはどちらを選んでもいい、はず(field=0/1で選択可)。
ただしframe_ref=2だけ(0,2)/(2,4)で選んでる絵が違うので(0,2)しか選べない((2,4)では絵がズレる)。
クロップ高はログを作った時と同じ設定にしとけば間違いが起きないだろう。
<補足>
YV12のインタレースクリップのクロップ後の高さは4の倍数推奨
<修正>
frame_ref=3の場合だけ末端フレームのフィールドが足りないので赤字部分を追記した。
他もベースクリップが5の倍数フレーム数である事を前提にしている。
*/

ログの作成が遅い場合

最後のWriteFileにthreadrequestを付けるとけっこう速くなるようです。
序盤の方でファイルに重複出力が生じてしまうようですが、ソフトの方で読み飛ばすので問題ありません。

<追記>
それでもやたらと遅い場合は上部72~120ドット程度(4の倍数)クロップしてみてください。
縦の解像度が小さくなると非常に速くなります((IsCrop=true)のクロップ高も変化するので注意)。
ほとんどの場合支障は無いと思いますが、縦のエンドロールなどが存在した場合、
最後の文字が消える瞬間に若干誤差が生じます。
まぁ大抵最後の文字は真ん中で止まるから大丈夫・・・かな。

<追記2>
IsCropを使用して極端に遅くなる場合は、crop_heightパラメータを少し上げるか下げるか
してみると劇的に改善する場合があるようです。適正値はいまひとつよく分かりません;;

タイトル無し

      r;ァ'N;:::::::::::::,ィ/      >::::::::::ヽ
.      〃  ヽル1'´        ∠:::::::::::::::::i
       i′  ___, - ,. = -一   ̄l:::::::::::::::l
.      ! , -==、´r'          l::::::/,ニ.ヽ
      l        _,, -‐''二ゝ  l::::l f゙ヽ |、 ここはオレのメモ帳だ
        レー-- 、ヽヾニ-ァ,ニ;=、_   !:::l ) } ト
       ヾ¨'7"ry、`   ー゙='ニ,,,`    }::ヽ(ノ  チラシの裏じゃスペースが足りねぇんだ
:ーゝヽ、     !´ " ̄ 'l,;;;;,,,.、       ,i:::::::ミ
::::::::::::::::ヽ.-‐ ト、 r'_{   __)`ニゝ、  ,,iリ::::::::ミ
::::::::::::::::::::Vi/l:::V'´;ッ`ニ´ー-ッ-,、:::::`"::::::::::::::;゙ ,  な!
:::::::::::::::::::::::::N. ゙、::::ヾ,.`二ニ´∠,,.i::::::::::::::::::::///
:::::::::::::::::::::::::::::l ヽ;:::::::::::::::::::::::::::::::::::::::::::/ /
::::::::::::::::::::::::::::::! :|.\;::::::::::::::::::::::::::::::/ /
プロフィール

putin

Author:putin
ロゴ関係ソース

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
メールフォーム

名前:
メール:
件名:
本文:

リンク
ブロとも申請フォーム

この人とブロともになる

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。