スポンサーサイト

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

テロップの48fps化

ivtc_txt60mc48(clip src, int frame_ref, bool "srcbob", bool "draft")
txt60mcHybrid48(clip src,int "frame_ref",bool "srcbob",bool "draft",int "txt_area",bool "top",bool "show")
ivtc_txt60mc48.avsi

ivtc_txt60mcの48fps版です。
60fpsテロップを24fpsではなく48fpsに落とします。
重いわりにいろいろと中途半端感が否めません。
24/48fpsでVFR化する場合はx264には--timebase 1001/48000とするのが良さそうです。

<12/11/06> txt60mcHybrid48の記述にミスがあったので修正しました。
スポンサーサイト

32プルダウンの手動解除を簡単に行うための関数

EasyPullDown.avsi

32プルダウンをivtc_txt60mcのrefフレームと同じ形式で指定して手動解除します。
またフレーム範囲終端の選択フィールドの修正を行うことができます。

この形式のメリットは、例えばフレーム番号の末尾が
 1,2が縞ならref=0
 2,3が縞ならref=1
 3,4が縞ならref=2
 4,5が縞ならref=3
 5,6が縞ならref=4
という具合に最初の縞フレーム番号の末尾の数-1の値を指定するだけなので
早見表などを確認するまでも無く容易に選択可能です。


●使い方

   A = Trim(5000,9999).DoubleWeave().Pulldown(1,4)
   B = Trim(5000,9999).EasyPulldown(ref=3, field=0)
   C = EasyPulldown(5000,9999,ref=3, field=0)

   EasyPulldownの表記は上記B,Cの2通りあります。
   AとBは全く同一処理ですが、Cの場合は終端フレームの選択フィールドの修正を行います。
   カットの途中で分割する場合はCの書き方を推奨します。

   例えばテロップ処理のために下記のような分割を行う場合、
   v01=EasyPulldown(5000,9999,ref=3)
   v02=trim(10000,10999).Bob()
   v03=Trim(11000,19999).EasyPulldown(ref=3)
   と書くとv01の終点フレームを本来の選択フィールドに修正して、縞化するのを防ぎます。

● ref の値と対応するDoubleWeave().Pulldown(a,b)

       ref     field=0    field=1
       0   =   (0,3)     (1,3)
       1   =   (0,2)     (0,3)
       2   =   (0,2)     (2,4)
       3   =   (1,4)     (2,4)
       4   =   (1,3)     (1,4)


無題

x264 r2208って、r2200までと違って"--bitrate 0"に指定できないんですね。

というわけで今度から解析の時は"--bitrate 1"と書いておこう。
いやそもそも別に書かなくてもいい気もしますけどね・・・。

自分用メモ

輪廻のラグランジェ season2
3カット構成。後ろから順に10秒提供,20秒予告,ED。
str_trim="##trim##"
chap_file="chapter.txt"
chap=TrimClean(str_trim)
chap=TrimSplit(chap,1,3000,back=True)
chap=TrimSplit(chap,TrimCount(chap),300,back=True)
chap=TrimSplit(chap,TrimCount(chap)-1,600,back=True)
chap=TrimSplit(chap,TrimCount(chap)-2,2700,back=True)
part="avant,op,a-part,b-part,ed,next,ec"
WriteChapter(chap,chap_file,part,fps=framerate)

ココロコネクト
15秒予告の後にEDの構成。
str_trim="##trim##"
chap_file="chapter.txt"
chap=TrimClean(str_trim)
chap=TrimSplit(chap,1 ,3000,back=True)
chap=TrimSplit(chap,TrimCount(chap)-1,2700,back=True)
chap=TrimSplit(chap,TrimCount(chap)-2,450 ,back=True)
part="avant,op,a-part,b-part,next,ed,ec"
WriteChapter(chap,chap_file,part,fps=framerate)

バッチファイルの順次実行ツール

前回のツールでは各プロジェクトのバッチ処理をまとめて1枚のファイルで出力してましたが、
実際にはエンコードがエラー等で途中で止まる事も多いので、プロジェクトごとに別々に分けて
作成した方が良さそうです。

複数のバッチファイルを順次実行する簡易ツールも紹介しておきます
BatManager

エラー落ちなどの理由でCPU使用率の低い状態が一定時間続いたら現在のバッチ処理を途中終了して
次のファイルを実行します。
スクリプトの最後に"pause"や "cmd /k"とかは当然付けない方が良いでしょう。


avsをテンプレートから作成するツール

いつのまにかだんだんエンコード毎に大量のavsを作成する事が前提になってきてしまったので、
とりあえず僕が使っているavs作成用のマネージャソフトを公開してみます。
AvsT

DGIndexにテンプレートからavsを作成する機能がありますが、機能的にはあれの強化版みたいな感じです。

元々自分専用で使ってきたツールなので汎用性があるかどうか不明ですが、
テンプレートさえしっかり作っておけば、あとはCMカット(Trim)を渡すだけで
エンコードに必要なavsやバッチファイルを全て作成できるようになっているつもりです。



/*------------- DGIndexによるd2v作成からAvsT起動までを行うバッチスクリプト -------------*/
@echo off
set DGIndex="DGIndex.exeのパス"
set Fawcl="fawcl.exeまたはfaw.exeのパス"
set Aviutl="aviutl.exeのパス"
set AvsT="AvsT.exeのパス"

set /p d2vname="d2vファイル名を指定してください>"
%DGIndex% -IF=[%~1] -IA=3 -fo 0 -OM=2 -OF=[%~dp1%d2vname%] -EXIT > NUL
for %%F in ("%~dp1%d2vname%*.aac") do %Fawcl% "%%F" "%~dp1%d2vname%.wav"
del "%~dp1%d2vname%*.aac"
%Aviutl% "%~dp1%d2vname%.d2v"
%AvsT% -v "%~dp1%d2vname%.d2v" -a "%~dp1%d2vname%.wav"
EXIT


tsファイルをこのバッチファイルに突っ込めば、d2vの名前を設定したあと

 DGIndexによるd2v&aacの作成
 ↓
 FAWでaacの偽装wav化(ついでにaacは削除)
 ↓
 CMカットのためにAviutlの起動
 ↓
 AvsTの起動

まで自動でやってくれるようになってます。

小ネタ

●ファイル名の後ろ3文字によって入力プラグインを自動的に切り替えるスクリプトの例
function VideoSource(string video_file)
{
ext=RightStr(video_file, 3)
return (ext=="d2v")?MPEG2Source(video_file)
\:(ext=="dgi")?DGSource(video_file)
\:(ext=="dga")?AVCSource(video_file)
\:(ext=="avi")?AVISource(video_file)
\:FFVideoSource(video_file)
}

#example
video="hogehoge.d2v"
VideoSource(video)

一番下にはいずれの条件にも当てはまらない場合に使う入力プラグインを書きます(上記の例ではFFVideoSource)。
自分が使う可能性のある拡張子を片っ端から登録しておきます。
特に音声プラグインの切り替えは意外と面倒なので、同様に自動切り替えできるようにしとくと便利です。



●画面スクロール中の1フレームだけのノイズを修正するスクリプト
function Fix1Frame(clip c,int fix_frame)
{
jitter = c.Trim(fix_frame-1,-1)++c.Trim(fix_frame+1,-1)
jsup = jitter.MSuper (pel=2)
vect_f = jsup.MAnalyse (isb=false, delta=1, overlap=4)
vect_b = jsup.MAnalyse (isb=true, delta=1, overlap=4)
comp = jitter.MFlowInter (jsup, vect_b, vect_f, time=50, thSCD1=400)
fixed = comp.trim(0,-1)
return c.Trim(0,fix_frame-1)++fixed ++c.Trim(fix_frame+1,0)
}

#example
MPEG2Source("d2v")
trim()++trim()++trim()++trim()
its("def")
Fix1Frame(25557)

インタレ解除後のノイズの出てるフレーム番号を書きます。
ivtc_txt60mcのまんま流用なので、複雑な動きのフレームだと壊れます(ivtc_txt60mcは同じ絵のフィールド同士から中間を作るための関数なので)。
静止シーンなら単純なコピペで済むので、一定方向に動いてるスクロールシーン専用ってとこでしょうか。

(修正前)スクロール中のHDCAMノイズ
sources.png

(修正後)
fixs.png

itsで手動プルダウン解除する場合

itsでは独自のコマンドでフレームの間引き処理が使えるようです。<参考>
基本的によく使うと思われるコマンドは以下の2通りの書き方です。

(5,0,3)
これは"DoubleWeave.SelectEvery(5,0,3)"と同じです。
itsのコマンドは常に事前にDoubleWeaveされています。


<1010010100>
DoubleWeave後の10フレームから0,2,5,7フレーム目を選択します。
つまりこれは"DoubleWeave.SelectEvery(5,0,2)"と同じです。
もちろん<10100>と書いても同じ事になります。

また、<10>なら"DoubleWeave.SelectEvery(2,0)"になります。
つまりこれはDoubleWeave.SelectEvenと同じです。何もせず素通ししたい時に使います。



実際のdefへの記述の書き方は

0-999 [24] (5,1,4)
1000-1999 [24] <01001>

という具合です。
2行ともDoubleWeave.SelectEvery(5,1,4)と同じ処理です。

手動解除を行う場合は、外部フィルタとして"DoubleWeave.SelectEvery(5,a,b)"や
"DoubleWeave.PullDown(a,b)"を使うよりもitsの内蔵コマンドの方を使用する事をお勧めします。

理由は次で書きます。



yの範囲を指定してマスク

yrangemask.rar
yピクセル値の範囲を指定してマスクを作ります。
それだけです。

「それ、T●Sがやります」

Auto_VFRのログが荒れて非常に邪魔なので、解析中は黒く塗りつぶすなどして隠しておきたいところです。

以前の豚くん用に作った"TBSCrop()"のパラメータを変えて対応してもいいのですが、
全フレームに渡って広い範囲を覆い隠すのは縞判定に影響を与えないか不安な気がします。

そこで内蔵フィルタの"FreezeFrame"を改良して、source_frameをサイズ指定しながら
フレームを差し替えられるようにして対応してみます。

FreezeFrame2.avsi
function FreezeFrame2(clip c
\,int "first_frame", int "last_frame",int "source_frame"
\,int "left",int "top",int "right",int "bottom"
\,int "x",int "y"
\,bool "show")


#Aパート冒頭に「それT●Sがやります」が現れる場合の解析用avsの例
/*-------------------------------------------------------------------
MPEG2Source("d2v")
str="Trim(42,3037)++Trim(4837,20629)++Trim(22429,46494)++Trim(49192,50390)"

v01=Eval(TrimSelect(str,1))
v02=Eval(TrimSelect(str,2)).FreezeFrame2(0,240,-2,left=960,top=0,right=0,bottom=740,show=false)
v03=Eval(TrimSelect(str,3))
v04=Eval(TrimSelect(str,4))
all=v01++v02++v03++v04
all

Auto_VFR("log.txt")
/*-------------------------------------------------------------------

freezeframe

"source_frame=-2"で黒く塗りつぶせるようにしました(-1だと0フレーム目指定なので)。

「それT●Sがやります」はだいたい210フレーム以内に消えると思いますが、とりあえず余裕を取って
0~240フレームまで黒く塗りつぶしています。
source_frameのサイズはなるべく4の倍数が良いかもしれません。

プロフィール

Author:putin
ロゴ関係ソース

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

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

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

この人とブロともになる

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