2015年7月18日土曜日

TSファイルをMP4に変換する方法(中級者向け)

以前、TSファイルをMP4に変換する簡単な方法 二重音声も対応という記事を書いた所、意外に需要があったため、今回はやや画質、音質に拘った変換方法を書いてみる。

具体的には、TSSplitterで不要な情報をカット→改良したFFMpegで変換をV-autoEncoderを使用して自動的に行う。

詳細
FFmpegのAACエンコードはFDK-AACが優れているようなのだが、そのままでは使えない。
ソースコードを入手して自力でビルドする必要があるが、それも大変だしなんかうまく行かなかったなので 、オレ流FFmpegビルドツールWEBというソフトを用いて簡単にビルドする。

このツールは最新ソースコードを取り入れてFFMpegを半自動でビルドしてくれるというもの。使い方は作者様のサイトが分かりやすいため読んでください。

オレ流FFmpegビルドツールWEB
http://www.sakura-zaka.net/ffmpeg/
このサイトのダウンロードのページから順番に読み進める

上記ツールでビルドしたffmpeg.exeを任意のフォルダに配置し、続いてFFmpegのプリセットを作成し保存する。(下記のコマンドをメモ帳にコピペしてlibx264.ffpresetという名前で保存する。)
level=41
coder=1
flags=+loop
cmp=+chroma
partitions=+parti8x8+parti4x4+partp8x8+partb8x8
me_method=umh
subq=7
me_range=16
g=250
keyint_min=25
sc_threshold=40
i_qfactor=0.71
b_strategy=1
qmin=10
rc_eq='blurCplx^(1-qComp)'
bf=16
bidir_refine=1
refs=6

次にTSSplitterを入手して任意のフォルダに配置
http://www3.wazoku.net/2sen/dtvup/source/up0797.zip

そしてV-autoEncoderを入手。
http://www3.wazoku.net/2sen/dtvup/source/up0392.zip

V-autoEncoderは、コマンドラインでいろいろな処理を自動的に処理するためのプログラム。
コマンドプロンプトでのバッチファイルより柔軟な使い方ができる。
V-autoEncoderは、
[P1Application]
実行プログラム
[P1Dir]
ファイルが出力されるフォルダ
[P1Arguments]
プログラムに渡す引数
[P1SearchPattern]
出力されたファイル名の検索パターン
[P1SearchMethod]
出力されたファイルの検索方法
の構文からなる。が、ここで詳しい仕様方法を解説すると大変なため、今回はTSを音ズレなしで、簡単かつ確実にある程度の画質、音質でエンコードする事を主眼として解説する。
要は以下の設定ファイルをコピペして改変して使って欲しい。

下記コマンドをメモ帳にコピペして編集した上で、V-autoEncoder.exeと同じ場所にTSh264.cfgというファイル名で保存する。(の部分だけ変える。他は分からなければ変えない)
[RenameInputFile]
YES

[P1Application]
'TSSplitter.exeの場所
'例:C:\Program Files\TsSplitter\TsSplitter.exe
[P1Dir]
'TsSplitter.exeによる一時出力先
'例:C:\ProgramData\TsSplitter
[P1Arguments]
"%Input%" -SD -1SEG -OUT "%P1Dir%" -BUFF 512 -SEP -OVL5,7,0 -SEPA -WAIT2,1
[P1SearchPattern]
%InputName%*.ts
[P1SearchMethod]
Largest

[P2Application]
'ffmpeg.exeの場所
'例:C:\Program Files\ffmpeg\ffmpeg.exe
[P2Dir]
'変換したMP4ファイルの保存先
'例:C:\Users\user\videos
[P2Arguments]
-dual_mono_mode main -i "%P1Output%" -vcodec libx264 -s 1280x720 -aspect 16:9 -crf 25 -fpre "libx264.ffpresetの場所(例:C:\Program Files\ffmpeg\libx264.ffpreset)" -acodec libfdk_aac -vbr 2 -ac 2 -vol 384 -vf yadif -f mp4 "%P2Dir%\%InputName%.mp4"
[P2SearchPattern]
%InputName%.mp4
[P2SearchMethod]

[P1DeleteTemporalFiles]
yes
[P2DeleteTemporalFiles]
上記のコマンドを設定して保存したら、最後に実行するためのバッチファイルを作る

下記コマンドをコピペしてエンコード.batという名前で保存
@echo off
setlocal enableextensions
:repeat
start V-AutoEncoder.exeの場所(例:C:\Program Files\V-AutoEncoder\V-AutoEncoder.exe) -input %1 -settings "TSh264.cfg" -queue
if "%~2"=="" goto end
shift
goto repeat
:end
exit
あとは エンコード.batに、録画したTSデータをドラッグアンドドロップで持っていけば勝手に変換が開始される。(複数一気にドロップ可能)

やや注意する点として、 ドロップするTSファイルのファイル名もしくはフォルダ名のどこかに半角スペースが入ってないと不具合が出ることがある。
なのでTSファイルを保存するフォルダに半角スペースを入れておくとよい。例:"PT2 TS"など。

参考:
オレ流FFmpegビルドツールWEB(作者様のページ)
http://www.sakura-zaka.net/ffmpeg/
塵も積ればほこりと成る(V-autoEncoder作者様のページ)
http://ahnan.blog.fc2.com/