長いこと懸案だったtsの先頭GOP削除が自動で行えるようになったことで、音ズレの解消と、録画からエンコードまでの全ての処理を、完全自動で行えるようになった。
それにしてもここまでたどり着くのは長かった。。。。
これまでどれだけ無駄な時間を費やしてきたことか。。。。
録画サーバを構築した当初、PT2で予約録画したデータを全自動でエンコードまで行なっていたのだが、どうにもこうにも失敗が多くて困っていた。
うちでは以下の順番に自動で動作させるバッチを用意し、TvRockの録画終了後のプロセスとして実行させていた。
PT2 → TSsplitter → MediaCoder でmp4化
一応エンコードまで完了するんだけど、音ずれ、音なし、再生不可、といった失敗作が高頻度でできあがってしてしまう。
いろいろ調べてみたところ、TSファイルの先頭GOPが中途半端な形で残っていることが原因とわかる。しかもこの先頭GOPが完全である確率は1/15でしかない。
きっとこの成功1以外の14通りの壊れっぷりによってエンコードの出来具合が変わるのだろう。
実際、先頭GOPだけを削除してエンコードを行うと、音ずれすることなく確実にエンコードが成功する。
でもね、この先頭GOPだけを削除する方法ってのがGUIベースのツールしかなくって、バッチでの自動化ができず、大変に困っていた。
仕方ないので時間があるときにまとめて手動で処理してたんだけども、正直いつまでもこんなことやってられない。
そんな時、見つけたのですよ、先頭のGOPをバッチで削除する手段を!
ずばり、cciconvというコマンドラインツール を使う。
このツールには次のような機能があるんですね。
「ファイルの先頭から、指定した整数個分の映像GOPを削除します。」
これこれ、これだよ、ずっと探し求めていた機能は!!
コマンドラインツールなので、バッチ処理にて先頭GOPの削除を自動化できる!
先頭GOP削除は本来のこのツールのメインの使い道ではないのかもしれないけど、使える機能は使わせていただきましょう、ということで。作者様に感謝!
cciconvは以下からダウンロードできる。
cciconv
http://ysk.orz.hm/BD/cciconv/
これの中の最新版をダウンロードし、その中のcciconv188.exe を使う。
ちなみに188はts用、192はm2ts用。
これを使って先頭GOPを削除させるようにした結果、エンコードが極めて安定して成功するようになった。
以下、備忘録を兼ねてバッチ処理のメモを。
それぞれのコマンドをまとめて1つのバッチとして運用中。
TSsplitter (Ver. 1.26)
冒頭のCM削除、1セグ削除
TsSplitter.exe -ECM -1SEG -SD -SEP TSファイル名
cciconv (Ver. 2.4)
TSsplitter処理後のTSから先頭GOPを削除
cciconv188.exe -er -c 0 TSファイル名 出力ファイル名
引数の-c 0 の0ってのは先頭GOP削除の意味
MediaCoder (Ver. 0.8.17 Build 5302)
cciconv処理後のTSをエンコード
mediacoder.exe -start -exit -preset プリセットファイル名 tsファイル名
以上。
ちなみに以前記事に書いたMediaConverterはもう使ってまへん。
MediaConverterだとインターレース保持エンコードができないので。
今使ってるMediaCoderはインターレース保持エンコードができるのでお気に入り。(名前似ててまぎらわしい)
インターレース保持の60iは疑似60フレームとはいえ、インターレースを解除して30pになってしまったガチ30フレームよりも圧倒的に映像がスムーズなので、個人的にはインターレース保持は必須だったりしまする。
30pのテロップがカクカクとスクロールするのを見ると幻滅してしまう。
タグ:録画サーバ
googleからmediacoderdeで検索してたどり着きました。
タイトルに全自動化とありますが、3つのソフトをつかってどのように自動化してるか教えてもらえませんか。
よろしくお願いします。
まず、記事にも書いた通り、以下の3つの処理を行うコマンドを用意します。
・TSsplitterにて余計なデータを削除
・CCiConvにて先頭GOPの削除
・MediaCoderにてH.264(mp4)形式にエンコード(解像度保持、インターレース保持)
これらの処理を連続して行えるようバッチとして作成し、そのバッチをtvrockのプロセスに登録します。
こうすることで、tvrockで録画終了後、自動的にバッチが呼び出され、エンコードまで完了させることができます。
これでわかりますかね?
やることは上記の通り単純な話ですが、凝り出すと、エンコード後、タイトル別にフォルダ分けしたり、特定のタイトルはエンコードパラメータを変えたり、キーワードマッチしないものは、エンコードしない、といったことまで組み込んでしまうんですねw
書き出すと長くなるので、記事ではエッセンスだけに留めてました。
ご要望があれば、これら情報も掲載していきたいと思います。
ただこのあたりになるとバッチでは面倒なので、スクリプトで組んでます。(JScript)
3つのプロセスをバッチとして作成すればよいのですね。
バッチやスクリプトを作成したことがないため、そこから勉強してみます。
>エンコード後、タイトル別にフォルダ分けしたり、特定のタイトルはエンコードパラメータを変えたり、キーワードマッチしないものは、エンコードしない、といったこと
ここまで全自動化できるなんてすごいですね!
このやり方の記事お願いしてもよろしいでしょうか。
よろしくお願いします!
二週間ほど遅かったようで、cciconvが手に入らなくなってますね…
cciconv2.4.zip で検索するとまだみつけられるようです。
自分が入手したものを渡せればいいのですが、そんなわけにもいかないので、一応、自分の入手したcciconv2.4.zip のMD5値を貼っておきます。
MD5:60c74592352150aaf27b938fa1a268ac
ご参考までに。
http://web.archive.org/web/20131228030958/http://bdindex.allalla.com/BD/cciconv/
そんなアーカイブがあるんですね!
既にcciconv2.4.zip は検索してもほとんどヒットしないようなので、探している方は助かると思います。
と言うより、これを付けると
-e 字幕データパケットを削除します。
-r データ放送パケットを削除します。
が働いてしまいますから、先頭GOPを削除する以上のことを
行ってしまいます。
実はここの説明のままに先頭GOPを削除するつもりで実行したために
字幕がなくなってしまいました。!!!