Handbrake で TS ファイルの温存用適当エンコメモ

この記事は約6分で読めます。
本記事は最終更新日より 1 年以上経過しております。
スポンサーリンク

 普段アニメをいっぱい予約録画しているが、「これはまた見たいからエンコしておこう」と言う物は Avisynth 経由の x264 エンコをしている。「また見るか分からないけど消すのもなんかな~~」と言う物はそのまま TS ファイルで放置をしていた。
 TS ファイルを DGIndex やらで動画と音声の分離をして、avspmod で CM カットやら編集し、Trim してエンコードはなどと、バッチファイルで手順化しているけど、それでも全部やっていたら面倒過ぎる。もっと簡単に手順を減らして「温存用」にサイズを小さく出来ない物かと、今回手を出したのが Handbrake だ。

HandBrake: Open Source Video Transcoder
HandBrake is an open-source, GPL-licensed, multiplatform, multithreaded video transcoder.

 Handbrake は x264 でエンコした動画と、AAC なりでエンコした音声を MP4 のコンテナに放り込んでくれる便利なソフト。いちいち分離して各々でエンコして mp4box でコンテナに収めると言った手順を自動でやってくれる。
 これなら入力ファイル名と出力ファイル名を指定してやればぼんぼん「適当エンコ」が出来る。後から再度編集する事は全く考えてない番組用になる。

 実際に処理する上で、ポチっと直ぐ実行したいので GUI 版はちょっと面倒。CUI 版でエンコードオプションを試行錯誤しつつ、自分なりに行き着いたのが次の物。

HandBrakeCLI.exe -i "エンコするTSファイル名" -o "エンコ後のファイル名.mp4" -f mp4 -e x264 --x264-preset=medium --x264-tune=animation --h264-profile=high --h264-level="4.1" -q 21 -r auto --vfr -a 1 -E fdk_aac -6 auto -R auto -w 1280 -l 720 --crop 0:0:0:0 --decomb --detelecine -P

 目的はファイルサイズを小さくする事。画質は拘らないけどカクカクしたり変な縞がでるのは嫌。MP4 で。と言う物。
 ”-f” で mp4 形式を指定。動画サイズは 720p とする。decomb で縞が出ないようにしつつ detelecine をするんだけど vfr で FPS は可変にする。画質は -q 21 としているが、よりビットレートを上げたければ数値を小さくしていく。
 ”-P” は OpenCL を有効にするオプションで A10-6800K マシン上だから折角だし使おうと、Nightly Builds から拾ってきた奴で使用出来た。
* 2014/01/21 追記
 Nightly では -E オプションの faac は存在しないので、自動的に av_aac が適用される。その場合、fdk_aac を指定した方が良い場合が多い。
 また、「-a 0」とか意味不明だったんで「-a 1」に修正した。ターゲットは TS ファイルのアニメに絞っているので Audio Track は 1 で問題ないはず。
—– 2014/01/21 追記ここまで —–

 上記オプションで 30 分アニメをエンコードすると、定格動作の A10-6800K で 22fps 前後は出てくれるので片手間にエンコ出来るからお手軽だ。
 今後は TS ファイルをドラッグ & ドロップしてやれば同じファイル名の MP4 へ出来る様にバッチファイルを作って見よう。

2013/12/10 追記
 とりあえずバッチファイルを作って見た。引数に TS ファイルを渡せば「渡したファイル名.mp4」にしてくれる単純な物。もう少し作りを変えればフォルダ内の TS ファイルを全てエンコードだとかも出来るはず。

@echo off
:: プログラムパスとオプションの定義
set HB="HandBrakeCLI.exe への絶対パス"
set OPT=-f mp4 -e x264 --x264-preset=medium --x264-tune=animation --h264-profile=high --h264-level="4.1" -q 21 -r auto --vfr -a 0 -E faac -6 auto -R auto -w 1280 -l 720 --crop 0:0:0:0 --decomb --detelecine

:: 出力パス
set TSTMP="出力先のパス"

if /i not "%~x1"==".ts" goto error

%HB% %OPT% -i %1 -o "%TSTMP%\%~n1.mp4"

goto end

:error
echo "Input file error %1"

:end

 実際に使うときはこのバッチファイルに TS ファイルを D&D してやるだけで毎回同じオプションでバンバンエンコ出来る。
 エンコード後の動画をみるとやはりというか、字幕やらの細い横線がちらついたりしているので保存用はきっちり Avisynth でフィルター噛ましてエンコした方が良いかもしれない。

2014/01/16 追記
 複数ある TS ファイルをまとめてエンコード出来る様、更にバッチファイルを作った。
 仕組みとしては、エンコードするファイルのフルパスを記述したテキストファイルを読み込み、順次上で作ったバッチファイルに投げるだけと言う至極単純な物だ。

@echo off
set QUE=ファイル名を記述したテキストファイルへのパス

for /f "delims=" %%f in (%QUE%) do (
    TS2MP4.BAT "%%f"
)

 2013/12/10 追記分のバッチファイルと同じパスに置いておく使い方をしているので、そのままにしてある。
 ファイル名を記述したテキストファイルの内容は、1 行に 1 つ TS ファイルへのフルパスを記述すれば良い。手っ取り早い方法は、エクスプローラーでまとめてエンコしたい TS ファイルを選択し「SHIFT キーを押しながら右クリック。出てくるメニューからパスをコピー」とすれば良い。適当なテキストエディタにペーストすれば 1 行ずつファイルへのフルパスが出力される。それを保存した物を QUE とする。
 寝ている間に適当エンコが終わっているので、時間を有効に使えて良い感じに。

 2014/06/03 追記
 QUE ファイル内に記述するファイル名を追加するとき、エクスプローラーから追加したいファイル名を選択し、SHIFT キーを押しながら右クリックをしてから「パスのコピー」を行ってテキストエディタなどにペーストすると、全てダブルクォーテーションで囲われることを忘れていた。
 SHIFT キー + 右クリックから「パスのコピー」を行って QUE ファイルの記述を行う場合、バッチファイルは次の様にする必要がでてくる。

@echo off
set QUE=ファイル名を記述したテキストファイルへのパス

for /f "delims=" %%f in (%QUE%) do (
    TS2MP4.BAT %%f
)

 バッチファイルの引数をダブルクォーテーションで囲わない方法にする。

2015/11/29 追記
 Ruby で作った似たような物はこちら。

HandBrake の CLI 版を用いた簡単 TS ファイルエンコードスクリプト
 最近ちょっとばかり Ruby の勉強を始めた関係で x265 の他 HandBrake 用にもスクリプトを書いてみた。 今回の物は録画して転がっている TS ファイルをドラッグするだけで HandbrakeCLI.exe に突っ込んでく...
スポンサーリンク

コメント

  1. 為になる情報ありがとうございます!
    今日までHandBrakeのGUI版を使っていたのですが、CLI版を使うにあたって参考にさせてもらいました。

    上のバッチファイルは無事動くようになったのですが、下のバッチファイルはダブルクリックしてもすぐウィンドウが消えてしまうような状況なんです。

    Cドライブ直下にTS2MP4フォルダを作成し、上と下の2つのバッチファイルを置き、それからエンコードするファイルのフルパスを記述したテキストファイルを置いています。

    もしよろしければ初心者がつまづきそうなところを教えて下さるととてもうれしいです。

    • コメントありがとうございます!
       まず、バッチファイルを実行しても直ぐにウィンドウが消えてしまう状況となると、バッチファイル内に何らかのミスが存在すると思われます。
       一度、コマンドプロンプトを開いてから次の様に入力してエンターを押します。
       cd c:\TS2MP4
       これでカレントディレクトリがバッチファイル位置になりますので、2 つ目 (下の) のバッチファイル名を手打ちで入力してエンターを押します。こうすることで、なんらかのエラーが発生してもウィンドウが直ぐに閉じず、どの様なエラーが発生しているのかを確認することが出来ます。
       また、2 行目の「set QUE=」以降に指定するファイル名はダブルクォーテーションで囲われていたり、ファイル名に半角スペースが含まれるとエラーが出ます。この辺りは対策を考えていないのでご注意願います。

       他、修正点があったので記事へ追記をおこないました。
       またエラーが出て困ってしまった場合、お気軽にコメントしてください。

  2. ありがとうございます!

    >>バッチファイルの引数をダブルクォーテーションで囲わない方法にする。
    に従いまして、まずそちらの “” を削除し、それから返信にありましたように [set CUE=] 以降のファイル名にダブルクォーテーションで囲まれていたのを削除したところ動くようになりました!

    元々、この半年、GUI版ではエンコードを行いたい録画フォルダをドラッグアンドドロップにて読み込ませていたのですが、これだと仕上がりのPicture Sizeを1280×720などに指定する場合、自分が試した限り、そのあたりファイル毎に手打ちでやらないといけなくて、面倒なのでAnarmorphicをStrict (CroppingはCustomで0.0.0.0)とした上で録画フォルダをドラッグアンドドロップすればソースそのままのPicture Sizeの設定となり手抜きしていたのですが、このページのおかげで念願の720pの動画がCLI版でエンコードできるようになりました。

    感謝の気持ちでいっぱいです。

    ありがとうございました<__>

    •  無事に動作させることが出来た様でよかったです。
       当方としても、バッチファイルを動作させる際の条件説明に不備があったので、お手間取らせてしまいましたorz

       一度パラメータ弄って決め打ちしてしまえば確認する必要も無く、どのファイルも同様にエンコが出来るので CLI は便利ですね。

       こちらこそご丁寧にレスポンス頂けまして感謝です!

タイトルとURLをコピーしました