L-SMASH Worksを使って映像を読み込む

更新履歴

2021/01/04 ダウンロード先を変更

L-SMASH Worksは様々な動画、音声を読み込むことができます。また、コンテナに入った状態のものも読めるので、わざわざ動画から音声と映像を分離する必要もなくお手軽です。デコード自体はffmpegかLibavのどちらかが担当します

導入

Releases · HolyWu/L-SMASH-Works · GitHub

32bit版はplugins+フォルダに、64bit版はplugins64+に、それぞれコピーします

フィルタ

L-SMASH Worksには下記の4つのフィルタが用意されています

  • LSMASHVideoSource
  • LWLibavVideoSource
  • LSMASHAudioSource
  • LWLibavAudioSource

VideoSourceの方は映像の読み込みに、AudioSourceの方は音声の読み込みに使います。LSMASHの方はL-SMASHがサポートするコンテナ(mp4など)の読み込みに、LWLibavの方はffmpegがサポートするコンテナ/コーデックの読み込みに使います。当ページは映像の読み込みのページなので、VideoSourceの使い方について確認します

LWLibavVideoSource

ffmpegがサポートするすべてのコンテナ/コーデックが読み込めます

基本的な使い方

必須の指定項目は動画/映像のファイル名です。読み込みたい動画/映像のファイルを指定します。

“xxxx.ts”を読み込み、映像データを”v”という変数に格納します。LWLibavVideoSourceは映像を読み込むときに、インデックスファイルを作成します。インデックスファイルを作成すると、次回以降の読み込みが速くなり、シークなどが快適にできます

オプション

読み込むときの挙動を変更することができます。一部のオプションを紹介します。その他のオプションや詳細は公式のマニュアル(英語)などを参照してください

dr

( boolen / default : false )

ダイレクト読み込みをするかどうか。ダイレクト読み込みをすると、スピードアップ。ただし、縦の画素数が32の倍数になります。H.264の場合は縦2ライン追加されます

例えば、1280×720のH.264の動画を読み込もうとした場合、720より大きく近い32の倍数である736に2を足した738が縦の画素数となります。下部に18ラインゴミが追加されることになります。1920×1080や1440×1080のMPEG2でdrをtrueにすると、縦の画素数は1088になります。余計な部分は後でCropしてあげる必要があります。ただ、dr読み込み+Cropの方が、dr読み込み無しより速いと思われます

ちなみに、AviUtl版のL-SMASH Worksではこの設定はありません

repeat

( boolen / default : false )

RFF(Repeat First Field)フラグを読むか。プログレッシブ映像をインターレースに変換するためのフラグです。RFFフラグが混じっているものは、repeat=trueにしてフラグを読んでインターレースのみの状態にしないと正しくインターレース解除するのが困難です

プログレッシブ+RFFフラグのみのものであれば、repeat=falseにしてプログレッシブ映像として読み込みましょう

RFFフラグがない場合はtrueでもfalseでもデコード結果は同じになります。よくわからない方はtrue固定でもよいでしょう

dominance

( int[0-2] / default : 0 )

repeat有効時に、処理のフィールド順を指定します

0 : ソース映像のフラグに従い設定 / 1 : TFF / 2 : BFF

例えば、repeat=true, dominance=0のときにBFFになるソースがあった場合、dominance=1にするとTFFになります。個人的には1固定が良いと思っています

stream_index

( int[-1-n] / default : -1 )

ファイルの中に、映像が複数含まれている場合、どの映像を読み込むか指定することができます。初期値はー1(自動判定)です。手動で選択する場合は0以上の数値を入れます

fpsnum, fpsden

( int / default : 0, 1 )

VFR(可変フレームレート)な動画を読み込むときに使います。VFRをCFR(固定フレームレート)に変換し、音ずれしないように読み込みます。fpsnum/fpsden のフレームレートに変換します。例えば、fpsnum=60000, fpsden=1001 とすると、59.94fpsとしてVFRからCFRに変換されます

使用例

基本

drを有効、RFFフラグ有効、TFF固定の設定で映像を読み込みます。AssumeFPS()は、フレームレートを指定する内蔵フィルタです。RFFのソースを読み込むと、本来の29.97fpsからずれることがあるので、固定しています

2行目は映像を読み込んだときに縦の解像度が1088になったら下8pxをCropし、それ以外だったらCropしない、という条件式です。SD(縦480)の映像を読み込んだ場合は、480は32の倍数なので、Cropの必要はありません

高速、RFFフラグが混入するBS/CSに対応、TFFに固定、という設定です。この手のソースをやる方はこのようにやると良いと思います

2つのソースが入ったtsから指定して映像を読み込む

2つの映像が入っている場合は、stream_indexを0か1に指定することで切り替えることができます

VFRな動画をCFRに変換して読み込む

59.94fpsのCFRの動画として読み込みます

LSMASHVideoSource

mp4など、L-SMASHがサポートするコンテナを読み込みます

基本的な使い方

必須の指定項目は動画のファイル名です。読み込みたい動画のファイル名を指定します

“xxxx.mp4″を読み込み、映像データを変数”v”に格納します。LWLibavVideoSourceと異なり、インデックスファイルを作りません

オプション

オプションの意味はLWLibavSourceと同じです。ただ、repeat, dominance, stream_indexなどの一部のオプションがなくなっています

AviUtlを使っていた方向けの解説

AviUtlでのL-SMASH Worksの設定画面

AviUtlでのL-SMASH Worksの設定画面

このページで紹介したフィルタおよびオプションは、AviUtlでのL-SMASH Worksの設定画面では上の画像のように対応しています

AviUtlで上のような設定だと、動画を最初LSMASHVideoSourceで読み込もうとし、無理だったらLWLibavSourceで読み込もうとする、という挙動を取ります

このページでは紹介していませんが、threads, Forward threshold, seek mode, Create Index file, Preferred decoders に相当するオプションはAviSynth版でもあります。知りたい方はマニュアルを参照してください

Video Scalerに相当するオプションは、AviSynthにはありません