更新履歴
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がサポートするすべてのコンテナ/コーデックが読み込めます
基本的な使い方
必須の指定項目は動画/映像のファイル名です。読み込みたい動画/映像のファイルを指定します。
1 |
v = LWLibavVideoSource( "xxxx.ts" ) |
“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に変換されます
使用例
基本
1 2 |
v = LWLibavVideoSource( "xxxx.ts", dr=true, repeat=true, dominance=1 ).AssumeFPS(30000,1001) v = v.height() == 1088 ? v.Crop( 0, 0, 0, -8 ) : v |
drを有効、RFFフラグ有効、TFF固定の設定で映像を読み込みます。AssumeFPS()は、フレームレートを指定する内蔵フィルタです。RFFのソースを読み込むと、本来の29.97fpsからずれることがあるので、固定しています
2行目は映像を読み込んだときに縦の解像度が1088になったら下8pxをCropし、それ以外だったらCropしない、という条件式です。SD(縦480)の映像を読み込んだ場合は、480は32の倍数なので、Cropの必要はありません
高速、RFFフラグが混入するBS/CSに対応、TFFに固定、という設定です。この手のソースをやる方はこのようにやると良いと思います
2つのソースが入ったtsから指定して映像を読み込む
1 |
v = LWLibavVideoSource( "xxxx.ts", stream_index=1 ) |
2つの映像が入っている場合は、stream_indexを0か1に指定することで切り替えることができます
VFRな動画をCFRに変換して読み込む
1 |
v = LWLibavVideoSource( "xxxx.mp4", fpsnum=60000. fpsden=1001 ) |
59.94fpsのCFRの動画として読み込みます
LSMASHVideoSource
mp4など、L-SMASHがサポートするコンテナを読み込みます
基本的な使い方
必須の指定項目は動画のファイル名です。読み込みたい動画のファイル名を指定します
1 |
v = LSMASHVideoSource( "xxxx.mp4" ) |
“xxxx.mp4″を読み込み、映像データを変数”v”に格納します。LWLibavVideoSourceと異なり、インデックスファイルを作りません
オプション
オプションの意味はLWLibavSourceと同じです。ただ、repeat, dominance, stream_indexなどの一部のオプションがなくなっています
AviUtlを使っていた方向けの解説
このページで紹介したフィルタおよびオプションは、AviUtlでのL-SMASH Worksの設定画面では上の画像のように対応しています
AviUtlで上のような設定だと、動画を最初LSMASHVideoSourceで読み込もうとし、無理だったらLWLibavSourceで読み込もうとする、という挙動を取ります
このページでは紹介していませんが、threads, Forward threshold, seek mode, Create Index file, Preferred decoders に相当するオプションはAviSynth版でもあります。知りたい方はマニュアルを参照してください
Video Scalerに相当するオプションは、AviSynthにはありません
コメント
https://github.com/HomeOfAviSynthPlusEvolution/L-SMASH-Works/releases/
さらに新しいバイナリがダウンロードできるようです。
コメントありがとうございます。
そちらのバイナリはまだ試していないので、確認してみます。