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
最終更新日時: 2014-07-31 (木) 22:02:29 (3719d)