ブログタイトルとURLを変更しました。
言ってることが時間とともに変化しているのは勘弁して下さい。また、ブログの内容は全て個人の感想です。

2015年1月22日木曜日

logoGuilloがどう頑張っても動かない?→動くようになりました。

長くなったので結論を最初に
最初の段階から進まない人はavs2pipemod-20110919ではなくavs2pipemod-0.4.2を使いましょう。
恐らく動作するようになります。
Logoguilloはデフォルトのx64、その他は32bit用のままで動作します。
マシンスペックが思ったより要求されます。
LogoGuilloを使用してできたファイルからAviutlで実際にカットを行う方法は後述しました。
(下の方に赤字で書いてあります。)
ロゴデータはネット上で探せるもの、paramファイルは付属のもので平気です。
mx1-2.lgdを使っています。(入手先はこちら)
Aviutlを使って半自動CMカットをする場合、AviutlとLogoGuilloのTSを読み込むためのプラグインは同一のものを使用してください。Aviutlに適用する際に出てきたCMカットのTrim情報が全体に数フレームずれてしまいます。

作業環境はWindows7 64bitです。

以下の内容は作業時のメモなので読まなくて平気です。



自動でロゴ解析してCMカットするのを知って数年経ちました。
度々Logoguillo等を使用して試してみるもうまく行かず断念を繰り返してきました。
今回は1年ぶりくらいに再チャレンジしてみました。

まず、PC四台と仮想マシン環境の合計5台で試しましたが、そもそも何かしら動作が始まったのがその内の1台のみ。また、それも途中でエラーが出てしまう上、動作速度も異常に遅いので使えません。
Windows7 32bitおよび64bit、Windows8.1 32bitでハードウェア的な環境はバラバラです。
一台を除きVideo input & Pre filtering で止まってしまいます。

どうしたらいいんでしょう。
AviSynth 2.5.8 avs2pipemod.exe m2v.vfp warpsharp.dllも正しく配置、指定してあります。
logoGuilloはx86とx64両方で試しましたがどちらもダメでした。



10分ほどかもしくはかなり待つとエラーメッセージが出ます。

start timeout error
avs2yuv error message
avs2pipemod [error]: avs files return value is not a clip.
もしくは
Script error: there is no function named "LoadAviUtlInputPlugin"

検索しても原因が何もわからないです。まだまだ理解が足りていないようです。
新規にインストールした仮想マシンにおいてすら動作しないのは不思議です。

唯一動作するマシンの方では、30分のCMカット作業に1時間以上かかり、最終段階で止まってしまいます。
数分で完了するはずなのでそもそも動作がおかしいですが…
結局こちらのマシンも失敗を繰り返しているうちに動作しなくなりました。

完全に動く状態になっている組み合わせのLogoGuillo一式とAviSynthのプラグインが欲しいものです。

[Block summary]

prg 0 00:00:01.935
prg 1 00:00:09.510
prg 2 00:00:26.860

cm  b 00:19:16.355
cm  0 00:08:52.065
cm  1 00:00:49.816
cm  a 00:00:04.104

Total Block 3
Total Time  00:00:38.305

Valid Ratio  0.0215
Valid Sec   38 (Sec)

[Dynamic Threshold Control]
DTC was used.
prm1A = 10.474617

[Time required]
 53366 frame
1264.83 sec
 42.19 fps

バージョンを最新の2.10から2.07にしたところ再び動作しました。
20分ほどかかりましたが動作しているようです。どうやら成功したようです。
しかし、どこに.keyframeファイルが出力されたのかわかりません。
出力先フォルダにも見つかりません…

.txtで出力されているようですが、Aviutlでは読み込めません。
これでは使えません…

再度形式を変えて出力しようとおもいましたが、また動作しなくなりました。
AviSynthの64bit化やそれぞれの64bit版の使用もしましたが、試してみた限りダメそうでした。

作者様のページで推奨されていたavs2pipemod-20110919ではなくavs2pipemod-0.4.2にしてみたところ、今まで動作しなかったPCにおいて、途中までの動作が確認できました。
しかし今度はlogo not found となってしまいました。
ロゴデータとparamデータがうまくいってないようなので、自前でロゴを作成してみます。

先ほど20分もかかってしまっていたのはPCのスペックが低すぎたことによるみたいです。
新たに動作するようになったマシンの方がスペックが高く、より動作が早いようです。

正常に動作していれば、まず最初にGOPリストの作成が始まります。
始まらない場合は待っていても仕方ないので設定を見直しましょう。
どうやらavs2pipemodの入れ替えによって解決したようです。
説明通りにやっている人ほどハマる点かもしれません。

これだけのために丸一日かかってしまいましたがどうにか動作させることができました。

Paramファイルの作成は意外と時間かかります。
801秒かかりました。

CMカットに関しては3分で終了しました。



出力したファイルの使い方
AviutlでCMカットをし、出力してみます。

出来上がったtxtの中身と実際のCMのタイミングを比較してみましたが、場所によって10秒~20フレームほどのズレが生じていました。なかなか難しいようです。
txtファイルではどのみち使いようがないので、AVS形式で出力してみます。
これもこのままでは使用できませんが、こちらのサイト様からtrim_import.aufをダウンロードしてプラグインフォルダに入れてください。

Avisynth Script形式:入力動画と音声を本編のみ切出し、YUY2形式で出力するAVSファイルを出力します。AviUtl ver 0.99k以降ならCMカット済の動画ソースとしてそのまま開く事が出来ます。音声は動画と同一ディレクトリ内の"拡張子抜き入力動画ファイル名.wav"から読み込みます。

となっています。音声だけ分離したWAVがあれば読み込み可能かもしれません。

わざわざ音声を分離せずに出力可能なQSVEncを使用しているのでここのファイルは使いません。

作成したAVSファイルをダブルクリックもしくはメモ帳で開くと、中にTrimコマンドが書かれている箇所があります。
Trim(28,4044) ++ Trim(5384,28437) ++ Trim(30134,48149) ++ Trim(49900,50397) ++ Trim(52971,53093)
このままだとスペースが入っている関係で最初の区切りしか反映されません。
そのため、以下のように++の前後のスペースをなくしたものを作り、クリップボードにコピーします。
Trim(28,4044)++Trim(5384,28437)++Trim(30134,48149)++Trim(49900,50397)++Trim(52971,53093)
その状態でAviutlにてファイル、インポート、Trimを選択します。フレームを動かすと反映されて、CMがカットされた状態になります。

しかし、CMカットの精度が悪いので、このままエンコードしたくはありません。
付属のPARAMとダウンロードしてきたロゴデータは相性が悪いようでロゴが検出されず、エラーになってしまいます。けれど、自前のロゴデータは質が悪いようで、PARAMファイルもしっかり作成したもののあまりうまくいっていません。
そこで、ダウンロードしてきたロゴデータに、自前のTSとそれに合わせた自動調整用の参考フレームリストを作り、PARAMファイルを新しく作りなおしてみます。

…この方法はダメなようです。全くうまくいきません。
結局自前の方法で妥協することにしました。
ノイズが載っている部分はサンプルにしないようにしてロゴデータを作りなおしたところ、大幅なズレはなくなりました。(数秒のズレはあり)
ひとまずはこのくらいが限界のようです。



以下ロゴデータの作成と検証の結果です。

翌日改めてロゴデータを作成してみました。
アニメ1話を手動でCM部分をカットして閾値16にて全てロゴ解析に使用しました。約6000ほどのサンプル数でした。(使用したのはSHIROBAKO 15話です)

まず手動で弾きだしたフレームはこちらです。
Trim(61,6354)++Trim(8153,24455)++Trim(26255,48012)++Trim(49812,50320)

そして自分で作ったロゴ、及びPARAMを使用した結果がこちら
Trim(45,6338) ++ Trim(8137,24439) ++ Trim(26239,47996) ++ Trim(49660,50393) ++ Trim(52067,52191)

前半の全ての値が16少ないことがわかります。
Logoguillo側でフレーム番号にオフセットを16追加します。
その結果がこちら
Trim(61,6354) ++ Trim(8153,24455) ++ Trim(26255,48012) ++ Trim(49676,50409) ++ Trim(52083,52207)

最後の部分は必要ないので、ロゴが白飛びしたエンドカードを検出のチェックを外してみると次のようになりました。
Trim(61,6354) ++ Trim(8153,24455) ++ Trim(26255,48012) ++ Trim(49676,50409)

最後の予告の部分で多少余分なフレームが多少入ってしまっていますが、本編では全くズレがない結果となったのでよかったです。
これは、ロゴデータ、Paramデータを作成するに用いたTSファイルでの結果でした。

そこで、今度は別のファイルで試してみます。(ローリングガールズ 3話)

53,2749 6347,20282 22980,50312
という結果を期待していましたが、実際には

Trim(43,2759) ++ Trim(6357,20291) ++ Trim(22990,50411) ++ Trim(52077,52208) ++ Trim(52984,53107)

今度は目標より10程度大きな値でした。(オフセット無しを基準にすると6少ないということ)
これはあいだをとってオフセットは11くらいにしておくべきなのでしょうか?

続いて別のソースで行ってみました。(暁のヨナ 15話)オフセット無し
72,3847 5647,18323 20122,46075 47874,48533
に対して出来上がったものは
Trim(151,3836) ++ Trim(5562,18311) ++ Trim(20111,46064) ++ Trim(47863,48611) ++ Trim(50727,50858)

かなりズレが大きいです。
どうも調べていると試行錯誤の間は10程度ずれがあったが解消したという方もいるようなのでこれも解決できるはずです。

全てTOKYO MXでの試行です。ノイズが多いのでこのような結果になってしまっているのかもしれません。しかし、全体的に等しくずれが生じてしまっているのはどうにかしたいです。

改めてもう一度ロゴデータを作成してみます。
今度は3つの番組(SHIROBAKO ローリングガールズ 暁のヨナ)を読み込んで閾値14で取得しました。サンプル数は13000ほど取得出来ました。
ロゴを透過させてみて以前のものと比較して出来栄えの違いを確認してみましたが、あまり変化無いようです・・・結果に影響するのでしょうか。

アニメ3本から閾値14で作成したものを以下14と呼び、先ほどアニメ1本(SHIROBAKO)から閾値16で作成したものを以下16と呼びます。

14.lgdからは正常なparamが作成できませんでした。番組をまたいでいるため仕方ないようです。
そこで、Logoguilloに付属してきたMX.lgd.autoTune.paramと、16.paramを使います。

艦これで試してみました。

まず理想の値はこれです。
52 3704(4007) 5806 28402 30201 48153 49952 50098(50401)
※提供の表示の背景が真っ白だったため、検出に影響したようです。
カッコ前は提供手前までのフレーム数、カッコ内は提供後までのフレーム数

14.lgd  16.param
Trim(29,4014) ++ Trim(5391,28437) ++ Trim(30198,48149) ++ Trim(49930,50397)

16.lgd 16.param
Trim(29,4014) ++ Trim(5391,28437) ++ Trim(30198,48149) ++ Trim(49930,50397)

16.lgd MX.lgd.autoTune.param
Trim(29,4014) ++ Trim(5391,28437) ++ Trim(30198,48149) ++ Trim(49930,50397)

14.lgd MX.lgd.autoTune.param
Trim(49,3701) ++ Trim(5803,28399) ++ Trim(30198,48149) ++ Trim(49949,50095)

mx1-2.lgd MX.lgd.autoTune.param(入手先はこちら)
Trim(49,3701) ++ Trim(5803,28399) ++ Trim(30198,48149) ++ Trim(49949,50095)

最後のものだけ結果が変わりました。3フレームほどズレが生じています。
他のものでも同じであればオフセットで指定します。

続いてアブソリュート・デュオで試してみます。
理想は
66 4290 6090 24880 26679 46009 47808 48468(エンドカード含め48616)

16.param MX.lgd.autoTune.param
Trim(9,4274) ++ Trim(6023,24863) ++ Trim(26611,45992) ++ Trim(47772,48600)

14.lgd MX.lgd.autoTune.param
Trim(50,4274) ++ Trim(6074,24863) ++ Trim(26663,45992) ++ Trim(47792,48600)

mx1-2.lgd MX.lgd.autoTune.param(入手先はこちら)
Trim(50,4274) ++ Trim(6074,24863) ++ Trim(26663,45992) ++ Trim(47792,48451)

ネット上で探せるものを使用してみたところほぼ同じような結果になりました。
わざわざ作らなくても大丈夫だったようです。
しかし今度は16ずれてしまっています。
以前6ずれてしまっていたものは精度がわるいので微妙です。
精度が良い条件でもう一度試してみます。(ローリングガールズ)
53,2749 6347,20282 22980,50312
に対して
14.lgd MX.lgd.autoTune.param
Trim(47,2743) ++ Trim(6341,20275) ++ Trim(22974,50395)
相変わらず6か7不足している感じです。

念のためもう一つ確認しておきます。
ユリ熊嵐
63 6325 8125 22269 24069 46815

14.lgd MX.lgd.autoTune.param
Trim(56,3528) ++ Trim(4093,6318) ++ Trim(8190,22262) ++ Trim(24062,46807)

OP前およびOPの最初の方があまりにも右上が真っ白のままの時間があまりにも長いためその部分でCM扱いとなってしまったようです。また、Aパート開始地点も右上が白く、ズレが生じてしまいました。
その他の部分では7少ない結果になりました。

CMの検知のミスはほとんど無いといえる状態になっていますが、それぞれ全体的なズレが多く発生しています。
確認できた限りではどれも数値が不足しているため、オフセットで多少マシにできそうです。
3,6,7,16のズレが発生しているようなので間の8辺りをオフセットにしておくのが無難かもしれません。

ファイルの読み出し方に関係があるのかなとも思い、m2v,vfpからffms2.dll(2.17)に変えてみました。
ここからは全てmx1-2.lgdもしくは14.lgd+MX.lgd.autoTune.paramで確認しています。
艦これ
52 3704(4007) 5806 28402 30201 48153 49952 50098(50401)
m2v
Trim(49,3701) ++ Trim(5803,28399) ++ Trim(30198,48149) ++ Trim(49949,50095)
ffms2
Trim(51,3702) ++ Trim(5804,28400) ++ Trim(30199,48150) ++ Trim(49950,50096)

ローリングガールズ
avs2pipemodのエラーで80%で停止

アブソリュート・デュオ
16%で停止

ffms2ではうまくいかないようです。一つ誤差が少なくなったので期待していただけに残念です。

再びm2vに戻して今度は違う局で試してみます。
テレビ東京
始まってから5フレーム後にロゴが表示されます。また、20フレーム先にロゴが消えるようです。
88 8718 10517 25022 277720 48488 50288 53374
結果
Trim(82,8712) ++ Trim(10511,25015) ++ Trim(27714,48482) ++ Trim(50282,50880)
ずれは6でした。

どうしようも無さそうです。
きっとファイルによってフレームのカウントの始まる地点が異なるのでしょう。一概にオフセットで調整はできなさそうです。
このへんがしっかりしてこないと自動CMカットに進めないのでどうにかしたいところです。
15フレームのずれだとしても0.5秒ほどなのでそこまで気にしなくてもいいのかもしれませんが…

続いてはLogoGuillo側の動作オプションで解決できないかみてみます。
m2v mx1-2.lgd MX.lgd.autoTune.param 動画ファイルは最もズレの大きいアブソリュート・デュオで確認します。
66 4290 6090 24880 26679 46009 47808 48468(エンドカード含め48616)

ロゴが白飛びしたエンドカードを検出のみチェック
Trim(50,4274) ++ Trim(6074,24863) ++ Trim(26663,45992) ++ Trim(47792,48451)

詳細探索を追加で有効
Trim(50,4274) ++ Trim(6074,24863) ++ Trim(26663,45992) ++ Trim(47792,48451)

積極的なポストフィルタを追加で有効
Trim(50,4274) ++ Trim(6074,24863) ++ Trim(26663,45992) ++ Trim(47792,48450)

特に効果無しのようです。

LSMASHSource.dllが使えると見かけてので使ってみました。
その結果
Trim(66,4290) ++ Trim(6090,24879) ++ Trim(26679,46008) ++ Trim(47808,48467)

完璧です。
よくよく考えればわかることでした。
Aviutlの方に先にQSVEncを導入していたので、その際にLSMASHでTSファイルを読み込むようになっていました。
その状態では推奨されていたm2v.vpfとは違ったフレーム数のカウントになってしまったいたのでしょう。既にTSの読み込みが可能だったために、Aviutl側にm2v.vpfの導入をしなかったことが原因のようです。

Aviutl側とLogoGuillo側で同じプラグインを使用してTSファイルの読み込みをさせないとずれが生じてしまうようです。
ちなみに動作はLSMASHSource.dllを使用した方が格段に早いように思います。

これでやっと全て解決しました!

これで次の段階である自動CMカットにのぞむことができそうです。

0 件のコメント:

コメントを投稿