スポンサード リンク

T.Ishii's Software Library

HTML5 レトロ風ゲーム館

無料ブログはココログ

« 使い込み中 | トップページ | 再生デバイス変更も可能 »

MP4エンコーダーは微変更

今は、macOS用ネイティブ版AGMPlayerの開発フェーズで、Windows版のストリーム録画機能を除いた機能は実装できたので、このレベルでリリースする事にして使い込みを行いつつ、最終調整中なのだが、MP4エンコーダーのコードは微変更した。

今回開発しているAGMPlayerでは再生可能な動画はAGM/MP4形式に再エンコード可能なのだが、その為に使用しているMP4エンコーダーはAVFoundationを使って実現している。

そして、このMP4エンコーダーは、既に、macOS用AGMConvとAG-ムービーカッターに実装してリリース済みなのだが、少なくとも作者的には、そのエンコード出力に少し不満があった訳だ。

具体的には、例えば、30FPSのAGM形式動画をMP4形式にエンコードした場合、エンコード出力されるMP4動画が、30FPSにしては、ギクシャクしている様に感じられる事があった。

つまり、MP4エンコーダーの出力がフレーム落ちしている感じになる事もあったのだが、そうはならない事もあったので、今日までは、特に対策は行なっていなかった。

しかし、今回、昨日書いた様に、開発したAGMPlayerは、MacBook Pro 15インチ 2016モデルにもインストールして動作確認しているのだが、そこでMP4エンコーダーを使うと、出力されるMP4動画の画質は、より一層、悪い感じになっていた訳だ。

具体的には、MacBook Pro 15インチ 2016モデルでエンコードしたMP4ファイルを再生すると、ティアリング現象が発生した。

つまり、コマ送りで各フレームを見ていくと、元々の動画では2つのフレームに分かれていた画像が、一つのフレームに分割されて入っている現象を確認できた訳だ。

と、言う事で、この様な現象は、同じAGMPlayerを使っても、Mac mini Late2014では発生しないので、この現象はdGPUを使っているMacBook Pro 15インチモデルのAVFoundationに固有のバグなのかもしれない。

しかし、だとしても、作者的には、大枚をはたいて購入したMacBook Pro 15インチモデルでは、マトモにMP4エンコードが出来ない、なんて事になると、結構、辛いので、何とかならないモノか、と、色々と試してみた訳だ。

その結果としては、AVFoundationの使い方を少し変更する事で、問題を無くす事が出来たのだが、その変更というのは、元々は、AVFoundationのエンコーダーに渡すピクセルバッファは一つだけ生成して全ての書き込みで使い回していたのだが、書き込み毎に別のピクセルバッファを生成する様にした、という事だ。

つまり、前述のティアリングというのは、まだ、AVFoundationのエンコーダーがピクセルバッファを使用しているタイミングで、作者ルーチンがピクセルバッファの内容を書き換えていた為に、発生していた問題である筈だったので、作者的には、元々、エンコーダーのready確認やピクセルバッファのロックは行なっていたのだが、より確実に、そういう現象が発生しない様に、AVFoundationに渡したピクセルバッファには、それ以降、アクセスしない様に変更した訳だ。

と、言う事で、今回開発しているAGMPlayerでは、MacBook Pro 15インチ 2016モデルでMP4エンコードを行なっても、ティアリング現象は発生しなく出来たのだが、既にリリース済みのAG-ムービーカッターとAGMPlayerでは、この現象が発生する筈なので、これらについても、修正版をリリースする事になる筈だ。

ちなみに、フレーム落ちする感じに見える問題についても、別の変更を行う事で解決した。

具体的には、作者製のエンコード処理ルーチンでは、フレームレートの変更も可能にしてあるのだが、MP4エンコード時には、そのフレームレート計算の誤差が悪影響を与えていたので、その誤差の悪影響を回避できる様にした。

つまり、作者製のエンコード処理ルーチンでは、ソース動画からフレーム画像を受け取り、出力動画のエンコード用に使うのだが、受け取るフレーム画像のフレームレートが高すぎると判断した場合には、そのフレームを捨てる処理を行うのだが、フレームレート計算で誤差が発生すると、本来は捨てる必要がないフレームを捨てる事になってしまう訳だ。

もっとも、そうやって1フレームを捨てる事になったとしても、それだけでは、見た目で判るくらいのフレーム落ちにはならないのだが、そうやってフレームを落とす事で、今度は、フレームが微妙に足りない計算になるので、同一フレームを二度書き込む現象が発生する訳だ。

そうなると、今度は、また、フレームが微妙に多くなるので、ソース動画から送られてくるフレームを落とす格好になり、また、フレームが足りなくなり・・・、という感じでフレーム落ちが繰り返されていた訳だ。

と、言う事で、上記の問題についても、AGMConv/AG-ムービーカッターにも、内在しているので、近々、リリースされる筈の修正版では、これらの問題も、修正される事になる筈だ。

« 使い込み中 | トップページ | 再生デバイス変更も可能 »

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/534482/65442733

この記事へのトラックバック一覧です: MP4エンコーダーは微変更:

« 使い込み中 | トップページ | 再生デバイス変更も可能 »

2017年10月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

広告

プライバシーポリシー

  • 当サイトでは、第三者配信による広告(Google Adsense)サービスを利用しています。

    Google を含む第三者配信事業者は、Cookie を使用して、ユーザーのウェブサイトでの閲覧履歴に基づく広告を配信します。 Google 広告 Cookie を使用することにより、Google や Google のパートナーは当サイトや他のサイトへのアクセス情報に基づく広告をユーザーに表示できます。

    Cookieを無効にする設定およびAdsenseに関する詳細については、以下のリンクを参照下さい。

    広告 - ポリシーと規約 - Google