FakeAacWavを使用してAACをFAWに変換していたところを、Rutice softwareさんのAACをFAWとして読み込むプラグイン(aacfaw.aui)を使用して直接読み込めるように変更しました。
更新内容
- FakeAacWavを使用してAACをFAWに変換するかどうかをオプションで選択できるようにしました。
- AVSテンプレートに、aacfaw.auiを使用してAACをFAWとして読み込む処理を追加しました。
aacfaw.auiを使用すると、WAVファイルを出力しないのでスクリプトの実行時間が短くなる。WAVファイルの4GB制限に引っかからない。などのメリットがあります。
PowerShellスクリプト
TS半自動エンコードスクリプトです。メモ帳などに貼り付け、拡張子を「ps1」にして適当に名前を付けて保存してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 |
############################################################# # TS半自動エンコードスクリプト # # by Heet (https://heetnote.com/) # # 【更新日】2018/01/28 # # 【機能】TSをAviUtlでエンコードするための下準備をします。 # # 1. TsSplitterで不要なサービスを削除 # # 2. DGIndexでd2v/aacに分離、avsを作成 # # 3. FAWでaacを疑似wavに変換 # # 4. logoGuilloでCMカット用フレームリストを作成 # # 5. AviUtlでavsを読み込んで編集してください # # 【使用方法】 # # 1. 本スクリプトへのショートカットを作成し # # リンク先を以下のように設定してください # # 「powershell -File "C:\Video\TSCook.ps1"」 # # 2. スクリプトの実行が無効になっている場合は # # PowerShellを管理者権限で起動し # # 以下のコマンドで実行ポリシーを変更してください # # 「Set-ExecutionPolicy RemoteSigned」 # # 3. ショートカットにTSファイルをD&Dしてください # # 右クリックの「送る」に登録する場合は # # エクスプローラで「shell:sendto」を開き # # フォルダにショートカットを入れてください # ############################################################# ###### 環境設定 ############################################# # 注) フォルダ指定の最後に「\」を付けないでください。 # 出力先フォルダ $OutputDir = "D:\Video\Edit" # 「TsSplitter.exe」のパス $TsSplitterPath = "C:\AviUtl\TsSplitter\TsSplitter.exe" # 「DGIndex.exe」のパス $DGIndexPath = "C:\AviUtl\DGIndex\DGIndex.exe" # AVSテンプレートのパス $AvsTemplatePath = "C:\AviUtl\DGIndex\template.avs" # 「fawcl.exe」のパス $fawclPath = "C:\AviUtl\FakeAacWav\fawcl.exe" # logoGuillo関連の設定 $LOGOG_PATH = "C:\AviUtl\logoGuillo\logoGuillo.exe" $AVS2X_PATH = "C:\AviUtl\logoGuillo\avs2pipemod\avs2pipemod.exe" $AVSPLG_PATH = "C:\AviUtl\DGIndex\DGDecode.dll" # ロゴデータ(.lgd)とロゴ検出パラメータ(.param)の格納フォルダ # TSファイル名に含まれる放送局名と一致する必要があります。 # ex)「ABCDE 第1話 (20171010-2300 BS11).ts」の場合 # 「BS11.lgd」と「BS11.lgd.autoTune.param」が必要 $LOGO_DIR = "C:\AviUtl\logoGuillo" ###### オプション ########################################### # CS放送の分割を行う場合は1を指定 $CSEnable = 0 # 番組情報及びPMT情報で分割する場合は1を指定 $SEP2Enable = 1 # 分割する際に糊代を付加する場合は値を指定 $OVLVal = "-OVL25,35,0" # 分割時に最も大きいTSファイル以外は削除する場合は1を指定 $DelTSEnable = 1 # 最も大きいTSの半分以上のサイズのTSを残す場合は1を指定 # 番組途中でPMT情報が変わる場合の対策 $KeepTSEnable = 1 # d2v.badを使用する場合は1を指定(d2vはd2v.bakにリネームします) $UseBadEnable = 1 # FakeAacWavで擬似WAVを出力する場合は1を指定 # aacfaw.auiを使用してAACをFAWとして読み込む場合は0を指定 $FAWEnable = 0 ###### 設定終了 ############################################# ###### 引数確認 ############################################# if($Args.Count -eq 0) { Write-Host "引数がないため処理を終了します。" Write-Host "" Read-Host "続行するには何かキーを押してください . . ." exit } ###### 処理開始 ############################################# Write-Host "" Write-Host "============================" Write-Host " 処 理 開 始 " Write-Host "============================" Write-Host "" # 出力先フォルダを作成 if ((Test-Path -Path $OutputDir) -eq 0) { New-Item -Path $OutputDir -ItemType Directory Write-Host "" } # TsSplitterのパラメータを設定 $TsSplitterCS = "" $TsSplitterSEP2 = "" $TsSplitterOVL = "" if ($CSEnable -eq 1) { $TsSplitterCS = "-CS" } if ($SEP2Enable -eq 1) { $TsSplitterSEP2 = "-SEP2" $TsSplitterOVL = $OVLVal } ##### 入力ファイル一覧出力 ##### Write-Host "====== 入力ファイル一覧 ======" foreach ($InputItem in $Args) { Write-Host $InputItem } Write-Host "" ##### 入力ファイル数分ループ ##### foreach ($InputItem in $Args) { # TS以外は処理しない if ($InputItem -like "*.ts" -eq 0) { continue } Write-Host "====== 処理するファイル ======" Write-Host $InputItem Write-Host "" Write-Host "====== TsSplitter開始 ======" # TsSplitterにTSを渡す & $TsSplitterPath -SD2 -SD3 -1SEG $TsSplitterCS $TsSplitterSEP2 $TsSplitterOVL -OUT $OutputDir -WAIT2 $InputItem Write-Host "" # 拡張子を除いたファイル名を取得 $BaseName = [System.IO.Path]::GetFileNameWithoutExtension($InputItem) # 最も大きいTSを残して削除 if ($DelTSEnable -eq 1) { $DelItemList = Get-ChildItem -Filter "*.ts" -Path $OutputDir | Where-Object {$_.Name.Contains($BaseName + "_")} | Sort-Object Length -Descending for($i = 1; $i -lt $DelItemList.Count; $i++) { # 最も大きいTSの半分以上のサイズなら削除しない if($KeepTSEnable -eq 1) { if($DelItemList[$i].Length -ge $DelItemList[0].Length / 2) { continue } } Write-Host "削除:" $DelItemList[$i].Name -NoNewline Write-Host "" Write-Host "サイズ:" ([math]::round($DelItemList[$i].Length / 1MB, 2)) "MB" -NoNewline Write-Host "`n" Remove-Item -LiteralPath $DelItemList[$i].FullName -Force } } # 出力されたTSファイル数分ループ $TsItemList = Get-ChildItem -Filter "*.ts" -Path $OutputDir | Where-Object {$_.Name.Contains($BaseName + "_")} foreach ($TsItem in $TsItemList) { Write-Host "<<<<<< $TsItem >>>>>>" Write-Host "" Write-Host "====== DGIndex開始 ======" Write-Host "--- 処理中 ---" # DGIndexにTSを渡す $DGIndexOut = $OutputDir + "\" + $TsItem.BaseName & $DGIndexPath -i $TsItem.FullName -o $DGIndexOut -ia 5 -fo 0 -om 2 -yr 2 -at $AvsTemplatePath -hide -exit | out-null Write-Host "--- 完了 ---" Write-Host "" # d2v.badを使用する if ($UseBadEnable -eq 1) { $D2v = $DGIndexOut + ".d2v" $D2vBak = $DGIndexOut + ".d2v.bak" $D2vBad = $DGIndexOut + ".d2v.bad" if (Test-Path -LiteralPath $D2vBad) { # ***.d2vを***.d2v.bakにリネーム Move-Item -LiteralPath $D2v $D2vBak # ***.d2v.badを***.d2vにリネーム Move-Item -LiteralPath $D2vBad $D2v } } if ($FAWEnable -eq 1) { # AACファイル数分ループ $AacItemList = Get-ChildItem -Filter "*.aac" -Path $OutputDir | Where-Object {$_.Name.Contains($TsItem.BaseName + " PID")} foreach ($AacItem in $AacItemList) { Write-Host "====== FAW開始 ======" # FAWにAACを渡す & $fawclPath $AacItem.FullName Write-Host "" } } Write-Host "====== logoGuillo開始 ======" # logoGuillo用パラメータ設定 $LOGO_PATH = "" $PRM_PATH = "" $VIDEO_PATH = $DGIndexOut + ".d2v" $OUTPUT_PATH = $DGIndexOut + ".avs.txt" # 放送局に対応するロゴデータを検索 $LgdItemList = Get-ChildItem -Filter "*.lgd" -Path $LOGO_DIR foreach ($LgdItem in $LgdItemList) { # TSファイル名にロゴデータ名が含まれるか if($TsItem.Name.Contains($LgdItem.BaseName)) { $LOGO_PATH = $LgdItem.FullName $PRM_PATH = $LOGO_PATH + ".autoTune.param" # ロゴ検出パラメータが存在するか if (Test-Path -LiteralPath $PRM_PATH) { break } else { $PRM_PATH = "" break } } } # ロゴ検出パラメータがあればCMカットを実行 if ($PRM_PATH -ne "") { # logoGuilloを実行 & $LOGOG_PATH -video $VIDEO_PATH -lgd $LOGO_PATH -avs2x $AVS2X_PATH -avsPlg $AVSPLG_PATH -prm $PRM_PATH -out $OUTPUT_PATH -outFmt keyF Write-Host "" } else { Write-Host "--- ロゴデータが見つかりませんでした ---" Write-Host "" } } } Write-Host "============================" Write-Host " 処 理 終 了 " Write-Host "============================" Write-Host "" Read-Host "続行するには何かキーを押してください . . ." |
AVSテンプレート
メモ帳などのテキストエディタに貼り付け、「template.avs」というファイル名で
DGIndexのインストールフォルダに保存してください。「aacfaw.aui」のパスは環境に合わせて変更してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
LoadPlugin("C:\AviUtl\DGIndex\DGDecode.dll") LoadPlugin("C:\AviUtl\aacfaw.aui") d2v = "__vid__" aac = "__aud__" # wav = LeftStr(aac, FindStr(aac, "DELAY") + 5) + "0ms_aac.wav" v = MPEG2Source(d2v, upconv=1) a = AACFaw(aac) # a = WavSource(wav) # a = bassAudioSource(aac) AudioDub(v, a) # DelayAudio(__del__) return last |
使い方
スクリプトの使い方は過去の記事を参照してください。
⇒TS半自動エンコードバッチをPowerShellで作り直しました