サンプルスクリプト/クリップの総時間を算出する のバックアップソース(No.1)

#contents

* 今日の献立 [#oc6962d3]

AviSynth には、ビデオクリップの長さ(総時間)を直接取得するような関数はありません。しかし、クリップの総フレーム数を取得する FrameCount とフレームレート((fps = frame per second(1 秒あたりのフレーム数)))を取得する FrameRate を組み合わせることによって、クリップの総時間を知ることができます。

今回は、これらの関数を使って算出したビデオクリップの総時間を、Subtitle フィルタで表示させるというスクリプトを作ってみましょう。

なお、単にビデオクリップの総時間を知りたいだけなら、[[Info]] フィルタで確認することができます。

* 材料 [#daaa225f]

-FrameCount(AviSynth 内蔵関数)
-FrameRate(AviSynth 内蔵関数)
-String(AviSynth 内蔵関数)
-AviSouce(AviSynth 内蔵フィルタ)
--他のビデオ入力フィルタでもよい。
-[[Subtitle]](AviSynth 内蔵フィルタ)
--FrameCount で取得した総フレーム数の確認に使用。

* 作り方 [#v1024b86]

+ビデオクリップを読み込みます。
#code{{
AviSource("C:\path\example.avi") # ソース
}}
+FrameCount 関数を使って総フレーム数を取得し、変数 total_frames に代入します。
#code{{
total_frames = FrameCount() # 総フレーム数を取得して、変数 total_frames に代入
}}
+FrameRate 関数を使ってフレームレートを取得し、変数 frame_rate に代入します。
#code{{
frame_rate = FrameRate() # フレームレートを取得して、変数 frame_rate に代入
}}
+総フレーム数をフレームレートで割って総時間を求め、変数 total_time に代入します。
#code{{
total_time = total_frames / frame_rate # 総フレーム数 / フレームレート => 総時間
}}
+今回は、Subtitle フィルタで総フレーム数を表示するため、変数 total_time を文字列(String 型)に変換して、変数 str に代入します。String 関数を使えば、整数や小数を文字列に変換することができます。
#code{{
str = String(total_time) # 文字列に変換して、変数 str に代入
}}
+最後に、Subtitle フィルタを使って、変数 str をクリップの上に表示します。
#code{{
Subtitle("Time: " + str) # str をクリップ上に表示
}}
+完成したスクリプトは、以下のとおりです:
#code{{
AviSource("C:\path\example.avi") # ソース
total_frames = FrameCount() # 総フレーム数を取得して、変数 total_frames に代入
frame_rate = FrameRate() # フレームレートを取得して、変数 frame_rate に代入
total_time = total_frames / frame_rate  # 総フレーム数 / フレームレート => 総時間
str = String(total_time) # 文字列に変換して、変数 str に代入
Subtitle("Time: " + str) # str をクリップ上に表示
}}

#ref(total_time.png)

* 関連レシピ [#r0e5fb46]

-サンプルスクリプト/総フレーム数の取得