fc2ブログ

PREV | PAGE-SELECT | NEXT

≫ EDIT

TSファイルを一括でQSVエンコードする

前回紹介したQSVエンコードをより便利に使うために一括エンコードを考えてみました。
VBSファイルに複数のTSを投げ込むと順番にエンコードが開始される感じになります。
録画したファイルをそのまま投げるのでCMカットなどは行いません。

QSVEncプラグインの中に"QSVEncC.exe"があり、avisynthと一緒に使えば自動でエンコードできそうです。
でもavisynthの使い方忘れちゃいましたし、簡単とか言いながら結構導入が面倒です。
QSVEncC.exeの使用方法も不明で、エンコード設定とかどう指定するのかもわかりません。

なので、AviUtl Controlを使います。
これはAviutlの操作をコマンドで使用出来るようにするプラグインです。使用方法は以下が詳しいです。
Aviutlでフォルダ内の動画を自動的に一括エンコードする方法

簡単に説明するとAviUtl Controlの中にaviutlをコマンドで操作するexeファイルがあり、
それらをVBSファイルで色々設定し、そのVBSにTSをD&Dすればエンコードされる様になります。
VBSの知識がなくても何とかなります。より便利にしたいのであれば少し勉強する必要あるかもです。

追記:
上でQSVEncCの使い方がわからないと書きましたが、調べてみると使えるようになりました。
下記リンクの方法でも一括エンコードはできますが、avisynthを一度も使っていない方だと、
導入に少し時間がかかるかもしれません。この記事の方法は比較的簡単だと思います。
QSVEncC+avisynthで高速自動エンコードする その1

スポンサーリンク



VBSスクリプト
AviUtl Controlを解凍するとTSエンコード用の『sample2.vbs』があるのでこれをベースに書き換えます。
本来はエンコードするファイルをバッチ登録するスクリプトみたいでしたけど、
バッチ登録せずにD&Dしたファイルを順にエンコードするようにちょっと書き換えました。

'''
''' TSエンコードの サンプルスクリプト
'''
On Error Resume Next

Set Args = WScript.Arguments

' テンポラリパス(最後の文字は"\")
Const TMP_FOLDER = "エンコードするファイルのパス\"

' エンコードしたデータを出力するフォルダ(最後の文字は"\")
Const OUTPUT_FOLDER = "エンコードしたファイルを置くパス\"

' プロファイル番号(メニューの一番上が0)
Const OUTPUT_PROFILE = 0

' 出力プラグイン番号(メニューの一番上が0)
Const OUTPUT_PLUGIN = 2

' 出力ファイルの拡張子
Const OUTPUT_EXT = ".mp4"

' AviUtlのフルパス
Const AVIUTL_PATH = "aviutl.exeのパス"

' AviUtl Controlを置いてあるフォルダ(最後の文字は"\")
Const AUC_FOLDER = "AviUtl Controlを置いてあるフォルダのパス\auc\" ' = スクリプトと同じフォルダ

Dim WHSHell, oExec, Fs
Set WSHShell = WScript.CreateObject("WScript.Shell")
Set Fs = CreateObject("Scripting.FileSystemObject")

Function Auc(command, arg)
  Auc = WSHShell.Run("""" & AUC_FOLDER & "auc_" & command & ".exe"" " & arg, 2, True)
End Function

Dim i, tmp, tmpm2v, tmpwav, tmpgl, output, pid, hwnd

' AviUtlを起動
hwnd = Auc("exec", """" & AVIUTL_PATH & """")
If hwnd = 0 Then
  Call WScript.Quit(-1)
End if

For i=0 to Args.Count - 1
  tmp = TMP_FOLDER & Fs.GetBaseName(Args(i))
  tmpts = tmp & ".ts"
  output = OUTPUT_FOLDER & Fs.GetBaseName(Args(i)) & OUTPUT_EXT

  ' TSファイルを開く
  Call Auc("open", CStr(hwnd) & " """ & tmpts & """")
  Call WScript.Sleep(3000)

  ' プロファイルを設定する
  Call Auc("setprof", CStr(hwnd) & " " & CStr(OUTPUT_PROFILE))
  Call WScript.Sleep(3000)
 
  ' 出力プラグインから出力する
  Call Auc("plugout", CStr(hwnd) & " " & CStr(OUTPUT_PLUGIN) & " """ & output & """")

  ' 出力するまで待機する
  Call Auc("wait", CStr(hwnd))
  Call WScript.Sleep(3000)

  ' ファイルを閉じる
  Call Auc("close", CStr(hwnd))
 
Next

' スクリプトで起動したAviUtlを終了する
Call Auc("exit", CStr(hwnd))

プロファイル番号は一番上が0なので好きなプロファイルを設定してください。
同様に出力プラグインも選びます。もちろんQSV出力の番号を設定します。
わからなかったら上のリンクが詳しいので見てください。

青いところは必要ファイルの設定箇所なので指定してください。
自分はAviUtl Controlのフォルダはaviutl.exeと同じ所に置いています。
なお、テンポラリパスはエンコードファイルと同一のフォルダをエンコード毎に設定してください。
そうでないとなぜかファイルを読み込めないエラーが発生します。出来ればD&Dだけだと良いのですが・・・
またファイル名によってはエンコードできないものもあり、その場合そのファイルでエンコードが止まってしまいます。
そうなったら簡単なファイル名にすればエンコードできるようになると思います。

流れとしましては、VBSファイルにTSを投げ込むと、
TSファイルを開く→プロファイル読み込み→QSV出力の選択→エンコード→aviutlの終了と言う流れになります。
ファイル名は元のTSと同じものなります。
一つでも、1クール丸ごとでもエンコードできるのでそこそこ便利なのかなと思います。
QSV出力はGUIの方で現在設定してあるものが使われるようです。

出来ればtvrockのコマンドに書いて、録画終わったら自動的にエンコードしてくれるといいんですけどね。
まぁそれは時間があったらやれたらなーと思います。

おわりに
自分は1280x720にリサイズするつもりでしたがインターレース解除しないので、
その状態でエンコードしてしまうと常に縞々出てしまうリサイズなようです。(正しいリサイズ方法もあるようです。)
なのでリサイズはせずにSARは4:3でエンコードしています。(リサイズすると音がおかしくなる問題もあるので)
インターレース解除やフィルタはプレーヤーでやってしまった方が面倒臭くなくていいでしょう。

エンコードするとどれだけ容量などの節約ができるか一覧にしてみました。
3TBHDD(実用量2.7TB、9999円).TS保存.mp4(QSV出力)
地上波アニメ1話(約30分)平均2.4GB平均0.8GB(±0.2)
1本1クール(12話)28.8GB9.6GB(3分の1に近い容量の節約!)
録画可能本数93本(1116話)281本(3372話)
1クール15本録画の場合6クール(1年半)18クール(4年半)
1作品当たりの録画コスト108円36円

前回に書いたスペック、エンコード設定であれば1話8分程度で終了します。
実際にはもっと多くなったり少なくなったりすると思いますが、大体こんな感じです。
4年もあればHDDの寿命に近く取り替える時期だと思うのちょうど良さそうな感じです。
4TBともなれば、1本当たり10円以下になりそうなので容量はもっと増えて欲しいですね。

QSVは、まぁリサイズしてないので分かり難いのですが、かなり画質が良いと言うわけではないようなので、
手早く、そこそこ良い画質で、容量を抑えたい人には良い感じなのかなと思います。
ではでは
関連記事
スポンサーリンク

| エンコード | 17:40 | comments:0 | trackbacks:0 | TOP↑















非公開コメント

http://higitune.blog106.fc2.com/tb.php/95-ef530a08

PREV | PAGE-SELECT | NEXT