TSMemory は、TVTest と AviUtl を連携させて映像メモリ機能を実現するためのプラグインセットです。 静止画キャプチャ用途での使用を想定しています。
これは 64bit の TVTest と AviUtl ExEdit2 (AviUtl2) で動作するようにしたバージョンです。
AviUtl 1.xx 版の TVTestSrc.aui と CaptureUtil.auf にあたる部分は、
AviUtl2 の汎用プラグイン TSMemory-TVTestSrc.aux2 ひとつにまとまっています。
TVTest ver.0.10.0-dev-dce8b3e (x64) と AviUtl ExEdit2 ver.2.1.5 で動作確認しています。
TVTest 側
TSMemory.tvtp TVTest プラグイン
TSMemory.ini その設定
AviUtl2 側
TSMemory-TVTestSrc.aux2 汎用プラグイン (映像の読み込み・キャプチャ)
TSMemory-TVTestSrc.ini その設定
English.TSMemory-TVTestSrc.aul2 英語表示用の言語ファイル
TSMemory字幕背景.anm2 字幕の背景と縁取りを付けるスクリプト
本プロジェクトはソースのみを公開しており、バイナリの配布は行いません。 使用する場合はご自身でビルドしてください。 ※用意されているスクリプトによってビルドしやすくなっています。
簡易ビルドは Windows 上で行います。必要なのは次の 1 つだけです。
- Git for Windows — 同梱の Git Bash でコマンドを実行します https://gitforwindows.org/
コンパイラ等の環境はスクリプトがダウンロードして用意します。
コンパイラ (llvm-mingw) は次の手順でプロジェクト内の compilers/ に
展開され、システムには一切触れません。
※Linuxでもビルドできないことはありませんが、テストスクリプトは動きません。
コマンドプロンプトや PowerShell ではなく、Git Bash を開いてください。 スタートメニューの「Git Bash」、またはフォルダを右クリックして 「Open Git Bash here」で開けます。
git clone https://github.com/todkuro/TSMemory-x64.git
cd TSMemory-x64
bash tools/setup-toolchain.sh
bash tools/build.shsetup-toolchain.sh は初回のみ必要です。llvm-mingw をダウンロードして
compilers/ に展開します (展開後で約 730MB あります)。
dist/ に以下が生成されます。
dist/TSMemory.tvtp TVTest プラグイン
dist/TSMemory-TVTestSrc.aux2 AviUtl2 プラグイン
dist/TSMemory-TVTestSrc.au2pkg.zip AviUtl2 用インストールパッケージ
dist/TSMemory-x64.zip 上記一式
bash tests/tools/test.shビルドしたプラグインに対する自動テストが走ります。
TS を使うテストは build/ts-examples/ の TS を対象にします。
放送された TS は再配布出来ないので、無ければ初回に合成します
(MPEG-2 の映像と AAC の音声を含む TS を作ります)。
実際の放送 TS を持っている場合は同じ場所に置いてください。
置いた TS も含めて全て検査されます。
# 別の場所を使う
TSMEMORY_TS_DIR=/path/to/ts bash tests/tools/test.sh
# TS を作り直す (ディレクトリごと消してから)
rm -rf build/ts-examples && bash tests/tools/gen-ts-examples.sh
# 実物の ISDB-T サンプルを足す (手動。計 260MB を取得します)
bash tests/tools/fetch-ts-samples.shビルドの仕組みや、TVTest 本体を 64bit ビルドする手順などは docs/development.md を参照してください。
-
ビルドで生成された
dist/TSMemory-TVTestSrc.au2pkg.zipを AviUtl2 のプレビュー画面にドラッグ&ドロップします。 手動で入れる場合は以下に配置してください。%ProgramData%\aviutl2\Plugin\TSMemory-TVTestSrc\TSMemory-TVTestSrc.aux2 %ProgramData%\aviutl2\Plugin\TSMemory-TVTestSrc\TSMemory-TVTestSrc.ini %ProgramData%\aviutl2\Language\English.TSMemory-TVTestSrc.aul2 %ProgramData%\aviutl2\Script\TSMemory字幕背景.anm2 -
TVTest の Plugins フォルダに
TSMemory.tvtpとTSMemory.iniを入れます。 -
TSMemory.iniを開いて、AviUtlPathにaviutl2.exeのパスを設定します。 遡れる長さを変えたい場合はMemorySizeも調整してください。 -
必要に応じて
TSMemory-TVTestSrc.iniを編集して設定を変更してください。 -
TVTest を起動し、メニューの [設定] で設定ダイアログを表示させ、 左のリストから [キー割り当て] を選択して、TSMemory の
Executeに キーを割り当てます。 -
メニューの [プラグイン] から、TSMemory をチェック状態にします。
AviUtl 1.xx 版で必要だった「入力プラグイン優先度の設定」「最大画像サイズの 変更」「TVTest_Image.dll のコピー」は、いずれも不要です。
-
キャプチャしたいシーンになったら、導入方法の 5 で割り当てたキーを押します。 AviUtl2 が起動して、映像メモリの内容がタイムラインに配置されます。
-
AviUtl2 のメニューから「キャプチャ・ユーティリティ」を表示させます。 上段に保存する画像のファイル名を入力します。 ファイル名の拡張子が省略されている場合は拡張子が付加されます。 既に同名のファイルが存在する場合は、末尾に連番が付加されます。 下段でフォーマットと JPEG の品質を指定します。
-
「保存」ボタンを押すと画像がファイルに保存されます。 ファイルメニューの「画像として保存 (TSMemory)」からも保存できます。
-
以後、キャプチャ実行キーを押すと AviUtl2 で読み込まれます。
どちらも既定では無効です。静止画キャプチャが主な用途な為、 既定では映像だけを扱います。
映像に音声を付けて取り込みます。復号は Windows 標準の Media Foundation に任せているので、追加の DLL は要りません。TVTest 側と AviUtl2 側の 両方の設定が要ります。
字幕を、映像とは別のレイヤーにテキストオブジェクトとして並べます。 画像の焼き込みではないので、後から書体も色も文言も直せます。 外字 (DRCS) や背景・縁取りの扱いも同じ文書にあります。
-
AviUtl2 でのシーク操作が重い場合は、
TSMemory-TVTestSrc.iniのaspect_ratioを 0 に設定して AviUtl2 の側でリサイズするようにすれば 多少軽くなる可能性があります。 -
画像の保存時にファイル名をクリップボードにコピーしたい場合は、
TSMemory-TVTestSrc.iniのCopyFileNameを 1 にしてください。 -
AviUtl2 は 1.xx 版と違って各フィルタの初期値を保存しておけません。 インターレース解除やノイズ除去などの設定を AviUtl2 の 「フィルタのプリセット」として保存しておき、その名前を
TSMemory-TVTestSrc.iniのPresetに書いておくと、取り込んだ映像に 自動で適用されます。[Bridge] Preset=キャプチャ用フィルタ -
TVTest から渡されるのはコマンドを実行した時点までの映像なので、 目的の場面は末尾にある事が多くなります。
TSMemory-TVTestSrc.iniのSeekToEndを 1 にすると、取り込んだ直後のシーク位置が先頭ではなく 末尾になります。[Bridge] SeekToEnd=1 -
プレビュー画面をドラッグして取り込んだ映像を動かしてしまう事故を 防ぎたい場合は、
TSMemory-TVTestSrc.iniのLockLayerを 1 にすると 取り込んだ後に配置先レイヤーがロックされます。次の取り込みでは自動的に 解除して置き直すので、手での操作は要りません。[Bridge] LockLayer=1オブジェクトリストにある「プレビュー編集の操作をロック」はオブジェクト 単位のロックで、プラグインからは操作出来ません。こちらはレイヤー単位の ロックになりますが、TSMemory は専用レイヤーに置く為 効果は同じです。
-
TSMemory がタイムラインに映像を置くと編集済み扱いになる為、AviUtl2 の 終了時に「現在の編集データは更新されています」という確認が出ます。 煩わしい場合は
TSMemory-TVTestSrc.iniのSuppressExitConfirmを 1 か 2 にすると自動で「いいえ」と応答します。1 … TSMemory が配置しただけの状態に限って応答します 2 … 編集していても応答します (編集内容は保存されません)確認ダイアログが表示される際のシステム音は消せません。
-
TVTest の終了時に AviUtl2 も終了させたい場合は、
TSMemory.iniのAutoCloseを 1 にしてください。
-
このプログラムによるいかなる損害も補償しません。
-
TVTest・AviUtl2・本プラグインは全て 64bit で揃える必要があります。 32bit の TVTest では
TSMemory.tvtpは読み込めません。 -
遡れる長さは
MemorySize(既定 10MB) が上限です。地上デジタルの 1080i で おおよそ 8〜14 秒程度です。また、溜め込みはプラグインを有効にした時点から 始まるので、有効にした直後にキャプチャするとその分しか取れません。 -
取り込んだ映像の前後は、切れた位置の GOP が途中で終わっているぶん 短くなります。先頭が 0.4 秒程度、末尾が 0.2 秒程度です。
-
マルチ編成の局では、視聴中のチャンネルの映像が取り込まれます。 全チャンネルを同時に取り込む事は出来ません。
-
パッケージを入れ直す時は、必ず AviUtl2 を終了させてから行ってください。 AviUtl2 は終了時にプラグインをアンロードした後もプラグインが登録した 情報を参照する為、本プラグインは動作中アンロードされないようにして います。その為 AviUtl2 の実行中はファイルが掴まれたままになり、 入れ替えに失敗します。
-
ver.0.2.1 以前の AviUtl 1.xx 版とは別物です。同じ AviUtl2 に旧版の
TSMemoryパッケージが入っている場合は、先に削除してください。
プラグインごとに異なります。
| ファイル | ライセンス |
|---|---|
TSMemory.tvtp |
GPL-2.0-or-later |
TSMemory-TVTestSrc.aux2 |
GPL の対象外 (GPL のコードを含みません) |
TSMemory.tvtp は TVTest 由来の BonTsEngine を組み込んでいる為、
バイナリ全体が GPL-2.0-or-later になります。全文は
licenses\GPL-2.0.txt にあります。
TSMemory-TVTestSrc.aux2 には GPL のコードが含まれません。
2 つのプラグインは共有メモリ経由で通信する別プロセスです。
適用範囲の詳細と、その確認方法は LICENSE.md を参照してください。
TSMemory-TVTestSrc.aux2 の映像デコード部は、茂木和洋氏の開発した
MPEG-2 VIDEO VFAPI Plug-In (ver.0.7.14 ベース) を元にしています。
このような有用なプログラムを開発・公開して下さっている茂木氏に感謝します。
https://www.marumo.ne.jp/mpeg2/
利用条件は同ページの【ソースコードの利用について】のとおりで、 無保証を受け入れる以外の制限はありません (全文は LICENSE.md に引用)。
また、オリジナルの TSMemory およびその改造版の作者の方々に感謝します。
TSMemory-TVTestSrc.aux2 は AviUtl ExEdit2 Plugin SDK を利用しています。
The MIT License
Copyright (c) 2025 Kenkun
全文は AviUtl2-Plugin-SDK-license.txt にあります
(プラグインをインストールしたフォルダと、配布物の licenses フォルダ)。
映像メモリ機能を実行すると、TVTest が溜め込んでいる TS データを
tsmemory*.tvtv という名前の共有メモリに写し、同じ名前の 0 バイトの
ダミーファイルを作成します。
AviUtl2 が起動していない場合は、このダミーファイルを引数に渡して
起動します。既に起動している場合は、名前付きイベントで
TSMemory-TVTestSrc.aux2 に読み込みを要求します
(AviUtl2 は WM_DROPFILES を受け付けない為、1.xx 版とは方法が異なります)。
TSMemory-TVTestSrc.aux2 は拡張子が .tvtv のファイルの入力プラグインとして
振る舞い、ファイル名と同じ名前の共有メモリから TS データを取得して開きます。
AviUtl2 はメディアファイルの内容をパスをキーにキャッシュする為、実行の度に
別名の共有メモリとダミーファイルを作っています。SnapshotCount で指定した
数だけ過去の読み込み結果が有効なまま残り、古いものから順に破棄されます。
CHANGELOG.md を参照してください。
ビルド方法、実装上の判断、隠し設定などは docs/development.md にまとめてあります。
音声対応の経緯 (実装前の調査メモ) は docs/audio-support.md にあります。 使い方は docs/README_Audio.md の方です。
全てAIを利用し書かせています。 読みにくいかもですが、これらをAIに読ませればバグの検証などがやりやすくなるはずです。