読者です 読者をやめる 読者になる 読者になる

TsSplitterでのtsファイル連続処理とタイムスタンプ変更

前回の記事でWHS2011PCのデータドライブをVVAULTで構成し直しましたが、年末から録り溜めてある録画用PCからの録画ファイルをWHS2011PCへコピーしないといけません。通常は録画終了後TvRockのコマンド処理でTsSplitterを用いてワンセグ部分を取り除いてWHS2011PCへ保存していますが、WHS2011PCをやり直している間はコマンド処理を切っていたのと、年末からの録画分もWHS2011PCへ移さないといけないのでWHS2011PCをあれこれしている間に録画用PCにUSB3.0接続の外付けHDDドライブを繋いでTsSplitterで一括処理を行おうとしましたが、TsSplitterGUIからは数個のファイルしか連続で処理ができません。ネットで調べると連続処理するバッチスクリプトがすぐに見つかりましたので、nimanpo用に一部変更して利用させてもらおうと試してみました(ありがとうございます)。
連続処理は問題なくいくのですが、処理をしたtsファイルの更新日時が処理をした日時になってしまいます(あたりまえですが)。ドラッグ&ドロップでtsファイルを投げて処理をするので処理をする順番はWindowsさんが勝手に決めて処理をしてしまうので更新日時でtsファイルをよくソートするnimanpo的にはちょっと困ってしまいました(>_<)。処理したファイルの更新日時を元ファイルの日時に変更する処理も一括でできないかなぁとネットで探しましたが見つけられなかったので今回作ってみました。
最初にタイムスタンプを変更するソフト探しです。コマンドラインからタイムスタンプを変更するソフトをここを参考にして探しました。どれでも使えそうなので最初にあった touch を使用することにしました(ありがとうございます)。
TsSplitter連続処理の部分はそのまま利用させて頂いてその後に元ファイルのタイムスタンプを取得しtouchを用いて処理したtsファイルのタイムスタンプを変更しています。元ファイル名を取得して処理をしたファイル名を作るのにうまくいかずちょっと苦労しました(ファイル名に&や%や!があるとwindowsさんがDOSコマンドと勘違いして大変でした)。たぶん大概はこれでうまくいくのではないかと思うので載せておきます。DOSコマンドについてはこちらを参考にさせて頂きました(ありがとうございます)。
「一括処理タイムスタンプ変更.bat」といったファイル名で任意の場所に保存します。このbatファイルにtsファイルをドラッグ&ドロップするだけでTsSplitterによる処理と処理したファイルのタイムスタンプ(更新日時)を元ファイルの日時に変更します。複数のtsファイルを選択してドラッグ&ドロップしても一括処理してくれます(あまりに数が多いとどっかに飛んでいってしまうようですnimanpoの環境では80個程度は大丈夫でした)。
-------------------------
@echo off

rem TsSplitter一括処理用&タイムスタンプ変更batファイル
rem 2014/02/11 by nimanpo
rem まとめてTsSplitter処理すると出力したHDファイルのタイムスタンプが処理を
rem した日時になってしまい、更新日ソート等ができなくなるので、出力したHDファ
rem イルのタイムスタンプを元ファイルの日時に変更する処理も入れ込んでみた。
rem
rem タイムスタンプ変更には
rem 「touch Ver.0.04 Copyright (C) 2005-2011 K.Takata」
rem http://homepage3.nifty.com/k-takata/mysoft/touch.html
rem を使用しています(ありがとうございますm(__)m)。
rem
rem ファイル名に"&"や"%"や"!"があるとDOSコマンドのためファイル名がおかしくなり
rem ファイル名を取得するのに色々と試行錯誤してこの形にしています。
rem 大概はいけると思いますが、ミスしたらゴメンナサイm(__)m


rem 使い方はこのファイルにtsファイルをD&Dする。

rem 複数ファイルドロップ対応

rem SETにあるTsSplitterファイルへのパスと、HDファイルの出力先を、環境に合わせて変更する必要あり。

rem touchのファイルパスを環境に合わせて変更する必要あり。

rem 処理内容

rem TsSplitter.exe でtsファイルからHDファイルを抜き出す。



SETLOCAL



rem TsSplitterの処理オプションをセット(適宜変更してね by nimanpo)

rem TsSplitterのパス
SET SPath="D:\R-TV\TsSplitter\TsSplitter.exe"

SET SParam1=-EIT

SET SParam2=-ECM

SET SParam3=-EMM

SET SParam4=-1SEG

rem 出力先を指定
SET SParam5=-OUT "D:\TV-REC"

SET SParam6=-BUFF 128

SET SParam7=-B25

SET SParam8=-WAIT2



rem touchの処理オプションをセット

rem touch.exeのパス

SET TPath="D:\R-TV\TsSplitter\touch.exe"

rem 出力先のフォルダー(先頭に「"」、最後に「\」を必ず入れる)
rem SParam5の-OUT "を削除して最後の"を削除して最後の\を入れる

SET TParam1=%SParam5:-OUT "=%
SET TParam1="%TParam1:"=%\

SET TParam2=-t



@echo %DATE% %TIME% TsSplitterHD 処理開始



:start

IF "%~1"=="" GOTO syoriend

IF NOT "%~x1" == ".ts" GOTO next



:syori

rem TsSplitter 処理

%SPath% %SParam1% %SParam2% %SParam3% %SParam4% %SParam5% %SParam6% %SParam7% %SParam8% "%~1"



rem touch用にファイル名やタイムスタンプをセット

SET FN1="%~n1"
SET FN1T=%~t1
SET FN1Date=%FN1T:/=%
SET FN1Date=%FN1Date:~0,8%
SET FN1Time=%FN1T::=%
SET FN1Time=%FN1Time:~11,4%
SET FN1DT=%FN1Date% %FN1Time%
SET FN1DT=%FN1DT: =%

rem 出力先のファイル名を作る
rem 出力後のファイル名はabc_HD.tsとかabc_SD.tsとかabc_cs1(100).tsになるので
rem _HDや_SDや_CS1(100)はワイルドカードとしてabc*.tsというファイル名にして
rem タイムスタンプを変更する

SET FN2=%TParam1%%FN1:"=%*.ts"

rem 元ファイル、タイムスタンプ、タイムスタンプ変更用ファイル名(ワイルドカード)表示

echo "%~1"
echo %FN1DT%
echo %FN2%

rem 動作が気になるならこれでポーズ
rem pause

rem touch 処理

%TPath% %TParam2% %FN1DT% %FN2%

@echo %DATE% %TIME% 処理完了 "%~1"

:next

SHIFT

GOTO start



:syoriend

@echo %DATE% %TIME% TsSplitterHD 処理完了

ENDLOCAL
-----------------------------


ついでにTvRockのコマンド処理も同じようにタイムスタンプ変更処理するようにしました。
こちらは上のバッチ処理の繰り返しや表示をしないようにしnimanpoの通常の環境に合わせたものにして「TS-TVROCK.bat」としてTvRock-TEMPのフォルダーに入れてあります。現在のTvRockコマンド処理は
-----------------------------
# 録画後処理(T1-T4)
TN:PUSHD \\ファイルサーバー名\保存フォルダー名
TN:NET USE
TN:DIR
TN:POPD
TN:NET USE \\ファイルサーバー名\保存フォルダー名
TN:DIR
TN:PING ファイルサーバー名
TN:TS-TVROCK.BAT "%1"
-----------------------------
となっていて
「TS-TVROCK.bat」の中身は
-----------------------------
@echo off

rem 2014/02/11 by nimanpo
rem まとめてTsSplitter処理すると出力したHDファイルのタイムスタンプが処理を
rem した日時になってしまい、更新日ソート等ができなくなるので、出力したHDファ
rem イルのタイムスタンプを元ファイルの日時に変更する処理も入れ込んでみた。

SETLOCAL

rem TsSplitterの処理オプションをセット(適宜変更してね by nimanpo)

rem TsSplitterのパス
SET SPath="D:\R-TV\TsSplitter\TsSplitter.exe"

SET SParam1=-EIT

SET SParam2=-ECM

SET SParam3=-EMM

SET SParam4=-1SEG

rem 出力先を指定
SET SParam5=-OUT "\\ファイルサーバー名\保存フォルダー名"

SET SParam6=-BUFF 128

SET SParam7=-B25

SET SParam8=-WAIT2



rem touchの処理オプションをセット

rem touch.exeのパス

SET TPath="D:\R-TV\TsSplitter\touch.exe"

rem 出力先のフォルダー(先頭に「"」、最後に「\」を必ず入れる)
rem SParam5の-OUT "を削除して最後の"を削除して最後の\を入れる

SET TParam1=%SParam5:-OUT "=%
SET TParam1="%TParam1:"=%\

SET TParam2=-t

%SPath% %SParam1% %SParam2% %SParam3% %SParam4% %SParam5% %SParam6% %SParam7% %SParam8% "%~1"

rem touch用にファイル名やタイムスタンプをセット

SET FN1="%~n1"
SET FN1T=%~t1
SET FN1Date=%FN1T:/=%
SET FN1Date=%FN1Date:~0,8%
SET FN1Time=%FN1T::=%
SET FN1Time=%FN1Time:~11,4%
SET FN1DT=%FN1Date% %FN1Time%
SET FN1DT=%FN1DT: =%

rem 出力先のファイル名を作る
rem 出力後のファイル名はabc_HD.tsとかabc_SD.tsとかabc_cs1(100).tsになるので
rem _HDや_SDや_CS1(100)はワイルドカードとしてabc*.tsというファイル名にして
rem タイムスタンプを変更する

SET FN2=%TParam1%%FN1:"=%*.ts"

rem touch 処理

%TPath% %TParam2% %FN1DT% %FN2%

ENDLOCAL
--------------------------------
てなところです。
録画用PCが起動している間はWHS2011PCも連動して起動しているので、TsSplitter処理も"\\サーバー名\保存フォルダー名"とネットワーク越しに行っています。touchでのタイムスタンプ変更も同様です。今のところはちゃんと動作しているようです。