定番機能
定番機能について
03. 動画処理

動画

  • 動画よくある用途
  • 動画ファイルのアップロード
  • 動画ファイルフォーマット/エンコード
  • 動画ファイルのホスト/配信
  • 動画ファイルの加工
  • 動画ファイルの再生プレイヤー
  • 動画ファイルの再生トラッキング
  • 動画のストリーミング配信/ライブ配信/P2P通信
  • 動画の解析
  • 動画へのコメントのオーバレイ/字幕

画像解析と動画解析の組み合わせ

動画のよくある用途

  • 動画共有: Youtube, niconico
  • ライブ配信: ツイキャス, Periscope, Twitch, Mirrativ, Fb Live, LINE Live
  • 動画配信: Netflix, Hulu
  • ショート動画: Facebook, Instagram, Vine
  • 自撮りフィルタ: Snapchat, MSQRD
  • 分散型動画: KURASHIRU, C Channel, every tv
  • ビデオチャット: Skype, Facetime

動画ファイルのアップロード

クライアントでの選択方法

  • ブラウザ: HTMLのinputタグでtypeをfileにして、画像を選択
    • または、HTML5のDnD APIで複数枚のFileを取得する
    • jQueryにしろReactにしろ、それぞれやり方ある
  • iOS: AlamofireでNSDataとしてファイルを選択する
    • カメラの起動、カメラロールからの取得など
    • Androidも同様(いくつかライブラリがある)

ファイルアップロード

  • multipart/form-dataでアップロードする

フォームよるファイルアップロードの仕様

pre-flightでS3に画像をアップ

メインサーバーでは、選択された画像のメタデータだけ送信し、認証処理と画像のvalidationを完了したら、S3へのアクセストークンを返却し、クライアントから直接画像をS3にアップロードする。メインサーバーの負荷を減らすためにも、直接アップロードしたほうがお得。CORSに注意が必要。

動画ファイルフォーマット/エンコード

  • AVI
  • MP4
  • MOV
  • MPEG

動画形式の種類と違い(AVI・MP4・MOV・MPEG・MKV・WMV・FLV・ASF等)【コンテナ】

Elastic Transcoder でのエンコード

S3にアップロード後、LambdaをTranscoderを呼び出し、エンコードし、Bucketに設置。

動画ファイルのホスト/配信

  • WEBサーバーと同じ場所にホスト: Nginxが稼働しているファイルシステムと同じ場所にホスト
  • S3など専用ファイルサーバーにホスト: サーバー経由またはクライアントからダイレクトで送る
  • AkamaiなどのCDNから配信: CDNにキャッシュさせて配信する
    • CloudFront(AWS), Cloudflare, Fastlyなど

動画ファイルの加工

  • 圧縮(compression)
  • サイズ変更(resize)
  • 拡大縮小(scale)
  • サムネイル(thumbnail)
  • 切り出し(crop)
  • 回転(lotate)
  • 色変換/エフェクト(effect/filter)
  • 合成
  • 文字入れ

動画ファイルの再生プレイヤー

  • HTML5のvideoタグ, JavaScriptのライブラリ, Flashのライブラリ
  • iOS(Swift): AVPlayer
  • Android(Java): VideoView

参考

動画ファイルの再生トラッキング

  • 再生状況
  • 飛ばしたポイント
  • 途中離脱のポイント

動画のストリーミング配信/ライブ配信/P2P通信

プロトコル

WebRTC

動画の解析

  • 画像解析と音声解析の合わせ技
  • メタデータの収集と編集
  • OCRで文字認識
  • 顔の判定/抽出
  • 特徴抽出

やりかた

  • メタデータ(日時やGPSデータなど)を処理する場合がある
    • Twitterでは画像のGPSデータを安全性のため削除している(ストーカー対策)
  • OpenCVのラッパーを使う: JS, Swift, Rubyでもある
  • CPU/GPUの負荷や機械学習が必要なケースが多いのでサーバー側で処理するイメージだったが、Snapchatの顔識別などのようにクライアントで処理をするケースもある
  • SaaS/API(GCP, AWS, Azure): APIの呼び出し数だけお金を払えば、機械学習済みの画像認識エンジンを利用することができる。GCPのCloud Visionなど高精度でOCRなどが可能。

動画へのコメントのオーバレイ/字幕

  • シークバーのタイムラインに対してコメントや字幕を表示する
  • ニコニコ動画ではコメントの表示管理
  • 字幕の場合は切り替え言語の切り替えもする
  • Netflixの場合は映像/音声/字幕を別のサーバーで時間軸で管理している
機能カタログ