おにぃちゃんの日記

自動TS→H.264変換設定について(3)

 TVRockと連携して自動でTS→H.264変換という記事に、さらにいくつかコメントが寄せられていましたので、ここで整理してみようかと思います。

  • Q. Core i5などはスレッド数は8に変更した方がよいのか
  • A. ffmpegの-threads オプションは、CPUのコア数分だけエンコードスレッド数を増やし、処理速度を高速化するオプションのようです。ただ、HTテクノロジー(ハイパー・スレッディング・テクノロジー)が有効になるCore i7では、1つのコアで2スレッドを動かすことができる(つまり物理的に4コアあれば8スレッドまで実行可能である)ため、-threads 8にすると、多少速度アップするかもしれません。実は詳しく検証してみたことがないため、実際のところ速くなっているのかはよくわかりません、ごめんなさい(笑。

    Core i5についてですが、型番によってはHTテクノロジー非搭載のものもあるため、ご使用のCPUの型番を確認した上で設定を変更してみて、パフォーマンスを計測してみると良いかもしれません。CPU(コア)数以上を指定しても速度は変わらないという情報もあり、大きな数字にしてもパフォーマンスアップは期待薄でしょう。あとは気分の問題ということで(笑。
  • Q. 自動生成されるTSファイルを削除し、MP4ファイルのみ残すことは可能か? また、TsSplitterのTSファイルの出力先と、BonTsDemuxのMP4ファイルの出力先を変えることは出来るか?
  • A. taskenc.vbsのスクリプトが実行されると、幾つかのTSファイルが生成されますが、このスクリプトファイルの内容を一部変更することで、対応が可能です。taskenc.vbs 改造のサイト情報をもとに、ちょこっと改造してみました。「HD」という文字列の入ったTSファイルとMP4ファイルをそれぞれ別のフォルダに生成し、オリジナルのTSファイルを削除するスクリプトへの変更例です。参考までにどうぞ。ただ、MP4変換が成功しているかどうかを検証する機能は入れていないため、オリジナルファイルを含め、不要なTSファイルが変換後全て削除されてしまいます。MP4変換に失敗したときは取り返しがつきませんので、HDDの空き容量が十分あることや、安定動作するかどうかを必ずご確認の上、ご使用ください(^^;。ということで、自己責任でお願いいたします。

以下、taskenc.vbsの追加&変更行のみ記載します(左側の3桁の数字は行番号です)。

005: Dim gsSpliter,gsSpliterOpt,gsSpliterOut,gsMediaCoder,gsMediaCoderOpt,gsMediaCoderOut,gsTargetExt,gsEncodeFile '←この行を変更

023: gsSpliter = "D:\Program Files (x86)\TsSplitter Ver1.23\TsSplitter.exe" '←この行を変更

026: gsMediaCoder = "D:\Program Files (x86)\bontsdemux1.10+10k7\BonTsDemux.exe" '←この行を変更

032: gsSpliterOpt = "-SD2 -SD3 -1SEG -WAIT2" '←この行を変更
033: gsSpliterOut = "J:\TV" '←この行を追加(ここにはTsSplitterの出力先フォルダを指定する)
034: if gsSpliterOut <> "" then '←この行を追加
035:    gsSpliterOpt = gsSpliterOpt & " -OUT """ & gsSpliterOut & """ " '←この行を追加
036: End if '←この行を追加

051: gsMediaCoderOpt = "-encode X264_mp4 -rf64 -vf -start -quit " '←この行を変更
052: gsMediaCoderOut = "J:\Enc" '←この行を追加(ここにはBonTsDemuxの出力先フォルダを指定)

185:   Dim aFiles,sTmpFileName,sOutFileName,sTmpFileName_org '←この行を変更

189:      sEncodeFile = GetLargestFile(gsSpliterOut & "\" & oFs.GetBaseName(sTarget),gsTargetExt,aFiles) '←この行を変更

206:   sTmpFileName_org = Left(oFs.GetTempName(),8) '←この行を追加
207:   sTmpFileName = gsSpliterOut & "\" & sTmpFileName_org & ".ts" '←この行を変更

217:   sTmp =  sTmp & " -i """ & gsSpliterOut & "\" & sTmpFileName_org & ".ts" & """ -o """ & gsMediaCoderOut & "\" & sTmpFileName_org '←この行を変更

222:   sTmp = "cmd /c move """ & gsMediaCoderOut & "\" & sTmpFileName_org & gsBatModeOutExt & """ """ & gsMediaCoderOut & "\" & oFs.GetBaseName(sTarget) & gsBatModeInExt & gsBatModeOutExt & """" '←この行を変更

246:      iLen = UBound(aFiles) '←この行を有効化
247:      For i = 0 to iLen '←この行を有効化
248:         if (aFiles(i) <> sEncodeFile) and (aFiles(i) <> sTarget)then '←この行を有効化
249:            sTmp = "cmd /c del """ & aFiles(i) & """" '←この行を変更
250:            WriteLog("ファイル削除:" & sTmp) '←この行を有効化
251:            DoIt(sTmp) '←この行を有効化

277:            WriteLog(sEncodeingFile & "がエンコード中ですので1分待ちます。") '←この行を変更

282:      WScript.Sleep 1 * 60 * 1000 '←この行を変更

312:   '処理済み元ファイルの削除 '←元ファイルを削除する場合は、この行を追加
313:   If ( oFs.FileExists(sTarget) ) Then '←元ファイルを削除する場合は、この行を追加
314:      WriteLog("ファイル削除:" & sTarget) '←元ファイルを削除する場合は、この行を追加
315:      oFs.DeleteFile(sTarget) '←元ファイルを削除する場合は、この行を追加
316:   End if '←元ファイルを削除する場合は、この行を追加