tsファイルの編集FA【未圧縮】
お久しぶりです。
更新をさぼっていたわけではありません、これといって記事にするネタが見当たらなかっただけです^w^
最近、HDDを6TBほど買い足しましたのでtsファイルを圧縮しなくなりました。CMなどの不要部分をカットしてそのまま保存しています。PCが占拠される時間も圧倒的に短くなって、環境にも精神にも優しくなりました。
ちなみに使用しているアプリケーションは・・・
ペガシスの Smart Renderer4 です。
http://tmpgenc.pegasys-inc.com/ja/product/tmsr4.html
CM部分をカットして実行ボタンを押すだけという手軽さ・・・
aviutlの使い方とか綺麗にエンコするためのフィルタ技術を習得してる時間をアルバイトに費やしたらいったいいくら稼げるやら。そのお金でHDDと上記のソフトを買ったほうがよーーーーっぽど建設的であるというのが結論です。
ファイル名によるバッチファイル処理失敗の回避の方法
バッチファイルで処理を行う際に、ファイル名にスペース、特に全角スペースのみが含まれる場合は注意が必要です。
以前にダブルクォーテーションで囲めばファイル名にスペースがあっても大丈夫と解説しましたが、全角スペースのみ含まれる場合はファイルにパスが通らずエラー終了するようです。
aviutlによるTSエンコード入門~バッチファイル編~
http://coelacanth-deepsea.hatenablog.com/entry/2012/10/27/214435
これ以外の場合、例えば半角スペースのみや半角スペースおよび全角スペースをファイル名に含む場合は正常に処理されますのでこれを逆手にとって対策します。
tsファイルを格納しているフォルダ名に半角スペースを入れてください。
例えば「ts ソース」「ts data」「ts file」などはいかがでしょうか?
aviutlによるTSエンコード入門~バッチファイル編(DGIndex)~
DGMPGdec(DGIndex)を利用したtsファイルの分離パッチを作成してほしいとのリクエストをいただきました。
aviutlによるTSエンコード入門~バッチファイル編(BonTsDemux)~
http://coelacanth-deepsea.hatenablog.com/entry/2012/10/27/214435
を参考に少し書き換えればよいと思います。実はリクエスト前に公開するつもりで作成してあったので、これを機会に一部を披露、解説いたします。
DGIndex使ったほうがGOPリスト作らなくていいから楽かもしれませんね。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
(省略)
set DGI="~~~~\DGIndex.exe"
set TOWAVE="~~~~\ToWave.exe"
set AVU="~~~~\aviutl.exe"
set AUC_DIR=~~~~\auc\
(省略)
%DGI% -i "%~1" -o "%OUTPUT_NAME%" -ia 4 -fo 0 -yr 2 -om 2 -hide -exit
for /f "usebackq tokens=*" %%i in (`dir /b "%PATH_NAME%%OUTPUT_NAME%.d2v"`) do set D2V_FILE=%%i
(省略)
set D2V_FILE_NAME=%D2V_FILE:~0,-4%
(省略)
rem echo "Make gl file"
rem %MME% -g -q "%D2V_FILE%"
(省略)
echo "Start Aviutl"
start /b "" %AVU%
timeout -t 3
echo "%D2V_FILE%"
echo "add D2V file"
call "%AUC_DIR%auc_open" "%D2V_FILE%"
timeout -t 2
(省略)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
詳細な文法の解説は
aviutlによるTSエンコード入門~バッチファイル編(BonTsDemux)~
http://coelacanth-deepsea.hatenablog.com/entry/2012/10/27/214435
に譲ります。また全文を掲載しておりませんのでご注意ください。
┃%DGI% -i "%~1" -o "%OUTPUT_NAME%" -ia 4 -fo 0 -yr 2 -om 2 -exit
ここが記述できたら完成したも同然です。パラメータはDGMPGdecのフォルダ内にある、DGIndexManual.htmlに『APPENDIX C: Unix-Style Command-Line Interface』として記述されています。オプションに解説を加えますと、-iは入力ファイル名、-oは出力ファイル名、-iaは分離作業に使うアルゴリズムの指定。4としてありますがPC環境によって左右されますので、どの引数が使用可能か事前にご確認ください。
1=MMX, 2=SSEMMX, 3=SSE2MMX, 4=64-bit Floating Point, 5=IEEE-1180 Reference, 6=Skal MMX, 7=Simple MMX
普通のテレビ番組なら-foは0でいいです。
-yrはPC、TVのカラースケールの指定です。発色はソースや環境によって違いますのでお好みでどうぞ。
1 = PC scale, 2 = TV scale
-omは出力方式。2でいいと思います。
0=None, 1=Demux Tracks, 2=Demux All Tracks, 3=Decode AC3 to WAV
次あたりに-hideとか-minimizeのオプションを入れると、作業中DGIndex本体を隠したり非表示にできます。-exitでプログラムを終了します。
┃for /f "usebackq tokens=*" %%i in (`dir /b "%PATH_NAME%%OUTPUT_NAME%.d2v"`) do set D2V_FILE=%%i
ファイル拡張子を.d2vに、変数名をD2V_FILEに変更してありますのでご注意ください。
┃set D2V_FILE_NAME=%D2V_FILE:~0,-4%
tsファイルは拡張子とピリオドを含めて3文字ですが、d2vファイルは4文字ですので、-4としています。
┃rem echo "Make gl file"
┃rem %MME% -g -q "%D2V_FILE%"
削除してもいいですが参考のためにコメントアウトしました。
┃echo "Start Aviutl"
┃start /b "" %AVU%
┃timeout -t 3
┃echo "%D2V_FILE%"
┃echo "add D2V file"
┃call "%AUC_DIR%auc_open" "%D2V_FILE%"
┃timeout -t 2
特に気をつけることはありませんが変数をD2V_FILEに変更お忘れなく。
なお、ファイルの分離処理中にecho offしてあるのにコマンドプロンプト上に数字が表示されますが、これはDGIndexの処理の進行割合を表示しているのだと思います。非表示にする方法は調べていません。
TSエンコード方法についての結論
無料ソフトにこだわり続け、様々な条件下の『tsファイル』をエンコードするために、多くの時間を費やして試行錯誤を繰り返してきました。
その足跡の一部は、過去の記事に掲載した通りです。
詳細には申し上げませんが、そしてまた再び大きな壁にぶつかったのです。その解決方法を探す中でついに有料ソフトに手を出してしまいました。
結論を申し上げましょう。
有料ソフト万歳 \(^o^)/
・・・・なんて便利なんだ、いままでの苦労は何だったのか・・・
ステマでも回し者でもございません。
私が使用したソフトは
TMPGEnc Video Mastering Works 5
- 出版社/メーカー: ペガシス
- 発売日: 2011/02/10
- メディア: CD-ROM
- 購入: 1人 クリック: 90回
- この商品を含むブログ (5件) を見る
このソフトの大まかな機能は
- tsファイルの解析(音声なども)
- ファイル編集(CMカットや分割)
- エンコード
- 各種フィルター
- バッチ処理
最低限欲しい機能は揃っています。作業の流れを記しましょう。
tsファイルの読込━━音声や字幕の設定━━CMカットや分割 ━┓
出力━(バッチ登録)━━エンコード設定━━フィルターの設定━┛
特筆すべき点は、音声ファイル変換やGOPリスト作成などの中間処理が不必要なこと、そしてCMカット編集が非常にやりやすいこと、特に後者はインタフェースに工夫が見られ、切りたいところを素早く見つけ出すことができます。また、CMカット以外まったく同じ処理を行う場合は、バッチ処理をするまでもなく同一プロジェクト内に複数のtsファイルを読み込んで、各々CMカット処理をすれば編集順にナンバリングしてそれぞれ出力することが可能です。一つの大きなtsファイルを分割し、個々のファイルに出力することも簡単です。
いやあ作業が捗る!
デメリットとしては、お金がかかることと、フィルターの種類が多いわけではないので、サイズや見え方に極端にこだわる人には合わないかもしれない。それなりに綺麗であればよい、時間と効率のバランスが大切だと思われる方にはぜひおすすめしたい一品である。
ToWave エラー
タイトルの単語で検索してここにたどり着いている人が居るらしい。
ToWave使ってエラー吐く理由はたぶん2つあって
- 音声ソースの内容を把握してない
- DGMPGDec ver. 1.5.8 の不具合
前者の場合は手助けできないのですが、後者であれば前回の記事で 触れたように、DGMPGDec ver. 1.5.8が新BSチャンネルやBS11チャンネルの動画ソースと音声ソースを分離できない不具合によるものなので、問題解決ページのように正常に分離できたオールドバージョンのソースか、どこからの偉い神様がご用意くださった1.5.8の修正ソースを用いて改造版1.5.8をコンパイルしてあげることで解決されます。
TSエンコード入門~番外編~
aviutlによるTSエンコード入門~準備編~
http://coelacanth-deepsea.hatenablog.com/entry/2012/10/26/231233
aviutlによるTSエンコード入門~バッチファイル編~
http://coelacanth-deepsea.hatenablog.com/entry/2012/10/27/214435
私も先日エンコードをはじめたばかりですので、TSエンコード初心者の苦しみをわすれないうちに参考になるかもしれないことをつらつらと書き残しておこうかと思います。
初心者向けのページには各ツールの紹介や導入方法について懇切丁寧に書かれていますが、それはいろいろ試した結果のその人なりの結論です。これから始めようとする人が全くおなじ環境を再現できたならば、同じような成果を得ることができるのでしょうけれども、残念ながらパソコン、OS、ソースなどそれぞれ置かれている環境が違うわけです。ですので書かれた通りにやってもうまくいかないことがあって、仕方なく他のページを参照することになります。新しく参考にしたページでは、当然のことながらツールや方法が微妙に異なるわけで、さらにそこで作業に失敗すれば前回とプロセスが違うためにどこに問題があったのか検証が難しくなるというドツボが待ち構えています。
わたしとしては、みなさんにはこのような悲劇を回避していただきたということで、そのために役立つかもしれない全体の流れと、各フェーズにおける留意点等について触れたいと思います。
TSエンコードの流れ
①TSソースファイルの吟味
⇓
②TSソースファイルからの動画・音声ファイルの分離
⇓
③音声ファイルの変換+遅延修正
⇓
④動画のエンコ
大まかにはこんなところでしょうか。ツールによってはTS→mp4なんてこともできますから参考程度と考えてください。
解説
「①TSソースファイルの吟味」とは、実際にファイルを弄る前にその後の作業に必要な情報を最低限収集する作業のことです。たとえばfps、フィールドオーダー、フレームの幅や高さ、音声チャンネルの数、ワンセグ映像や番組情報の有無など。これらの情報を踏まえてエンコードに係る作業を行わなくてはいけません。
確認方法は多岐に及びますが、私は DGMPGDec にTSソースファイルを展開し、F5ボタンで確認しています。シリーズものの作品をエンコする場合、最初の一話だけきちんと確認して、その設定はaviutlのプロフィールに保存しておくのが吉でしょう。
「②TSソースファイルからの動画・音声ファイルの分離」とざっくり言いましても、ここではいろいろと作業があります。
TSソースファイル
┃
┃━余分なファイルの分離━TSSplitter━┓
┗━━━━━━━━━━━━━━━━━━━動画と音声の分離━━━━━━┓
┏━━━━━ DGMPGDec ━━━━━━━┃
┃━━━━━ ののたん? ━━━━━━━━┃
┏━━音声の変換・遅延修正━━ mme━GOPリストの作成━ BonTSDemux ┛
┗━ToWave ━┓
┃━ FAW ━┃
┗━ faad ━━━動画の圧縮━ .mp4
↑は一例でありイメージです。もちろんこれ以外にも方法やツールはあります。
まずTSSplitterですが、SD映像や番組情報を削除するのに使います。TOKYO MXの番組や音声が5.1chの動画でない場合は無理に使用しなくてもいいと思います。
動画と音声の分離方法について、DGMPGDecはバージョンによって、新BSチャンネルやBS11のTSソースファイルを分離しようとすると、AAC音声ファイルに不具合を生じます。(解決方法) DGMPGDecによって生成されるファイルは.d2vプロジェクトファイルとAAC音声ファイルです。
ののたんは使ったことがありません!
現行バージョンのBonTsDemuxではいまのところ問題に遭遇していません。M2VファイルとAACファイルが作成されますが、さらにmme.exeを用いてGOPリストを作成しないといけないのが手間ですね。
「③音声ファイルの変換+遅延修正」音声変換は音声のチャンネル数によってツールや設定がかわってきます。ToWaveだと二ヶ国語放送にも対応(要設定)しているので、おすすめです。5.1chをハンドリングする場合は、別途勉強が必要です。
「④動画のエンコ」エンコにはAviutl + .x264を使っています。avisynthなどをつかって全部を自動化することもできますが、結局CMトリムが手動であることを考えると半自動化程度が最適なのではないか、であるならばGUIで直感的に操作しやすいAviutlがいいでしょ!というのが私の考え方です。CMの自動カットツールなるものも開発されたようですが、カットの精度がある一定高まらないとチェックで結局同じくらい骨を折ることになりますね。
aviutlによるTSエンコード入門~準備編~
http://coelacanth-deepsea.hatenablog.com/entry/2012/10/26/231233
aviutlによるTSエンコード入門~バッチファイル編~
http://coelacanth-deepsea.hatenablog.com/entry/2012/10/27/214435
ToWave エラー
http://coelacanth-deepsea.hatenablog.com/entry/2012/11/12/065512
aviutlによるTSエンコード入門~バッチファイル編(BonTsDemux)~
前回の記事:aviutlによるTSエンコード入門~準備編~
http://coelacanth-deepsea.hatenablog.com/entry/2012/10/26/231233
aviutlによるTSエンコード入門~番外編~
http://coelacanth-deepsea.hatenablog.com/entry/2012/11/02/011821
ファイル名によるバッチファイル処理失敗の回避の方法
http://coelacanth-deepsea.hatenablog.com/entry/2013/01/13/160853
aviutlによるTSエンコード入門~バッチファイル編(DGIndex)~
http://coelacanth-deepsea.hatenablog.com/entry/2013/01/13/160853
さて、前回の記事で準備は完了したはずということで、バッチファイルの準備に移りたいと思います。正常に動作しない場合は、私が必要なファイルを挙げ忘れているためだと思いますので、コメント等で知らせて頂ければ幸いです。
バッチファイル載せて終わりにしてもいいのですが、こんな情報を漁りに来る人間は最終的に自分でカスタマイズできないと満足できない性質のはず!ということで、バッチファイルの基本から説明したいと思います。
バッチファイルによる半自動化の内容
- ソースファイル(ts)をBonTsDemuxを使って動画(m2v)と音声(aac)に分離
- 音声(aac)ファイルをToWaveを使って、wav変換+delay修正
- mmeを使って動画(m2v)ファイルからGOPリストの作成
- aviutlに動画ファイル(m2v)+GOPリスト(gl)と音声ファイル(wav)を読みこませる
なお、本パッチを作成するにあたり参考にしたサイトは以下の通りです。
http://heieiei-islands.blog.so-net.ne.jp/2012-01-10
バッチファイルの作成にあたっては、基礎文法くらいは把握しておく必要があります。事前準備として下記サイトに目を通しておいてください。
次にワタシの作成した拙いバッチファイル本文です。テキストファイルにコピペ、◯◯◯.batと名前をつけて保存しましょう。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
@echo off
REM ■■取り扱い説明■■
REM TSファイルをこのbatにD&Dする(複数可)
REM TSファイルをBonTsDemuxにてm2vとaacに分割。
REM aacをFAWにてwav変換+delay修正。
REM m2v動画ファイルとaac音声ファイルをAviutlに読み込ませ、
REM 指定したプロファイルで起動する
REM *******************************************************
REM FAW、BonTsDemux、Aviutl、Aviutlcontrol(AUC)
set TOWAVE="~~~~\ToWave.exe"
set TSDEMUX="~~~~\BonTsDemux.exe"
set AVU="~~~~\aviutl.exe"
set AUC_DIR=~~~~\auc\
set MME="~~~~\mme.exe"
REM Aviutlのプロファイルを指定する。プロファイル番号は上から0,1,2……
set UTL_PROF=1
REM 0=ドラマ(例)
REM 1=1080i 16:9 映画(例)
REM 2=アニメそんなバナナ(例)
REM 出力先を指定する。指定がなければTSファイルがあるフォルダに出力する。
set OUTPUT=
REM ****************************************************
echo Aviutlプロファイル %UTL_PROF%
if exist "%OUTPUT%" (
echo %OUTPUT%に出力します
) else (
echo 元のフォルダに出力します
set OUTPUT=%~dp1
)
:start
IF "%~1"=="" GOTO END
IF NOT "%~x1" == ".ts" GOTO shiftprocess
set PATH_NAME=%~dp1
set OUTPUT_NAME=%~n1
echo.
echo ****************************************************
echo.
echo "%OUTPUT_NAME%"の
echo 分離作業開始
echo.
echo ****************************************************
echo.
echo "BonTsDemux"
%TSDEMUX% -i "%~1" -o "%OUTPUT_NAME%" -encode "Demux(m2v+aac)" -nogui -nd -start -quit
for /f "usebackq tokens=*" %%i in (`dir /b "%PATH_NAME%%OUTPUT_NAME%.m2v"`) do set M2V_FILE=%%i
if not exist "%M2V_FILE%" (
echo "%OUTPUT_NAME%"をm2v+acc分離できませんでした
GOTO error0
) else (
echo "m2v+acc分離OK"
)
set M2V_FILE_NAME=%M2V_FILE:~0,-4%
echo "ToWave"
for /f "usebackq tokens=*" %%i in (`dir /b "%M2V_FILE_NAME%*DELAY*.aac"`) do set AAC_FILE=%%i
if not exist "%AAC_FILE%" (
echo "%OUTPUT_NAME%"のAACファイルがありません
GOTO error1
)
%TOWAVE% "%AAC_FILE%"
for /f "usebackq tokens=*" %%i in (`dir /b "%M2V_FILE_NAME%*.wav"`) do set WAV_FILE=%%i
if not exist "%WAV_FILE%" (
echo "%OUTPUT_NAME%"のAACをWAV変換できませんでした
GOTO error2
) else (
echo "WAV変換完了"
del "%AAC_FILE%"
)
echo "Make gl file"
%MME% -g -q "%M2V_FILE%"
echo.
echo ****************************************************
echo.
echo "%OUTPUT_NAME%"の
echo m2v + aac + glの生成に成功しました
echo.
echo ****************************************************
echo.
SHIFT
IF NOT "%~1"=="" GOTO NEXT1
echo "Start Aviutl"
start /b "" %AVU%
timeout -t 2
echo "%M2V_FILE%"
echo "add m2v file"
call "%AUC_DIR%auc_open" "%M2V_FILE%"
timeout -t 3
echo "add WAV file"
call "%AUC_DIR%auc_audioadd" "%WAV_FILE%"
timeout /t 3
echo "set encode profile"
call "%AUC_DIR%auc_setprof" "%UTL_PROF%"
timeout /t 3
rem echo "Make mp4 file"
rem call "%AUC_DIR%auc_plugout" "1" "%OUTPUT%%OUTPUT_NAME%.mp4"
rem timeout /t 5
rem "%AUC_DIR%\auc_wait"
rem timeout /t 5
echo.
echo ****************************************************
echo 現在『aviutl』には
echo "%OUTPUT_NAME%"の
echo m2v + aac が読み込まれています
echo ****************************************************
echo.
GOTO END
:error1
del "%M2V_FILE%"
:error2
del "%AAC_FILE%"
:error0
echo ****************************************************
echo エラー終了しました
echo ****************************************************
pause
exit
:shiftprocess
SHIFT
:NEXT1
echo 次のファイルへ移ります
GOTO start
:END
echo 全作業が終了しました
pause
exit
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
さて解説に移ります。
┃@echo off
┃ REM ■■取り扱い説明■■
「echo」 はコマンドプロンプトのコンソール上にメッセージを表示するためのコマンドです。echo + 半角スペース+メッセージと記述します。ちなみに「echo.」は空文字の表示です。「@echo off 」はコンソール上に処理メッセージが表示されるのを防ぐための慣用句です。プログラムの冒頭に記述しましょう。
┃REM FAW、BonTsDemux、Aviutl、Aviutlcontrol(AUC)
┃set TOWAVE="~~~~\ToWave.exe"
┃set TSDEMUX="~~~~\BonTsDemux.exe"
┃set AVU="~~~~\aviutl.exe"
┃set AUC_DIR=~~~~\auc\
┃set MME="~~~~\mme.exe"
set で変数の宣言を行い、そこにプログラムまでのpathを格納しています。たとえば変数のTO WAVEにはToWave.exeまでのフルパスを格納する必要があります。ご自身の環境に合わせて~~~~の部分をパスで置き換えて下さい。各々の変数について同様の作業を行なって下さい。
"◯◯◯◯"の ダブルクオーテーション(")に囲まれた領域は、連続した文字列としてプロンプトに処理されます。プロンプトでは文字列中に半角や全角スペースを含む場合、文字列が分割される場合がありますので、その防止策として有効です(→訂正)。ご自身の環境下で上記バッチを実行し、auc周りにエラーが出た場合はAUC_DIRのパスをダブルクオーテーションで囲むことで改善されるかもしれません。
┃REM Aviutlのプロファイルを指定する。プロファイル番号は上から0,1,2……
┃set UTL_PROF=1
┃REM 0=ドラマ(例)
┃REM 1=1080i 16:9 映画(例)
┃REM 2=アニメそんなバナナ(例)
プロファイルは、aviutlを起動してソースに応じた設定を事前に保存しておく必要があります。ということは作品ごとにUTL_PROFを書き換えなくてはいけないわけで、複数のソースを処理する場合には現状において無用の長物なのです\(^o^)/
┃REM 出力先を指定する。指定がなければTSファイルがあるフォルダに出力する。
┃set OUTPUT=
エンコまで一気に処理したい人はOUTPUTにフルパスを通してください。
┃echo Aviutlプロファイル %UTL_PROF%
┃if exist "%OUTPUT%" (
┃ echo %OUTPUT%に出力します
┃) else (
┃ echo 元のフォルダに出力します
┃ set OUTPUT=%~dp1
┃ )
変数を%で挟むことで値を参照しています。%UTL_PROF%の部分はコンソール上で1と表示されるはずです。次にif条件分岐です。if 条件 ( [コマンド1] ) else ( [コマンド2] ) の構文です。条件が満たされた場合(真の場合)はコマンド1が、そうでない場合はコマンド2が処理されます。上記のexist場合、%OUTPUT%内に何かしらのデータが格納されているかを分岐の条件としています。コマンド2の格納されていない場合には、新たにOUTPUTに「%~dp1」を代入しています。「%~dp1」については次で詳述しますが、ここではソースファイルのあるディレクトリへのパスを受渡していると理解してください。
┃ :start
┃IF "%~1"=="" GOTO END
┃IF NOT "%~x1" == ".ts" GOTO shiftprocess
さて、「%~1」とは何ぞやということですが、「%1」はバッチパラメータと呼ばれる変数であり、これに変数の参照条件「~」をつけて呼び出しています。バッチ自身は初期状態で10個の格納庫を持っていますが、その1個目が%0で、中にはバッチファイル自身の名前が固定で格納されています。%1、%2・・・、%9には、バッチファイルに複数のソースファイルがドラッグ・アンド・ドロップされた場合に、各ソースファイルのフルパスが順次格納されます。
ここまで理解できれば登山の6合目といったところでしょうか。それでは変数の参照条件について解説しましょう。「%~1」に含まれる「~」は、変数中の引用句(")を削除して参照します。ゴミ取りみたいなものだと思って下さい。プログラムへの引数の引き渡しや条件文中などでよく使います。さらに「~」の後ろに特定のアルファベットを加えることで新たな参照条件を加えることができます。たとえば「%~dp1」の「d」は%1のドライブ名を、「p」はドライブレターとファイル名を除くパス文字列をそれぞれ呼び出しており、両者を組み合わせることで%1のファイル名を除くドライブからのパス文字列を参照させることができます。もし、TSソースのフルパスが「D:\◯◯◯◯\tsソース\hogehoge.ts」だったならば、「%~dp1 = D:\◯◯◯◯\tsソース\」と参照されるわけです。ちなみに「%~x1」の「x」はファイルの拡張子を参照しています。
「:shiftprocess」は、ラベルと呼ばれるもので、バッチファイル中に「:」の後に適当な文字列を記入することでプログラムソース中にインデックスを与えることができます。「GOTO shiftprocess」では「GOTO」を置くことによって、当該インデックスまで処理をバイパスさせます。
┃set PATH_NAME=%~dp1
┃set OUTPUT_NAME=%~n1
上はTSソースファイルのあるフォルダまでのパスを、下は「n」をつけることでTSソースの拡張子を除くファイル名を格納しています。
┃%TSDEMUX% -i "%~1" -o "%OUTPUT_NAME%" -encode "Demux(m2v+aac)" -nogui -nd -start -quit
コマンドラインによるBonTsDemuxの操作です。本体へのパスが格納された%TSDEMUX%に「"%~1"」(ドラッグ・アンド・ドロップされたTSソース)を渡し、「"%OUTPUT_NAME%" 」のファイル名を指定して動画(m2v)ファイルと音声(aac)ファイルを出力させています。その他の細かなオプションについては、BonTsDemuxのreadme.txtを読んでください。
┃for /f "usebackq tokens=*" %%i in (`dir /b "%PATH_NAME%%OUTPUT_NAME%.m2v"`) do set M2V_FILE=%%i
ここが二つ目の難所でしょうか?機能をざっくり説明すると、先ほど作成した動画(m2v)ファイルのフルパスを変数「M2V_FILE」に格納しています。まず「for /f」は文字列の解析を行うコマンドです。「usebackq」は、後に続く(`◯◯◯`)内が解析対象の文字列そのものではなく、文字列を探すためのコマンドであることを宣言しています。「tokens=*」はファイル名(解析対象の文字列)にスペースや空白が含まれようが、1つの文字列としてみなすよう指示しています。「dir /b △△△.m2v」は△△△.m2vと一致するファイルのフォルダとファイル名を表示するコマンドです。一致するファイルが見つかったら、変数%%i(for構文中の変数表記方法)に渡して、「do set M2V_FILE=%%i」で「M2V_FILE」に△△△.m2v(フルパス)を格納しています。
┃set M2V_FILE_NAME=%M2V_FILE:~0,-4%
これは「M2V_FILE」に格納された文字列を先頭(0文字目)から受け取り、後ろ4文字(.m2v)を削除して「M2V_FILE_NAME」に格納しています。もし.tsなら-3になるよ!
┃for /f "usebackq tokens=*" %%i in (`dir /b "%M2V_FILE_NAME%*DELAY*.aac"`) do set AAC_FILE=%%i
これはBonTsDemuxで生成された音声(aac)ファイルのフルパスを、「AAC_FILE」に格納しています。音声(aac)ファイルには、生成時に遅延時間などのユニークな変数がファイル名に付記されますので、その不確定な部分を「*」ワイルドカードで記述しています。
┃%TOWAVE% "%AAC_FILE%"
ToWave.exeで音声ファイルのaac⇒wav変換+遅延修正を行なっています。細かいことはToWaveのreadme.txtを参照してください。
┃%MME% -g -q "%M2V_FILE%"
mme.exeでGOPリストを作成しています。あらかじめ作成せずにaviutlに動画(m2v)ファイルを渡すと、処理途中で音声(wav)ファイルを受け取ってしまいエラーが生じます。生成されるリストの拡張子は「.gl」です。
┃SHIFT
┃IF NOT "%~1"=="" GOTO NEXT1
「SHIFT」は、変数%1を%2に順送り、つまり2つ目のソースファイルを参照するよう指示しています。次の行では、処理するソースファイルがまだある場合は、インデックスのNEXT1に進み、つぎの分離作業に移行するよう指示しています。つまり、本バッチファイルでは最後に生成されたm2v+wavファイルのみがaviutlに渡されることになります(´・ω・`)
┃start /b "" %AVU%
┃timeout -t 2
┃echo "%M2V_FILE%"
┃echo "add m2v file"
┃call "%AUC_DIR%auc_open" "%M2V_FILE%"
ここからはAviutlcontrolの制御ですので、詳しくはそちらのreadme.txtを参照してください。まず「start /b "" %AVU%」でaviutlの起動。「timeout -t 2」は2秒待つ。callは引数(%M2V_FILE%)を与えてコマンド(%AUC_DIR%auc_open)を実行しています。
┃rem echo "Make mp4 file"
┃rem call "%AUC_DIR%auc_plugout" "1" "%OUTPUT%%OUTPUT_NAME%.mp4"
┃rem timeout /t 5
┃rem "%AUC_DIR%\auc_wait"
┃rem timeout /t 5
エンコまで自動化するつもりはないのでコメントアウトしています。お好みでどうぞ。
┃del "%M2V_FILE%"
◯◯◯.m2vファイルを削除しています。
┃pause
┃exit
「pause」で処理を止めます。「exit」でコマンドプロンプトを閉じます。・・・ってひょっとするとこれだと「exit」まで行き着かない?w
ちなみに分離作業以降でエラー吐いたことがないので、構文ミス見逃してるかもしれません。
以上、バッチファイルについてざっくりと説明しました。がんばって書いたつもりですが、意味不明なところや間違っているところ、わからないところがあればコメントに寄せていただければと思います。