L-SMASH-Works
L-SMASH-Works copied to clipboard
VP8_and_VP9.webm problems
POP氏のr935-2(r935 release2)のバイナリで、AltRefを利用しているVP9.webmの デコードがまともにできなくなってしまいました。 (r935ではやや問題はありましたがデコードはできていました)
これについてはおそらくffmpeg側の変更によるものだと思われますが、 VP8/VP9についてはそれ以外にも従来からフレーム抜けなどの問題が 発生しておりましたので、まとめて報告いたします。
■概要
L-SMASH Worksで、VP8/VP9のwebmファイルを読み込むと様々な問題が発生する
■確認に使用したL-SMASH Worksのバイナリと、リンクされているffmpegのバージョン
r921 : POP氏ビルド、ffmpeg 3.1.6 r929 : nekopanda氏ビルド、ffmpeg 3.4+パッチ r935 : POP氏ビルド、ffmpeg 3.4.2 r935-2 : POP氏ビルド、ffmpeg 4.0.2 r935-MABS : 自ビルド、ffmpeg N-92498-g77bf85515e(2018/11/21, 4.1+)、libvpx有効。AviUtl用のみ。
※POP氏とnekopanda氏のバイナリはlibvpx無効。
■問題点まとめ
●問題1: フレームレートが正しく認識されないことがある。
・例えば23.976(24000/1001)が23.975(23999/1001)と認識されたりする。
・VP8/VP9で発生を確認。 ・AltRefの有効/無効に関わらず発生する。
●問題2: 初回読み込み時(lwi生成時)と、2回目以降とでフレームレートが変わってしまうことがある。
・例えば初回は29.970(30000/1001)だったのが2回目以降は29.969(9680/323)になったりする。
・VP8/VP9で発生を確認。 ・試した限りではAltRefが有効なファイルでのみ発生する。
●問題3: フレーム抜けが発生してしまうことがある。
・本来1→2→3→4→・・・と表示されるべきなのが1→3→4→・・・のように一部が抜けてしまう。 ・バイナリによって挙動が異なり、初回読み込み時のみ発生する場合(r929/r935)と、 2回目以降も発生する場合(r921)がある。
・VP8/VP9で発生を確認。 ・試した限りではAltRefが有効なファイルでのみ発生する。
●問題4: AvsPmodでプレビュー再生すると、以下のエラーが発生することがある。 Error requesting frame **** LWLibavVideoSource: failed to make a frame.
・VP9でのみ発生を確認。 ・試した限りではAltRefが有効なファイルでのみ発生する。
●問題5: 比較的新しいffmpegをリンクしたバイナリだと、 フレームレートやフレーム数が極端におかしくなり、 デコード映像も崩壊してしまうことがある。
・フレームレートやフレーム数の誤認例 本来:29.9700(30000/1001)fps、5811frames 誤認:28.1132(1490/53)fps、 5451frames
・デコード映像の崩壊例→ http://2sen.dip.jp/cgi-bin/upgun/up2/source/up3519.png
・POP氏ビルドのr935-2(r935 release2)で発生する。(自ビルドのr935-MABSでも確認) ・POP氏のr935(ffmpeg3.4.2)では問題なく、r935-2(ffmpeg4.0.2)で問題が起きるようになったので、 この間にffmpegのVP9デコード処理に何らかの変更があったものと思われる。 ・libvpxを有効にしたffmpegをリンクしてPreffered decoderにlibvpx-vp9を指定すれば デコード映像の崩壊だけは避けられるが、フレーム数やフレームレートの誤認は発生する。 ・ffmpeg4.0.2でのVP9.webm->H264.mp4のトランスコードは問題ないので、 ffmpegのvp9デコーダが壊れているというわけではなさそう。
・VP9でのみ発生を確認。 ・試した限りではAltRefが有効なファイルでのみ発生する。
■詳細説明やバイナリ、問題再現用サンプル等
・以下のURLに置いてあります。同梱テキストをお読みください。 http://www.mediafire.com/file/583slvzkp9o7wbs/L-SMASH-Works-VPx-Problems.zip/file
■当面の回避策
・無理にVPx.webmをそのまま読み込もうとせず、 ffmpegでH264.mp4にトランスコードして読み込んだ方が確実。
https://github.com/HolyWu/L-SMASH-Works/commit/8a3d0c7db7bf598e28a8c0050b1f2663ca36e2ae このコミットの内容でフレームレートやフレーム数の誤認は無くなるようです。
ただしデコード映像の崩壊は引き続き起きるのでthreadsを1にするかPreffered decoderにlibvpx-vp9を指定する必要があります。 追記:FFmpegのconfigureで--disable-decoder=vp9を追加しておくやり方でもいいですね。 追記2:上記のcommitだけでは引き続きVP8のフレーム抜けが発生しますね……。
@f11894 遅くなってしまいましたが、情報ありがとうございます。
追記2:上記のcommitだけでは引き続きVP8のフレーム抜けが発生しますね……。
HolyWu@352a873c7cd218b8a4371b688c8e64c169a1b35b このコミットでVP8のフレーム抜けも発生しなくなったようで、HolyWu版の20200118のリリースからは問題が起きなくなっています。
ただしデコード映像の崩壊は引き続き起きるのでthreadsを1にするかPreffered decoderにlibvpx-vp9を指定する必要があります。 追記:FFmpegのconfigureで--disable-decoder=vp9を追加しておくやり方でもいいですね。
こちらについては現在のHolyWu版r1042の時点でも状況は変わっていないようです。