スポンサード リンク

T.Ishii's Software Library

HTML5 レトロ風ゲーム館

無料ブログはココログ

« 何とかなりそうではある | トップページ | ビルド環境を構築 »

VP8+Vorbisで行く

今は、Mac用AGMPlayerの開発フェーズなのだが、一般動画とAGM形式動画の変換機能を実装するので、それ用の自前ライブラリを作成し、それを使ったAGMConvを、まず、リリースした。ついでに、Ubuntu版を開発中なのだが、一般動画形式はVP8+VorbisのWebMで行く。

今日は、WebMへのエンコードが行えなかった問題について調査し、とりあえず、14.04LTSと16.04LTSの双方で、ビデオコーデックにVP8、オーディオコーデックにVorbisを使う格好で、エンコードを行える様にした。

問題点は2つあったのだが、そのひとつ目は、デコーダーと同様に、音声データの形式が、広く一般に使われている、2バイト整数インタリーブ形式から、非インタリーブのFloat形式に変更されていた、という事だ。

つまり、従来形式を指定してエンコードを行おうとすると、パラメータエラーになってしまうので、エンコードが出来なかった訳なのだが、何年か前にも書いた筈なのだが、こんな互換性を無視した変更のやり方は、普通の企業なら許されない筈だ。

しかしまあ、上記については、既にデコーダー側で対処していた実績もあったので、比較的すんなりと解決できた。

より、面倒だったのはふたつ目の問題で、従来は、オーディオエンコードの結果にタイムスタンプデータが入っていたのだが、現在では、入らなくなっている様なのだ。

このため、最終的な出力データにはPTSというフィールドがあって、ここにそのデータを再生すべき時間を記述する必要があるのだが、Ubuntu12.04LTSの頃には、上記のタイムスタンプを参照し、それを変換する格好で、このフィールドは埋められたのだが、現在では、この処理が正しく動作しなくなっていた訳だ。

具体的には、今日、最初の問題を解決すると、エンコード自体は行える様になったのだが、その出力ファイルを再生してみると、総再生時間が異常だった訳だ。

なので、前述のフィールドを確認してみた所、常に、値が0だったので、致し方なく、前述のPTSフィールド用のデータは自前で作成する格好にした。

と、言うことで、前述の2つの問題を解決すると、Ubuntu14.04LTSでは、VP8+VorbisのWebM形式でエンコード出来、出力ファイルも普通に再生出来るようになったのだが、同様の変更をUbuntu16.04LTS版に適用しても、こちらについては、正しく動作しなかった。

その理由は、Ubuntu14.04LTSでは、WebM形式でエンコードしようとすると、デフォルトでは、コーデックとしてVP8とVorbisが選択されるのだが、Ubuntu16.04LTSでは、VP9とOpusが選択される。

そして、Ubuntu16.04LTSでは、VP9でのエンコードは、処理時間が2倍程度必要になる事を除けば、VP8用の処理コードで実行されるので、動作的な問題は発生しないのだが、Opusについては、そうではないみたいで、少なくとも今日の時点では、Vorbis用に記述したコードのままだと、Opusでのエンコードはエラーしてしまう。

このため、作者的には、Opusでのエンコードを行える様にしようと、色々と試してみた訳なのだが、ネットを検索しても、Opusでのエンコードを行えた、という書込みは見つからないので、とりあえず、作者的にも、少なくとも今日の時点では、Opusでのエンコードは諦めた。

簡単に諦められる理由は、そもそも、作者的には、AGM形式動画をメジャーな動画形式に変換するのが目的になる訳なので、WebM形式については、VP9+Opusが最新形式の様なのだが、仕様上は、VP8+Vorbisもサポートされ続けているので、VP8+Vorbisでも、作者的な目的は達成できる訳だ。

更に、前述の様に、VP9のエンコード速度は、唯でさえ遅いVP8よりも、更に2倍は遅いので、普通の環境で気軽に使えるコーデックでもない訳だ。

と、言うことなので、Ubuntu版AGMConvでは、Windows/macOS版のMP4形式の代わりにはWebM形式を使うのだが、更に、そのコーデックの詳細としては、VP8+Vorbisで行くことにした。

« 何とかなりそうではある | トップページ | ビルド環境を構築 »

トラックバック

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

この記事へのトラックバック一覧です: VP8+Vorbisで行く:

« 何とかなりそうではある | トップページ | ビルド環境を構築 »

2017年6月
        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  

広告

プライバシーポリシー

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

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

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

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