« 2011年10月 | トップページ | 2011年12月 »

2011年11月

2011年11月25日 (金)

HuffyuvS(末尾にSがつくもの)は基本的に使わないほうが良いというお話

可逆圧縮コーデックとして有名なものに「Huffyuv」があります。

それを独自に改造したコーデックに「HuffyuvS」というものがあります。
本家と間違えやすいですが、末尾に「S」がつく別物です。
(おそらくこの「S」は「ストレート」の「S」だと思われます。)

※最後のSを小文字にして「Huffyuvs」と表記されることもありますが
  ここでは最後のSを大文字にした「HuffyuvS」という表記に統一します。
  (そもそもコーデックの設定画面などでも両方の表記が使われており統一されていません)

比較的初期のニコニコ動画まとめWikiでは、可逆圧縮コーデックの定番として
この「HuffyuvS」を勧めていましたが、現在では取り消されています。

aviutlを使ったVP6 2pass - ニコニコ動画まとめwiki
 
可逆圧縮コーデック「Huffyuv」を、コーデック内部のRGB-YUV変換が
ストレート変換になるように改造したもの。
この改造の意味がわからないまま使うと映像の色が大きく変わるという
結果を招くことがあるので、基本的には使うべきではない。

このページに書いてあるように、HuffyuvSの仕組みを理解しないまま使うと
映像の色が大きく変わるという結果を招くことがあるので、
動画編集ではHuffyuvSを使うのはやめたほうがよいでしょう。

また、現在入手できるHuffyuvS(huffyuvs_0.6_-_left_origin_-_base2.1.1-ccesp_dll.zip)は、
   「Huffyuv 2.1.1 CCESP Patch v0.2.2」
という、本家Huffyuv 2.1.1にパッチを当てたものをベースにしていますが、
このパッチ自体にも欠陥がありますので、あまり使うべきではありません。

以下、調べたことを書いていきます。

続きを読む "HuffyuvS(末尾にSがつくもの)は基本的に使わないほうが良いというお話"

| | コメント (0) | トラックバック (0)

2011年11月23日 (水)

ニコエンコ v0.77を使う場合の注意点

2012/7/9更新
  ●デフォルト設定が「最低速」というのは間違いでした。デフォルトは「普通」です。
    zipを展開しなおして起動すれば設定がクリアされてデフォルト値で起動すると思い
    そのようにしてデフォルト値を確認したつもりだったのですが、ニコエンコは設定を
        %appdata%nicoenc\setting.txt
    に保存するようになっているため、その設定を読み込んで起動していました。
    つまり「最低速」で実験していた後、フォルダを消してzipを展開しなおして起動したため
    デフォルトが「最低速」に見えただけでした・・・。失礼しました。
  ●2012/5/1に導入されたZeroWatchの大画面モードの解像度を追記。
  ●rigaya氏のDXVA検証記事を追加。

2012/4/11更新
  ●デフォルト設定が、問題が出る「最低速」になっているということを教えていただいたので
    その旨を追記。「普通」がデフォルトだと思い込んでいました。
    デフォルト設定のまま使うと非常にまずいです。

2012/2/18更新
  ●「ハードウェアアクセラレーションで崩壊してしまう動画の例」を削除し、
    「映像崩壊の様子をキャプチャした動画」に変更。
    どれほどひどく崩れるかがよくわかります。

2012/2/10追記
  ●ここに書いた以外にも以下のような問題があります。
      ◎neroAacEnc.exeを同梱しているのはライセンス的に問題。
      ◎エコノミー回避で設定されている上限ビットレート(合計220kbps)が低い。
        エコノミー回避の上限ビットレートはこれまでも300kbpsくらいだったが、
        2012/2/8には合計約445kbpsに変わっている。
        (ついでに生成されるエコノミー動画の解像度も640x360 or 512x384になった)
      ◎使っているx264(r1523)が古く、速度面などの性能が低い。
  ●「変換先の設定」フォルダにあるiniファイルを書き換えることで、
      ◎ハードウェアアクセラレーション時に映像が崩壊する問題
      ◎解像度が小さくなる問題
      ◎エコノミー回避のビットレートが小さすぎる問題
    を回避することができます。
    また、x264についても最新版に置き換えるという方法があります。
    詳細については、ニコニコ大百科に書いてくださった方がいますのでそちらを参照して下さい。
       ニコエンコとは - ニコニコ大百科
    ただし、
      ◎ビットレートが極端に高くなる問題(手動で調節しないとまずい)
      ◎音声ビットレートのバランス(自分で調節したほうがいい)
    については解決できませんので、「手動変換」を使うべきであることは変わりありません。
  ●ニコエンコは更新も止まっていますし、個人的には更新を続けている「つんでれんこ」や
    「AviUtlx264guiEx」などを使うことをお勧めします。


ニコニコ動画にアップロードする動画をエンコードするために使われる
代表的なエンコードツールの1つとして「ニコエンコ」が挙げられます。
最新版は2010/04/25のv0.77となっています。

これを使う際、以下の2点に注意すべきだと思うのでまとめてみました。
個人的な意見も入りますので、参考程度に見てください。

  注意点1.「ヘルプ→本体の設定」にある「変換速度」を「最低速」にして使ってはいけない。
        (デフォルトでは「普通」になっている)

  注意点2.トップ画面の「動画を変換する」ボタンによる自動変換ではなく、
        メニューの「手動変換」を使ってエンコードしたほうがよい。

以下に理由を示していきます。

ただし、ニコエンコは更新が止まっており今の状況では色々と不都合な点もあるので、
個人的には「つんでれんこ」や「夏蓮根」、「AviUtlx264guiEx」などを使うことをお勧めします。

続きを読む "ニコエンコ v0.77を使う場合の注意点"

| | コメント (0) | トラックバック (0)

2011年11月 5日 (土)

AviUtlと拡張x264(GUI)Ex 1.13までは10bit-depthのBT.709エンコードをするのは難しかった(1.14で対応済)

※2011/11/9追記
  2011/11/8にリリースされた「拡張x264(GUI)Ex 1.14」にて、YC48からの色空間変換の設定が実装されました。
  したがって、この記事の内容は既に意味がなくなっています。

  拡張x264(GUI)Ex 1.14で「10bit-depthでのBT.709出力」を行ないたい場合は、
    1.ソース映像を通常どおりプレビューが正しい色になるように読み込む。
    2.拡張x264(GUI)Exの「x264」タブで「10bit depth」にチェックを入れ、10bit-depthのx264.exeを指定する。
    3.拡張x264(GUI)Exの「x264」タブで「colormatrix」に「bt709」を指定する。
    4.拡張x264(GUI)Exの「拡張」タブで「YC48出力」を「BT.601→BT.709」にする。
  という設定を行なえば、YC48からの10bit変換で色空間を考慮した変換が行なわれ、
  問題なく「10bit-depthでのBT.709出力」ができるようになっています。
  作者のrigaya様、実装ありがとうございます。

 
◎2011/11/9追記
   ・拡張x264(GUI)Ex 1.14にてYC48からの色空間変換の設定がサポートされたので記事をクローズ。
    タイトルも過去形に変更。
   ・10bitでの色変換についての参考記事へのリンクを書き忘れていたので追加。
       rigayaの日記兼メモ帳 H.264 high bit depth decoder

◎2011/11/6修正
   ・YC48を「約12bit深度」としましたが実際には「16bit深度」でした。
    輝度や色差のマッピング範囲が約12bit+α相当なのであながち間違っていないかもしれませんが
    YC48のデータ構造自体は16bit深度です。(PIXEL_YC構造体では輝度と色差の値はshortとなっている)
       参考: x264のYUV4:4:4/RGB、AviUtlのYC48とYUY2入出力の仕様 (POP@4bit)
   ・拡張x264出力(GUI)Exの設定画面で出力色空間を指定するなら、拡張タブではなく
    x264タブの「10bit depth」の近くで設定できたほうが自然かもと思ったのでその旨を追記。
    

◎2011/11/5修正
   ・YC48を「12bit+1深度」と表現していたのを「約12bit深度」に修正。
    TVスケール輝度が0~4096になるだけで、フルスケール輝度は-299~4470の範囲を取るため。
   ・Makki氏の「AviUtlの内部形式について」のリンクを追加。
   ・デコーダーについていくつか注意書きを追記。
    比較的新しいものでないと10bit再生には対応していません。

※注意
  記事作成時の各ソフトのバージョンは、
     AviUtl 0.99j2
     拡張x264(GUI)Ex 1.13
  です。

------------------------------記事本文ここから------------------------------

AviUtl」と「拡張x264(GUI)Ex」を使って

   「10bit-depthのBT.709エンコード」

を行なおうとした場合、8bitの時と同じ感覚では間違えるというか、
かなりわかりにくいことをしないと正しくエンコードできないことがわかったのでまとめてみました。
色空間の話になるので、なかなか厄介でわかりにくいです。

うまく対処するには、拡張x264(GUI)Ex側での機能追加が必要な気がします。

この記事にある内容の影響を受けるのは、地デジのTSなどを10bit-depthでエンコードして
保存しているような人になると思います。(HDサイズならBT.709にしているはずですし。)
あとはPV3/PV4を使ってHDキャプチャしたものを10bit-depthでエンコードしている人とか。

なお、ニコニコ動画への投稿には10bit-depthは使ってはいけないので関係ありません。
(FlashPlayerは10bit-depthを正しく再生できないため。右側にマゼンタ色の線が入る上、色も微妙におかしくなる。)

■問題点

  AviUtlと拡張x264(GUI)Exを使って、以下の2つの条件を満たす出力を行なう場合、
  特殊な方法をとらないと正しく出力ができない。

    条件1.8bit-depthでi444出力を行ないたい。
         あるいは10bit-depthで出力(i420,i422,i444)を行いたい。

    条件2.出力色空間をBT.709としたい。

  AviUtlと拡張x264(GUI)Exでの色空間の扱いを詳しく知らないまま
  直感的にやろうとすると、かなりの高確率で間違ったエンコードになると思います。
  特にAviUtlの内部色空間である「YC48(16bit深度)」について理解しておかないとわかりにくいです。

長いので折りたたみます。
 

続きを読む "AviUtlと拡張x264(GUI)Ex 1.13までは10bit-depthのBT.709エンコードをするのは難しかった(1.14で対応済)"

| | コメント (4) | トラックバック (0)

2011年11月 3日 (木)

AviUtl拡張編集のLuaスクリプトのデバッグツール

AviUtl拡張編集のLuaスクリプトをデバッグする方法を教えてもらったので記事にしておきます。

使用するツールは、以下の2つのいずれかがよさそうです。(両方ともフリーソフト)

  DebugView for Windows (Microsoft TechNet)
    ・Windows7で動作するかどうかは不明。
    ・表示フォントが選べる。
    ・ログの検索やフィルタリングが出来る。
    ・他にもなんか色々機能があるみたいだけどよくわからない。

  デバッグモニタツール (Vector)
    ・VistaやWindows7で動作するかどうかは不明。
       →Windows7 64bit環境でちゃんと動いたそうです。
    ・シンプルな表示のみ。ごちゃごちゃしてるのが嫌な人はこっちでいいかも。

書いたスクリプトがうまく動かないような場合に、このツールを起動しておくと、
Luaのエラーメッセージを表示してくれるので、それを手がかりとしてLuaスクリプトを修正できます。

また、スクリプト用に用意されているdebug_print()関数を使えば、デバッグ用のメッセージを出力することもできます。
ただし英数字以外は文字化けしてしまいます。日本語も表示できると便利そうなんですけどねえ。

なお、「スクリプト制御」などでスクリプトを直接入力している場合、
1文字書くごとにスクリプトが評価されるためエラーメッセージが連発されます。
書き変えるときは「スクリプト制御」右上のチェックを外してスクリプト制御を一時的に無効にしたり、
問題が起きたときだけデバッグモニタツールを起動するようにするなど、使い方を工夫しましょう。

なお、*.anmや*.objなどのスクリプトファイルを書き変えた場合は、
拡張編集上でF5キーでキャッシュのクリアを行えば、新しいスクリプトを再読み込みしてくれます。

●参考:(拡張編集プラグイン付属のlua.txtより)

    ○debug_print(text)
       指定の文字をOutputDebugString()に送ります。デバック用です。
       ※スクリプト実行エラーのメッセージは自動的にOutputDebugString()に
         送られるようになっています。
            text : デバック表示文字
            例 : debug_print("デバック表示")

いや~、OutputDebugString()ってなんだろうって思ってたんですよね・・・。
普段からプログラム書いてるような人にとっては常識なのかもしれないけど、全然知らなかった・・・orz

DebugView

Debugview

デバッグモニタツール(Debug Monitor Tool)

Debugmonitortool

| | コメント (0) | トラックバック (0)

« 2011年10月 | トップページ | 2011年12月 »