Upgrade to Pro — share decks privately, control downloads, hide ads and more …

2021年 未踏ジュニア 成果報告「動画編集ソフトウェアフレームワーク: mock up」

2021年 未踏ジュニア 成果報告「動画編集ソフトウェアフレームワーク: mock up」

Mutsuha Asada

November 03, 2021
Tweet

More Decks by Mutsuha Asada

Other Decks in Technology

Transcript

  1. Mockupの提案する編集手法 → 差分更新については「これから取り組んでいくこと」で再度触れます シンプルなRESTful APIではなく中間言語muml ① 大量のAPIを管理したくない ② 差分の関心を後回しにできる 20種類のフィルターをかけるなら

    20個のエンドポイントを叩かなければいけないので辛い 差分更新の実装を後回しにできる 未踏ジュニア期間内では全ての要素を再レンダリングしている 再レンダリング必要なのか そうでないのかが分からない 7
  2. web 開発者 モバイルアプリ デスクトップアプリ muml フレームを テクスチャに変換 FFmpeg 技術構成 リソース

    (画像,動画,フォントなど) ... FFmpeg レンダリング テクスチャを取得 フレームに変換 ストリーミングの 初期化・配信 動画ファイルへ 書き出し rtmpサーバー mumlのパース timeline obj生成 必要なシェーダ ファイルの準備 動画像のデコード プレビュー用 ライブストリーム エンコード済み 動画 14
  3. レンダリング高速化 1 1 1 1 1 1 1 1 1

    1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 2 3 3 3 3 3 3 4 2 3 3 3 4 4 4 4 CPUに動画を処理させるのは低速 ピクセルは縦 x 横 x 4 (RGBA) 分のデータを持つ 大雑把に言うと1920 x 1080のフレームで、 30fps・1分の動画のピクセルに全てアクセスする場合 1920 x 1080 x 4 x 30 x 60 = 約149億回の計算が必要! 実際には複数個の素材を重ねるためさらに数倍になる 18
  4. CPU GPU 0 50 100 150 200 250 300 350

    レンダリング高速化 現実的な速度でレンダリング可能に 約11.5倍の 高速化 1080 x 720 30fps 30秒程度の動画に 二値化フィルターを掛けてエンコードを行った際の測定結果 ・これまでCPUでは320秒程度かかっていたエンコードが GPUの処理に変更すると25秒程度に改善 ・特にプレビューの実現が現実的になった 19
  5. 苦労したこと ・GPUで高速化する必要があったこと ・AVFrameを直接Swscaleにかけると壊れた  → フレームは必ず新しく確保し直す ・int, floatでメモリを確保するとメモリ数が環境依 存になり厳密でないのでOpenGLからフレームを読 み出すときに壊れてしまう  →

    確保するメモリサイズは注意深く確認する これまで苦労したこと これから苦労しそうなこと 23 ・FFmpegのアプリケーションに依存せずフレーム をストリーミングすること ・HTTP Live Streamingへの変換を自前で実装す る必要があること
  6. mock upによって実現する未来 ・絵コンテによるモーショングラフィックスの生成 ・声による撮影 + 編集 ・プログラマブルな動画編集のためのドメイン固有言語 ・オブジェクトの関係性に着目した動画編集 新しい編集手法の探究 mock

    upを用いた開発 ・Webサービスのメディア編集 ・時刻や環境に依存して変化するWebサイト ・動画編集Progressive Web Apps ・複数人編集可能なアプリケーション ニーズに合わせて動画編集ソフトウェアを 開発できる時代が来る 26
  7. まとめ 27 ▲ GitHub ・RESTful APIではなく中間言語で編集することで大量のAPIを管理する必要がなく、 差分更新について後回しにすることができる。出力やストリーミング、アップロード など編集以外の作業と編集そのものを分離できる ・フィルターや図形の描画、アニメーションについて表現でき、これらを組み合わせ ることで複雑な動画を作ることができる

    ・OpenGLを用いてエンコードを約11.5倍高速化(動画像の構成要素によって変化) ・RTMPサーバーにフレームを送信してプレビューを実装した ・今後はOpenFXへの対応、差分更新の実装、インタラクティブなプレビュー の実装にも取り組んでいく
  8. ① フレーム規模 更新がないフレームの 再レンダリングを行わない ② レイヤー規模 差分が既レンダリング 構成要素より高い要素の 再レンダリングを行わない 差分更新の実装

    ・現在はmumlがupdateされるごとに全てのフレームを再レンダリングしている  → 効率が悪い! ・フレーム規模、レイヤー規模、ピクセル規模と段階的に差分更新を実現していく 29 これから取り組んでいくこと 差分更新
  9. ① フレーム規模 更新がないフレームの 再レンダリングを行わない ② レイヤー規模 差分が既レンダリング 構成要素より高い要素の 再レンダリングを行わない ③

    ピクセル規模 差分のうち既レンダリング要素 より高い構成要素のピクセルは 再レンダリングを行わない 差分更新の実装 ・現在はmumlがupdateされるごとに全てのフレームを再レンダリングしている  → 効率が悪い! ・フレーム規模、レイヤー規模、ピクセル規模と段階的に差分更新を実現していく 差分更新