#navbar #Navbar1 iframe{ height:0px; display:none; visibility:hidden; }

2009年9月19日土曜日

iPhoneで地デジ録画ファイルを見る

2年前からためている生TSのファイルが、HDを圧迫し始めたので、iPhone視聴用にエンコーディングすることにしました。今回は、TSファイルからの一括処理を念頭に、すべての処理をバッチファイルで行うことを目標としています。たぶん、もっと効率的な方法があるかと思いますが、現状では、今回構築した環境に満足しています。

■レシピ
今回は、以下のような環境の実現を目標としています。
  • すべての処理をCLI(コマンドベースの操作)で実現
  • TS → 音声分離 → MP4エンコードまでを自動実行
  • 最終的に、tvrockの「バッチ実行」に登録することにより、録画からコンコードまでを自動的に行う
  • 自動実行を主目的とするため、CMカットなどは行わない
  • 上記目的により、多少の音ずれは目をつぶる
■使用したもの

BonTsDemux
TSファイルを音声データ(WAVファイルと動画データ(M2Vファイル)に分離する
Aviutl
WAVファイルとM2Vファイル)を元に、iPhoneで再生できるmp4ファイルを作成する
AviUtl Control
本来GUIのAviutlをCLIで操作するためのツール

■作業手順
  1. BonTsDemuxのインストール
  2. FFmpegの最新化
  3. Aviutlのインストールとx264 出力(GUI)の導入
  4. Aviutlの設定
  5. x264 出力(GUI)の設定
  6. AviUtl Control のインストール
  7. 自動実行バッチファイルの作成
  8. 動作確認
  9. tvrockへの登録
■BonTsDemuxのインストール
BonTsDemux mod 10k..の最新版をインストールします。私は、以下のサイトから、「BonTsDemux mod 10k6」をインストールしました。インストールは、入手したzipファイルを解凍するのみです。なお、BonTsDemuxは、必ず「BonTsDemux mod 10k..」(mod 10k..が付いたもの)をインストールしてください。

http://2sen.dip.jp/cgi-bin/friioup/upload.cgi?page=0&lm=200

■FFmpegの最新化
BonTsDemuxに入っているFFmpegを、最新のものに入れ換えます。以下のサイトに、最新版のFFmpegが公開されていますので、それをダウンロードし、BonTsDemuxフォルダ内にもともと入っているFFmpegと置き換えてください。オリジナルのFFmpegは削除して頂いて結構です。

http://blog.k-tai-douga.com/article/27740481.html


■Aviutlのインストールとx264 出力(GUI)の導入
エンコーディング処理を行う、「Aviutl」とAviutlにx264エンコーディング機能を追加するx264出力(GUI)を導入します。なお、aviutlのインストールとx264 出力(GUI)の導入方法については、以下のサイトを参考にさせて頂きました。


http://spring-fragrance.mints.ne.jp/aviutl/

<参考にさせて頂いたサイト>

http://www.katch.ne.jp/~kakonacl/douga/aviutl_tmpgenc/x264.html


■Aviutlの設定

Aviutの以下の設定を変更します。

  • システム設定の変更
  • 出力サイズの変更
  • 入力プラグインの優先度の設定
<システム設定の変更>
Aviutlのシステム設定の中で、以下の項目を変更します。


最大画像サイズ
ハイビジョンの規格である1920 x 1080にします
最大フレーム数
初期値では、長時間番組なのでは、最大フレーム数をオーバしましたので、初期値の4倍ほどの値に変更しました。
リサイズ設定の解像度リスト
iPhoneに合わせて、480x272を追加しました

以下、システム設定画面の表示方法と設定例です。


システム設定画面の表示方法



定例


<出力サイズの変更>
出力サイズをiPhoneに合わせて、「480x272」に変更します。以下、


<入力プラグインの優先度の設定>
入力プラグインの「MPEG-2 VIDEO File Reader」の優先度を最上位に設定します。
以下、入力プラグインの優先度設定画面の表示方法と設定例です。

入力プラグインの優先度設定画面




◆設定例



■x264 出力(GUI)の設定
x264 出力(GUI)の設定を、iPhoneに合わせて変更します。変更は、以下のサイトを参考にさせて頂きました。

<参考にさせて頂いたサイト>

http://d.hatena.ne.jp/coldcup/20090227/p1

以下、
x264 出力(GUI)の設定画面の表示方法です。
Aviutlで動画ファイルを開きます。動画ファイルは、Aviutlが処理できるものであれば、何でも結構です。



メニューから、[ファイル]-[プラグイン出力]-[プラグイン出力]-[拡張x264 出力(GUI)]を選択します。



メニュー選択後表示されるウィンドウで「ビデオ圧縮」ボタンをクリックします。



表示されるウィンドウで、拡張x264 出力(GUI)の設定を変更します。



■AviUtl Control のインストール
AviUtl Controlをインストールは、以下のサイトからダウンロードすることができます。インストールは、入手したzipファイルを解凍するのみです

<
AviUtl Controlのダウンロードサイト>

http://www.geocities.jp/aji_0/


■自動実行バッチファイルの作成
TS → 音声分離 → MP4エンコードまでを自動実行するバッチを作成します。
私は、以下のような内容のバッチファイルを作成しました。なお、下記の例は、以下の環境を想定しています。

バッチファイル名:auc4.bat
BonTsDemuxののフルパスc:\eguchi\BonTsDemux2\bontsdemux.exe
Aviutlのフルパス:c:\eguchi\aviutl99h4\aviutl.exe
AviUtl Controlの格納ディレクトリのフルパス:c:\eguchi\auc


REM @echo off

REM ******************************************************
REM TS → MP4変換バッチ
REM
REM ■実行方法
REM auc4.bat "TSファイルのフルパス" (ファイル名が「
auc4.bat」の場合)
REM *******************************************************

REM *******************************************************
REM ■変数
REM 環境に合わせて以下を設定してください。
REM
REM BTD=BonTsDemuxのフルパス
REM AVU=Aviutlのフルパス
REM AUC_DIR=AviUtl Controlの格納ディレクトリのフルパス

@set BTD=c:\eguchi\BonTsDemux2\bontsdemux.exe
@set AVU=c:\eguchi\aviutl99h4\aviutl.exe
@set AUC_DIR=c:\eguchi\auc

REM ****************************************************

echo "Start Operation"

@set TS_FILE_NAME=%~1
@set DREIVE=%~d1
@set PATH_NAME=%~p1
@set NAME=%~n1
@set FILE_NAME=%DREIVE%%PATH_NAME%%NAME%
echo
echo %TS_FILE_NAME%
echo %FILE_NAME%

@if not exist "%TS_FILE_NAME%" goto END
ping localhost -n 15 > null
echo "TS OK!"

REM echo "mp4 files exist check"
@if exist "%FILE_NAME%.mp4" goto END

REM echo "Start Demux(m2v+wav)"
@if not exist "%FILE_NAME%.m2v" %BTD% -i "%TS_FILE_NAME%" -encode "Demux(m2v+wav)" -delay 167 -nd -start -quit

:READ_WAIT2
@if not exist "%FILE_NAME%.m2v" goto READ_WAIT2
ping localhost -n 15 > null
echo "M2V OK!"

:READ_WAIT3
@if not exist "%FILE_NAME%.wav" goto READ_WAIT3
ping localhost -n 15 > null
echo "WAV OK!"

echo "Start AU"
for /f "usebackq tokens=*" %%i in (`call %AUC_DIR%\auc_exec %AVU%`) do @set WIN_NUM=%%i
echo "Window NUMBER==%WIN_NUM%"

call %AUC_DIR%\auc_open %WIN_NUM% "%FILE_NAME%.m2v"
ping localhost -n 15 > null

echo "Make gl file"
:READ_WAIT4
@if not exist "%FILE_NAME%.gl" goto READ_WAIT4
ping localhost -n 15 > null

echo "add wave file"
call %AUC_DIR%\auc_audioadd %WIN_NUM% "%FILE_NAME%.wav"
ping localhost -n 15 > null

echo "Make mp4 file"
call %AUC_DIR%\auc_plugout %WIN_NUM% 1 "%FILE_NAME%.mp4"

%AUC_DIR%\auc_wait %WIN_NUM%
ping localhost -n 15 > null

echo "Complete all Operation"
%AUC_DIR%\auc_exit %WIN_NUM%

:END


■動作確認

以下のように作成したバッチファイルを実行し、mp4ファイルが作成されることを確認します。
なお、下記の例は、バッチファイルのフルパスが「
c:\eguchi\bat\auc4.bat」の場合の例です。


c:\eguchi\bat\auc4.bat "TSファイルのフルパス"

tvrockへの登録
作成したバッチファイルを、TvRockで自動実行させます。TvRockの設定→プロセスタブ「コマンドを実行する」にチェックを入れ、次を追加します。なお、下記の例は、バッチファイルのフルパスが「c:\eguchi\bat\auc4.bat」の場合の例です。

TN:c:\eguchi\bat\auc4.bat "TSファイルのフルパス"

設定例を以下に示します。


★★ おまけ ★★
これまで、溜まりにたまったTSファイルを、フォルダごと一括エンコードするために、以下のバッチを作成しました。上記で作成した自動エンコード用バッチを使用して、指定したフォルダ内のTSファイルを一括エンコードします。なお、下記の例は、既出の自動エンコード用バッチファイルのフルパスが「c:\eguchi\bat\auc4.bat」の場合の例です。

@echo off

REM 引数=コンバート対象ディレクトリ名(最後の\なし)

echo "---------------------------------------------------"
echo "対象ファイル"
echo "---------------------------------------------------"
for %%i in (%1\*.ts) do @echo "%%i"

echo "---------------------------------------------------"
echo "エンコード処理スタート"
echo "---------------------------------------------------"
for %%i in (%1\*.ts) do call C:\eguchi\bat\auc4.bat "%%i"



使い方は、以下のとおりです。なお、下記の例は、上記一括エンコード用バッチファイルのフルパスが「c:\eguchi\bat\ts2mp4_dir.bat」、TSファイル群の格納フォルダが、「c:\tsfolder」の場合の例です。

c:\eguchi\bat\ts2mp4_dir.bat c:\tsfolder


■今後の課題
現状でも、おおよそ満足してはいるのですが、可能であれば、今後以下のことを実現したいと思っています。
  • 特にNHKの長時間番組で音づれが発生するので、これを解消したい
  • TVRockからの自動実行が、エンコードの最中に停止する場合がある。そのため、現状ではTVRockからの自動実行と「おまけ」で記載した一括処理バッチを併用している。可能であれば、TVRockからの自動実行に統一した。
  • CMカット
など