============================================================
【ソフト名】Trim Viewer
【動作環境】Windows 11 64bit + Microsoft .NET 7.0(以降)
【サポート】ありません。自己責任でお使いください<m(__)m>
============================================================
  ☆環境によってruntimeのインストールが必要です
  [.NET デスクトップ ランタイム 7.0.3以降  Windows  x64 インストーラー版をご利用ください。2列表示の右側の上から2番目あたり]
  https://dotnet.microsoft.com/ja-jp/download/dotnet/7.0

  ※windowsdesktop-runtime-7.0.3-win-x64.exe
============================================================


Trim Viewer(以下本ソフトウェア) の概要
-----------

・本ソフトウェアは Windows11上で動く、「Trimは動画ではどこじゃろ？」ってときに確認するプログラムです。
・スクリプトいじるほどでもない単発のTrim調整にどうでしょ？(笑) - 基本的にAmatsukazeのCM解析の後に使います。
・このソフトウェアは作者の C#,WPF,OpenCVSharp の勉強のため、機能試験のために作られたフリーソフトウェアです。
・自動処理とは逆行していますが、「join_logo_scp」勉強したくない＆「avisynth」も入れたくないって感じの「壁を感じる」人向け。
・おま環で最低限動くチェックしかしていません。環境によっては動きません。自己責任でお使いください。


既知の不都合など(Trim範囲を疑う前に)
-------------------
◆外部ソフトになりますがフレームチェックで「Invalid frame dimensions」などのエラーがあるファイルでは強制終了する場合があります。
◆症状：シーンチェンジぴったり指定したのに前後に余計な1～2フレームが付いて「見える」。
→エンコード設定によって消せる場合がある。
対策：Trim指定が本編のみの場合、Amatuskazeの「出力選択」を「CMをカット」にしてみる。

例)「出力選択」で「本編とCMを分離」を選んでいる場合にWO●OW、ス●ーチャンネルに発生をしているときがある。
同じ設定でもA●-Xでは出ないなど、おま環設定で場合によりTrimの範囲を修正しても反映されません。

そのほかの対処法：
1：Trim指定で5フレーム程度の余裕を取る(短くする^^;CMのみやCM分離などでは効果がなかったような記憶が…)
2：Trim指定をやめて「TMSR6」でカットしてからエンコードする。前後のGOPをきれいに編集してくれます(丸投げﾍ(ﾟ∀ﾟﾍ)ｱﾋｬ)

・CM解析ログの選択パスは[Amatsukaze\data\checklogs]の中の.txtファイルが対象です
・Amatuskazeの「出力選択」の設定によりTrimの優先(有効)度が変わります。
例)TrimでCM範囲のみを指定して、「CMのみ」を選択した場合など、Trim範囲以外も処理されます

※こんなツールつくた後で気が付いた…il||li _|￣|● il||li   っ「CMをカット」
あちこちバグが残っていますが開発も収束方向で…


◆「このTSファイルでは正常に動作できません」とエラーが出る場合
・ログファイルにエラーが残っています※error,warn,aacなどをリスト表示しています。
先頭パケット/GOP破損やドロップ、音声chチェンジでエラーまたは警告がログに残っています。

回避例）MurdocCutter19g1以降などでTSファイルの先頭をエラー個所を含む5秒くらいを取り除くことで読み込める場合があります。この場合先頭フレームが変わるので、再度CM解析が必要です。(先頭GOPだけでなく前番組の録画マージンを丸ごと切り落とした方が読み込み成功率は上がります)

・CM解析で警告が出ずに読み込める場合でも、先頭フレームと動画フォーマットが違っている場合や、ドロップがあってデータの整合性が取れていない場合などに処理速度が極端に落ちます。
(Viewerボタンを押して、プレビューが出ているのにスクロールサムネイルの表示が遅れているときなど)
画像SD/HDや音声2ch/5.1など含みます。CMと本編で不都合が起きることもありm(__)m
OpenCVSharp機能で読めれば表示を行いますが、SEEKに時間がかかる場合はOSから強制終了されます<m(__)m>


◆音声付きの再生機能はありません。
画像の「連続表示」はおまけ機能です！
もともとOpenCVSharp拾えるフレームを「重い処理を加えた後」続けて表示トライした手抜きです(^◇^;
音声同期もやる気がないのでカットしています。再生はTVTestなどでどうぞ。


◆フレームの取得はOpenCVSharp経由のFFMpeg系で、30000/1001fps前提の処理になっています
映画や海外ドラマやアニメなどうまく表示できませんm(__)m

※動画の「テレシネ」「逆テレシネ」の意味と違い - AviUtlの易しい使い方
このあたりに詳しく解説がありました^^;
https://aviutl.info/teresine-gyakuteresine/


◆テストモードでエンコード行った場合はエンコードログからも確認できる場合があります。
通常モードでエンコードした場合、TSファイルが移動されるので処理を継続できません。
対応していません→(ver0.81a以降でsucceeded/failedフォルダ内まで読みに行きます)




開発・デバッグ環境 など
-------------------

本ソフトウェアでは以下の開発環境/パケージ/ライブラリ/ソースを使用しています。
各ライセンスについては公式サイトを参照してください。

・Microsoft VisualStudio 2022
・Microsoft .NET 7.0 ランタイム (Windows)
  https://dotnet.microsoft.com/ja-jp/download/visual-studio-sdks?cid=getdotnetsdk

・OpenCvSharp [https://github.com/shimat/opencvsharp]
・Apache License Version 2.0

　※後発の方・NVDec有効ライブラリを差し替える方へのメモ
　放送波パケット記録TSでうまく動作するのはこのバージョンまで。(※2021/09/21 use ver4.5.1)
　TMSR6で出力されたものはその後のバージョンでも読めます。
　MurdoccutterでGOP単位にそろえられたものはもう少し可読性が上がります
　(1範囲切り抜きのみ、タイムコードが途切れる連結ではうまく動きません)


※開発開始時点で最初にフレーム位置が調整できたので[OpenCvSharp]を使うことにします。
※目的の機能が実装出来たらver1.0.0になりますので気長に生暖かく忘れてください。



動作確認環境 など
-------------------

・OS:開発
・OS Microsoft Windows 11 Pro (64 ビット) Version 22H2 build 22621.1194
  エディション	Windows 11 Pro
  バージョン	22H2
  インストール日	‎2023/‎02/‎03
  OS ビルド	22621.1194

・OS:テスト
・OS Microsoft Windows 10 Pro (64 ビット) Version 22H2 build 19045.2546
  エディション	Windows 10 Pro
  バージョン	22H2
  OS ビルド	19045.2546

・CPU Intel i7-3770T/i7-6700/i7-11700F/i5-12400
・RAM 16GB/32GB
・GPU iGPU:i7-3770T/i7-6700/i5-12400 NVIDIA:Geforce GTX750/RTX2060/RTX3070/RTX3090
・それぞれAmatsukazeが動く環境
・ウィルスチェックにESETを使用

※環境随時アップデートされています<m(__)m>
AnyCPU(32bit/x86対応)版はテスト環境がないのでビルドのみになります。


■ 読み込めそうなTrim情報
・Amatsukaze ver0.9.1.3(https://github.com/nekopanda/Amatsukaze) Automated MPEG2-TS Transcoder の「CM解析」のログ(sjis)


■ 読み込めそうな動画
・MPEG2-TSの音声2ch/モノラルの動画

 ※マルチ放送/SD・HD混在/ワンセグ動画には対応していません。
 ※音声5.1chの動画は処理が重くて追いつかないため対応していません。
 OpenCVSharpのハードウェア支援対応のDLLに差し替えることで改善できるかも？という情報をいただきましたが理解不能^^;
 (現時点で作者の知識が及ばない世界)




ファイル構成
------------

TrimViewer_README.md			--------- このテキストファイル
TrimViewer_HISTORY.txt			--------- 更新履歴ファイル

[TrimViewer]					--------- ビルド生成物： 通常は実行ファイルがあればOK。

TrimViewer.exe					--------- 実行ファイル(生成ファイル一式)
TrimViewer.application
TrimViewer.exe.config
TrimViewer.exe.manifest
TrimViewer.xml					--------- 環境保存ファイル(後で作られます)

※DLL同梱版ではOpenCVSharpのDLLが付属します。差分だけは動かないので、DLL同梱版に差分を上書きしてください。



アンインストール方法
--------------------
・Windows11の例
[プログラム] 解凍したプログラムフォルダを削除してください。



ご利用にあたり
--------------

・本ソフトウェアはフリー・ソフトウエアです。個人使用、業務使用のいずれでも、利用者の責任においてご自由にご利用ください。

・ソフトウエアは制作環境で動作テストをしていますが、お使いのパソコン環境や、プログラムの不具合などによって問題が生じる場合があります。
それにより損害が生じても、損害に対する保証は出来かねますので、あらかじめご了承ください。

・詳細はライセンスをご覧ください。


ソースコードの配布について
--------------

・VisualStudio2022の命名規則にすら従わないような、エラー処理が未完の可能性が高い、他人が真似したら困る汚いソースなので基本的に非公開です。
・作者が必要とした場合のみ、一部公開または配布して意見を求める時がります。
・私のソースコードが読める実力がある人なら、もっとスマートで奇麗に自分で作れると思いますので :-)


ライセンス
----------

本ソフトウエアおよびそのソースコードは、修正BSDライセンス(2条項:The BSD 2-Clause License)に従うものとします。

Copyright (c) 1998-2023, Moatensuke & Nightmarish Library of noctiluca.
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

1.Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
2.Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

*** 以下は日本語訳(参考) ***

Copyright(C) 1998-2023 Moatensuke & Nightmarish Library of noctiluca.

1.ソースコード形式かバイナリ形式か、変更するかしないかを問わず、以下の条件を満たす場合に限り、再頒布および使用が許可されます。
2.ソースコードを再頒布する場合、上記の著作権表示、本条件一覧、および下記免責条項を含めること。

書面による特別の許可なしに、本ソフトウェアから派生した製品の宣伝または販売促進に、名前またはコントリビューターの名前を使用してはならない。
本ソフトウェアは、著作権者およびコントリビューターによって「現状のまま」提供されており、明示黙示を問わず、商業的な使用可能性、および特定の目的に対する適合性に関する暗黙の保証も含め、またそれに限定されない、いかなる保証もありません。著作権者もコントリビューターも、事由のいかんを問わず、 損害発生の原因いかんを問わず、かつ責任の根拠が契約であるか厳格責任であるか（過失その他の）不法行為であるかを問わず、仮にそのような損害が発生する可能性を知らされていたとしても、本ソフトウェアの使用によって発生した（代替品または代用サービスの調達、使用の喪失、データの喪失、利益の喪失、業務の中断も含め、またそれに限定されない）直接損害、間接損害、偶発的な損害、特別損害、懲罰的損害、または結果損害について、一切責任を負わないものとします。



使用方法など
--------------------

■ メイン画面画面のショートカットキー設定
・[CTRL+L]キー
 ログファイル選択のダイアログを開きます

・[CTRL+T]キー
 動画ファイル(TS)選択のダイアログを開きます

・[CTRL+S]キー
 .ts.trim.avsファイルを保存します(動画ファイルと同じフォルダに作成)

・[CTRL+O]キー
 オプション画面を開きます

・[CTRL+W]キー
 ビュワー画面を開きます


・「TS Seek Check」チェックボックス→オプションで設定できます。
 Trim先頭フレームのサムネイル表示を行う時に、ランダムシークを行います。
 ※起動時の警告表示にある通り、現在OpenCVSharpで取得する先頭にある動画情報と、音声チャンネル数・音声ストリーム数や副音声などに変化がある場合、シークが遅くなる傾向があるのでレスポンスが鈍い場合は正常に動作しない動画の可能性があります。
 ※反応がなくなった場合は「ALT+F4」キーやタスクマネージャーからプログラムを強制終了させてください。m(__)m
 ※アクセスマージンが60フレーム未満の時自動的に最終フレームのアクセスチェックが動作します

・「BIAS」チェックボックス
 Trim情報に指定した数値を加算します。他ツールで先頭をカットした場合など全体がずれているときに使います。


■ ビュワー画面のショートカットキー設定
・全般
[A]キーでTrimの編集エリアをアクティベートします
(非選択Trimを選択します。背景色とスライドバーの選択エリアが青色になります。Trim位置が変更できるようになります。)

[D]キーでデバッグ情報の表示/非表示の切り替え

[F]キーでサムネイル表示の時間→フレーム数→時間＋フレーム数→時間とトグル切替を行います

[I]キーで「CM解析情報の表示/非表示の切り替え」

[M]キーでNearPanel(ニアパネル)の表示枚数を切り替えます(4枚/8枚)

[N]キーでNearPanel(ニアパネル)のモード[0-7]を切り替えます

[S]+[CTRL]キーで.trim.avsファイルの保存を行います

[T]キーでスクロールサムネイルのON/OFF切り替え
[Space]or[Enter] 連続更新のON/OFF切り替え(遅延はスキップしてなるべく実時間処理を行います)
※音声は再生されません


◇NearPanel(ニアパネル)の操作◇
・それぞれの表示フレームをクリックすると移動します。
※i7-6700(i3-10300)4コア8スレッドクラスではかなり重く感じます

[M]キーで表示枚数の4枚/8枚を切り替えます。

[N]キーで表示モード[0-7]を切り替えます

・スクロールサムネイルは30フレーム毎に1枚
mode 0: 非表示/30f
mode 1: 50%表示/30f
mode 2: 75%表示/30f
mode 3: スクロールサムネイルと同サイズ(100%)/30f

・スクロールサムネイルは15フレーム毎に1枚
mode 4:非表示/15f
mode 5:50%表示/15f
mode 6:75%表示/15f
mode 7:スクロールサムネイルと同サイズ(100%)/15f


◇ビュワー画面操作時◇
・プレビューサイズの変更
 [テンキー+] 拡大
 [テンキー-] 縮小
※プレビューイメージサイズ(320x180px,640x360px,960x540px,1280x720px,1920x1080px,Fit)
※フォーム内に収まらないときは「Auto」表示となりFitモードと同じ動作をします。


・スクロールサムネイル上でのマウス操作
左クリックで選択
右ドラッグで連続更新になります。センターの緑色の表示枠(現在の表示フレーム)から離れると移動量が増えます


・Trim位置の変更
'['キー(OpenBrackets):Top位置の変更
']'キー(CloseBrackets):End位置の変更
※エンターキーの左のキーです


・フレーム移動(基本設定)
 [F1(-4フレーム)～F8(+4フレーム)]

※一部移動量はオプションで変更できます
 [←] -1フレーム移動
 　(R-CTRL+でCM詳細情報選択を-1)※Trim選択追従あり
 　(R-SHIFT+でCM詳細情報選択を-1)

 [→] 1フレーム移動
 　(R-CTRL+でCM詳細情報選択を+1)※Trim選択追従あり
 　(R-SHIFT+でCM詳細情報選択を+1)

 [↑] -30フレーム移動
 　(R-CTRL+でTrim選択を-1)※Trim選択追従あり
 　(R-SHIFT+でTrim選択を-1)
 [↓] 30フレーム移動
 　(R-CTRL+でTrim選択を+1)※Trim選択追従あり
 　(R-SHIFT+でTrim選択を+1)
 [PageUp] -150フレーム移動：-5秒([R-CTRL]キー+で3倍移動：-15秒、 [L-CTRL]キー+で12倍移動：-60秒、[R-CTRL]キー+[L-CTRL]キーで-180秒)
 [PageDown] 150フレーム移動：5秒([R-CTRL]キー+で3倍移動：+15秒、 [L-CTRL]キー+で12倍移動：60秒、[R-CTRL]キー+[L-CTRL]キーで180秒)

 [Home] Trimの開始位置に移動(Topボタン)
 [End] Trimの終了位置に移動(Endボタン)
 [R-CTRL + Home] 開始「0」フレームに移動
 [R-CTRL + End] 終端フレームに移動
 (※エラー回避で終端マージンが初期設定で「60f」に設定されています。このフレームにはアクセスしません)

 ※取り扱う終端フレームについて：録画終了時のTSパケットの破損対策で60フレームのマージンを取っています
 終端マージンはオプションで変更することができます。録画時は前後5秒以上のマージンを取って録画することをお勧めします<m(__)m>

・メモ用に静止画の保存(簡易保存：インターレース解除処理などは行っていません)
[Img]ボタンまたは[V]キー：Png 動画比オリジナルの解像度で保存
[P]キー：Png FHD, [O]キー：Png 1280x720
[J]キー：Jpg FHD, [H]キー：Jpg 1280x720


◇連続更新時◇
 [↑] -30フレーム移動(1秒)
 [↓] 30フレーム移動(1秒)
 [PageUp] -150フレーム移動(R-CTRL+で3倍移動：約-15秒, L-CTRL+で12倍移動)
 [PageDown] 150フレーム移動(R-CTRL+で3倍移動：約+15秒, L-CTRL+で12倍移動)

 [Home] Trimの開始位置に移動
 　[Home+R-CTRL] 開始「0」フレームに移動
 [End] Trimの終了位置に移動
 　[End+R-CTRL] 終端フレームに移動(※エラー回避で終端マージンが用意されています)


◇NumKey(テンキー)の操作法◇
 [選択Trimのフレーム数をNumKey(テンキー)に登録する]
 基本動作：R-CTRL(右CTRL) を押しながら NumKeyを同時に押すことで現在選択されているTrim(青色のゲージ)のフレーム数を各NumKeyに登録できます

・R-CTRL+Numキー0～9に選択Trimのフレーム数を登録できます。CMや一挙放送など固定秒数の処理する時に便利かなと。
・L-CTRL+Numキーで移動量に-1を乗算して計算します。(L-CTRLキーで正負反転します)
・操作ミスなどケアレスミスで上書きミスをなくせるように、オプション画面で各NumKeyの設定をロックできます。






その他(商標、登録商標など)
--------------
・「Microsoft」，「Windows」，「Microsoft VisualStudio」，「Microsoft .NET」 は米国 Microsoft Corporation の、米国およびその他の国における登録商標です。
・「TMPGEnc MPEG Smart Renderer 6」，他「TMPGEnc」シリーズ等は株式会社ペガシスの登録商標です。
その他、本書に記載されている各種名称，商品名，社名などは、各社の商標または登録商標です。



いつもお世話になってます！
感謝ですヽ(*^｡^*)ノ
--------------
・Amatsukaze を公開している nekopanda氏、 OpenCVSharp を公開している shimat氏 ありがとうございます<m(__)m>

・nekopanda/Amatsukaze
https://github.com/nekopanda/Amatsukaze

・shimat/opencvsharp
https://github.com/shimat/opencvsharp

・Murdoc Cutter 1.9g1 - Mpeg2 Transport Stream Cutter
http://itsadirect.site90.com/M_cut.html(リンク切れ)

その他いろいろなフリーツール公開の皆様ありがとうございます。



あとがき。
--------------
イレギュラーな数本のためにスクリプトいじるのは面倒だけど、全200話とかあるようなものはスクリプトをちゃんと設定しましょ。局単位に数パターン用意すればほとんど対応できるよ^^;
JL.txt書き出してくれるGUIツールがあればいいのに…どこかでフラグが立つ音が聞こえた！ような気がする(;^_^A ｱｾｱｾ･･･

※CM解析の詳細と除きたいフレームや残したいフレームの位置を確認をするためのツールです(体感でドラマなら98%くらい追従できてると思います)
※Trim以外の書き出し機能とかはありません。大人の事情です(笑)



