サブPCの方がそろそろ容量が厳しくなってきたので
取り合えずなんとかせねばと新年早々重い腰上げてエンコしてます
取り合えずx264で
フルHD(1440×1080だけど)で残そうと思ってるので
映画は24fps(24p)化してmp4にする
一応x264guiEXのBD準拠エンコで
いつでもM2TS化できるような設定でエンコしてるんだけど
この辺はまた追々書こうと思うが
問題はドラマとか所謂1080i
BD準拠だとインタレ保持が前提
話は変わるが以前x264でインタレ保持に挑戦したことがあるが
そのときはなぜかうまくいかなくて半ばあきらめていた
具体的には出来上がった動画は一見保持に成功して見えるが
動画の所々に縞が残る現象が起きる
まるでデコーダ側がインタレ解除に失敗したよう見えるが・・・
ffdshow、LAVFilter、MS標準フィルタどれも結果は同じ
全く同じ箇所で一瞬だけ縞付き30fpsで再生される
ちなみにインタレ保持動画は再生時に縞解除+60fps化される設定
ここでx264のインタレ保持の方式について説明
x264ではMBAFFと言う方式なのだが
これは圧縮時に16×16ドットのブロックを検証し縞があればインターレース
縞がなければプログレッシブでエンコードするというもの
つまり同じ動画内でインタレとプログレが混在している可能性がある
この縞検出精度に問題があればインタレとプログレの境目で
縞々30fps誤爆が発生する可能性は十分ありうる
よってデコーダ側に原因はなくエンコーダ側に問題があるという結論に達した
では解決法はあるのかと色々試して釈然としないが取り合えずなんとかなった
いきなり結論を言うとx264の出力色空間をi4:2:2所謂YUY2にすることだった
x264の推奨設定だとi4:2:0であり所謂YV12相当
ここでYV12について簡単に説明すると
1フレーム目で奇数フィールドのPb信号と偶数フィールドのPr信号を記録
2フレーム目では逆に奇数フィールドPr偶数フィールドPbの信号を記録する
ここで気づいたのだがなんかインタレっぽい信号の記録の仕方じゃない?
もし仮にこの辺の信号記録行程に何らかの問題があって
フィールド情報が破綻してしまっているとしたら?
要はx264のYV12の色空間変換の仕方になにか問題があるんじゃね?
一応AviutlではYUY2相当の独自の変換を行っているのだが
この辺も加味しつつAviutl側の入出力設定も見直したが問題なし
DGIndexやMPEG2 VFAPIなども問題なし
よってx264側の色空間の変換バグだと結論
この結論だとYUY2出力で問題が起きないのも納得
しかしBD準拠のh264の色空間でYUY2は対応しているのか不明
一応BD自体はYUY2、YV12の両方に対応しているらしいのだが
そもそもなぜx264がYV12での出力を前提にしているかなどを想像すると・・・
まあPCでの再生などは問題なさそうなので
むりにBD準拠に拘らなければこれでいい気もするが・・・
ちなみにBDは60fpsに対応しているのか調べてみた
一応1280×720までなら60fpsに対応しているそうだ
この辺も含めてエンコは悩むなぁ
というかこの辺の不具合についての報告がないので
なんで俺だけこんなことが起きるんだろうか
どこか見落としてる可能性もあるが
もうちょっと調べてみるかー






コメントを残す