またまた変な現象みつけた
今度はffdshowのバグ
フルHDつまり1920×1080のソースをx264でmp4にしたものを
ffdshow経由で再生したときに
シークなどでスキップすると直後の数秒間の画像が破綻気味になる
破綻と言うのは具体的にはブロックノイズのような感じ
んで今度は破綻する箇所よりも少し前のフレームにシークすると
破綻していた箇所がきちんと再生される
これはおそらく何だけどx264の仕様で
IDRフレームの挿入頻度によるffdshowのバグかな?
IDRフレームというのはそのフレームより
以前のフレーム参照を禁止した特殊なIフレームで
普通のIフレームよりも制限がある分ビットレートが節約できる
ffdshowで破綻が起きるのは
IDRフレームを使用しつつそのフレームの挿入箇所が少ない場合
破綻が起きやすいのではないかと予想
ためしにx264のキーフレーム間隔の上限を弄る(–keyint)
preset slowのデフォルトは250なのだけど
これを150に設定して破綻の起こるソース箇所をエンコしてみる
するとスキップをしても破綻が起こりにくくなった
あとffdshow以外のデコーダでLAVなんかを使用すると
破綻はほとんど起きないのを見るとやはりffdshow側の問題か?
フルHD以下の720pなどではほとんど起こらないので今まで気づかなかった
なので現状フルHDのmp4をエンコするなら
–keyintのところを弄るか
デコーダをLAVとかにする必要がありそうだ
まあこの辺環境にもよるのかも知んないけど・・・
なんとなくCore i3のデコードが怪しいのよねぇ
そういえばインタレ保持エンコした動画の再生もAMD環境と違うし
ソフトデコードなのに差異が出てくるあたりなんか不具合かな?
とにかくフルHDのエンコはちょいキーフレーム多めに設定しよう
*追記
キーフレーム挿入を増やしてもバグる時はバグるっぽいw
ただバグる頻度は圧倒的に少なくなってるけど
そもそも–keyintを弄っても実際の挿入頻度は自動だしね
もっとキーフレームを増やすと言うのもそれだと容量が増えるし
crf弄ったほうがよっぽどビットレートのパフォーマンスはいいと思うし
まあ気にしないほうが良いのかも知れんw






コメントを残す