EasyVFR
説明 †
AviSynthスクリプトからタイムコードを吐き簡単にVFRしようというものです。
EasyVFR version 0.2 by carpenter17 改2 †
EasyVFR_ver2.avs より引用:
# AviSynth v2.55以上
# 任意のfpsの入力クリップで任意のfps区間の終結端数補正。
# ドロップモード追加 DeleteFrame, SelectEvery, DeDup(ovrで削除するフレームを指定)などで、
# フレーム数を操作したところをのfpsを ( newcount / oldcount ) * src_fps で出力。
詳しくは、AVS ファイル内の説明を参照してください。
EasyVFR (version 0.2 by carpenter17) 改3 について †
# AviSynth v2.55以上
# 任意のfpsのソースクリップに対し、任意のfps区間の終結端数補正に対応。
# 平均fpsモードを追加。( newcount / oldcount ) * src_fps で出力。
# timecode v0形式(要tc2mp4ModF.pl)、v2形式の出力に対応(要Perl)
# チャプターファイル出力を追加。
# MP4 または MKV 推薦。(MP4にtimecode v0を使うと計算上は狂いがない)
# 要 Perl,Math::BigRat WarpSharp.dll
詳しくは、AVS ファイル内の説明を参照してください。
ダウンロード †
EasyVFR version 0.2 by carpenter17 †
easyvfr.avsにでも保存してください。
# EasyVFR version 0.2 by carpenter17
function EasyVFR_WriteTimeCodeHeader(clip, timecode_path, fps) {
clip.WriteFileStart(timecode_path, """ "# timecode format v1" """)
clip.WriteFileStart(timecode_path, """ "Assume " + string(fps) """, append=true)
}
function EasyVFR_WriteTimeCodeLine(clip, timecode_path, start, end, fps) {
clip.WriteFileStart(timecode_path, """ string(start) + "," + string(end) + "," + string(fps) """, append=true)
}
function EasyVFR_Create(base_clip, first_clip, timecode_path) {
base_clip.EasyVFR_WriteTimeCodeHeader(timecode_path, base_clip.framerate)
base_clip.EasyVFR_WriteTimeCodeLine(timecode_path, 0, first_clip.framecount - 1, first_clip.framerate)
return first_clip.AssumeFPS(base_clip)
}
function EasyVFR_Append(result, clip_add, timecode_path) {
result.EasyVFR_WriteTimeCodeLine(timecode_path, result.framecount, result.framecount + clip_add.framecount - 1, clip_add.framerate)
return result + clip_add.AssumeFPS(result)
}
EasyVFR version 0.2 by carpenter17 改2 †
EasyVFR (version 0.2 by carpenter17) 改3 †
EasyVFR3 - OneDrive からダウンロードしてください。
EasyVFR (version 0.2 by carpenter17) 改3 mod †
EasyVFR3 - OneDrive からダウンロードしてください。
Take-R 氏による改造版。Trim 範囲内の個別チャプター出力が追加されている。
詳しくは、Avisynth + x264 を用いたTSファイルのエンコード - 応用4 : EasyVFR用のAvsPマクロとEasyVFR3mod - Take-Rのメモ帳を参照。
使い方 †
適当な変数にタイムコードファイル名を入れ、最初のclipをEasyVFR_Createで作成し、 その後EasyVFR_Appendでつなげたものを作ります。 ただし、音声は壊れるだけなのでKillAudio()しておいてください。
例:
src = ...load source... # 音声があればsrcはKillAudioしておくこと a = src.Trim(0,100).IT(fps=24, ref="TOP") b = src.Trim(101,200).IT(fps=30, ref="TOP") c = src.Trim(201,300).IT(fps=24, ref="TOP") tcpath = "c:\tmp\timecode.txt" all = EasyVFR_Create(src, a, tcpath) all = all.EasyVFR_Append(b, tcpath) all = all.EasyVFR_Append(c, tcpath) all # 音声を出力するときはa + b + cという感じにすればいい。 # 省略記法を利用して # EasyVFR_Create(src, a, tcpath).EasyVFR_Append(b, tcpath).EasyVFR_Append(c, tcpath) # でもよい。
これをVirtualDubやAVS2AVIなどでロードすればその瞬間にタイムコードが出力され、 エンコードすれば映像ファイルが出来上がります。
これを例えば120fps aviにしたければ できた映像ファイルとタイムコードをavi_tc_packageにあるtc2cfrに 通せばいいだけです。
実際の例 †
# load plugins...
Import("easyvfr.avs")
src = MPEG2Source("test.d2v")
a = src.Trim(44000,45375).TFM().TDecimate(mode=1)
a = a.Deen("a3d",1,4,5,2.0)
a = a.LanczosResize(640,480,8,0,-8,-0)
b = src.Trim(45376,48071).TDeint()
b = b.Deen("a3d",1,4,5,2.0)
b = b.LanczosResize(640,480,8,0,-8,-0)
c = src.Trim(48072,48400).TFM().TDecimate(mode=1)
c = c.Deen("a3d",1,4,5,2.0).LanczosResize(640,480,8,0,-8,-0)
tcpath = "d:\timecode.txt"
result = EasyVFR_Create(src, a, tcpath)
result = result.EasyVFR_Append(b, tcpath)
result = result.EasyVFR_Append(c, tcpath)
result
コメント †
- 勝手に追加してしまいました。問題があれば適当に処置をお願いします>にーやんさん -- carpenter17 2006-06-28 (水) 00:31:44
- どうぞ使ってください。 -- にーやん 2006-06-28 (水) 03:19:14