2013年03月17日

MediaCoderの音ズレ、ついに解決&全自動化

これでついに「録画サーバ完成」と言えるかもしれない。
長いこと懸案だった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のテロップがカクカクとスクロールするのを見ると幻滅してしまう。



タグ:録画サーバ
posted by frogie at 16:30 | Comment(8) | TrackBack(0) | 録画サーバ | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
はじめまして。
googleからmediacoderdeで検索してたどり着きました。

タイトルに全自動化とありますが、3つのソフトをつかってどのように自動化してるか教えてもらえませんか。

よろしくお願いします。
Posted by 初心者 at 2013年05月01日 00:20
こんにちは。自動化の概要は以下の通りです。
まず、記事にも書いた通り、以下の3つの処理を行うコマンドを用意します。

・TSsplitterにて余計なデータを削除
・CCiConvにて先頭GOPの削除
・MediaCoderにてH.264(mp4)形式にエンコード(解像度保持、インターレース保持)

これらの処理を連続して行えるようバッチとして作成し、そのバッチをtvrockのプロセスに登録します。
こうすることで、tvrockで録画終了後、自動的にバッチが呼び出され、エンコードまで完了させることができます。

これでわかりますかね?
やることは上記の通り単純な話ですが、凝り出すと、エンコード後、タイトル別にフォルダ分けしたり、特定のタイトルはエンコードパラメータを変えたり、キーワードマッチしないものは、エンコードしない、といったことまで組み込んでしまうんですねw
書き出すと長くなるので、記事ではエッセンスだけに留めてました。
ご要望があれば、これら情報も掲載していきたいと思います。
ただこのあたりになるとバッチでは面倒なので、スクリプトで組んでます。(JScript)

Posted by frogie at 2013年05月01日 11:12
早急なご返答ありがとうございます。
3つのプロセスをバッチとして作成すればよいのですね。
バッチやスクリプトを作成したことがないため、そこから勉強してみます。

>エンコード後、タイトル別にフォルダ分けしたり、特定のタイトルはエンコードパラメータを変えたり、キーワードマッチしないものは、エンコードしない、といったこと

ここまで全自動化できるなんてすごいですね!
このやり方の記事お願いしてもよろしいでしょうか。
よろしくお願いします!
Posted by 初心者 at 2013年05月01日 12:20
自分の場合ffmpegなんですが、先頭の不完全なGOP除去についてあれこれ調べているうちにここにたどり着きました
二週間ほど遅かったようで、cciconvが手に入らなくなってますね…

Posted by at 2013年08月30日 17:38
確かにダウンロード先のリンクが死んでますね。
cciconv2.4.zip で検索するとまだみつけられるようです。
自分が入手したものを渡せればいいのですが、そんなわけにもいかないので、一応、自分の入手したcciconv2.4.zip のMD5値を貼っておきます。
MD5:60c74592352150aaf27b938fa1a268ac
ご参考までに。
Posted by frogie at 2013年08月31日 11:02
WebArchiveにcciconv2.4.zipのキャッシュが保存されてました。

http://web.archive.org/web/20131228030958/http://bdindex.allalla.com/BD/cciconv/
Posted by 通りがかり at 2014年08月12日 23:44
大変貴重な情報をありがとうございます。
そんなアーカイブがあるんですね!
既にcciconv2.4.zip は検索してもほとんどヒットしないようなので、探している方は助かると思います。
Posted by frogie at 2014年08月13日 11:56
先頭GOPを削除するなら「-er」は不要ですね。
と言うより、これを付けると
-e 字幕データパケットを削除します。
-r データ放送パケットを削除します。
が働いてしまいますから、先頭GOPを削除する以上のことを
行ってしまいます。
実はここの説明のままに先頭GOPを削除するつもりで実行したために
字幕がなくなってしまいました。!!!

Posted by sam at 2021年01月05日 21:59
   
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック