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