SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

今日からできる! 動画配信基盤システム構築

配信に適した動画にする「エンコード」の技術~動画ファイルをエンコードして、HTTPサーバーで配信してみよう

今日からできる! 動画配信基盤システム構築 第3回

  • X ポスト
  • このエントリーをはてなブックマークに追加

 インターネットを利用した動画配信は、ブロードバンドの普及とともに急速に発展し、今や多くの人々がたくさんの動画コンテンツを視聴しています。各関連技術は発展と収束を繰り返し、昔は難解だった動画配信技術もスタンダードが確立されつつあります。本連載ではインターネットを利用したストリーミング動画配信技術についてわかりやすく紹介し、誰でも、簡単に、動画配信ができることを伝えていこうと思っています。第3回となる本記事では、実際に動画ファイルをエンコードして、簡単なHTTPサーバーを立ち上げ動画を配信してみましょう。

  • X ポスト
  • このエントリーをはてなブックマークに追加

はじめに

 こんにちは。合同会社DMM.comで動画配信サービスの開発をしている中村(@zyackusan)です。

 前回の記事では、動画配信技術への入り口として、私たちが「動画ファイル」をどのように捉えるべきかについて解説しました。おさらいすると、動画ファイルとは映像や音声などの「個別のデータ」をひとまとめにしたものであり、その格納のために「コンテナ」と「コーデック」という仕組みがあることをお伝えしました。さらにFFmpegという動画配信には欠かせないツールがあることと、Big Buck Bunnyというオープンソースのアニメーション映画があることにも触れました。「ああ、そんなことを前回言ってたなあ」と思い出していただければ、今回の記事で触れる内容がスムーズに理解できるかと思います。

 前回までは動画配信技術へのとっかかりとして基礎的な知識を身につけてもらうことに重点を置いていました。今回からは実際に動画ファイルをエンコードしてみることと、その先にあるごくごく簡単な「動画配信の実現」について解説していきます。

 とは言いつつも、前回も少しだけ触れたようにコーデックやコンテナには多くの種類があり、それらについて語り尽くすことは、この記事の範囲を優に超えてしまいます。そこで今回は的を絞って、動画ファイルとしてもっとも一般的な「H.264」コーデックと「MP4」コンテナに焦点を当てて解説していきます。

なぜエンコードが必要なのか

 私たちが動画配信サービスを設計するにあたって、まず最初に考えるべきことは「提供する映像の品質」です。ここでいうところの品質にはさまざまな要素がありますが、代表的なものは以下になります。

  • 解像度(縦と横のピクセル数)
  • フレームレート(1秒間に表示される静止画の枚数)
  • ビットレート(1秒間の表示に必要なデータ量)
  • カラースペース(色の表現範囲)
  • コーデック(映像データの圧縮方式)
  • コンテナ(映像データの格納方式)

 ひとまず「こんなものがあるのだなあ」という程度で気に留めておいてください。ここで言いたいのは、提供するサービスの性格によって、私たちはどのような映像の品質を提供するかを事前に決める必要があるということです。もっとも、これら映像の品質はサービスとして何を提供するか、その本質によって自ずと決まってくるものでもあります。

 例えば、DMM TVのようなサブスクリプション型の動画配信サービスであれば、アニメやドラマなどの映像コンテンツをオリジナルの綺麗さを損なうことなく快適に楽しめる品質を提供することが求められるでしょう。一方で、SNSのようにユーザーが投稿した動画をシェアして楽しむサービスであれば、サービスを利用する上での軽快さを損なわないために、アップロードされた映像の綺麗さよりも再生開始までの速さが優先されることになるでしょう。

 先ほど挙げた映像の品質を決める要素の中で、直感的にわかりやすい例は「解像度」です。解像度とは、映像の画面の大きさを表す指標であり、横と縦のピクセル数で表されます。提供するサービスによって提供したい映像の解像度はさまざまで、例えば最大でもFull HD(横が1920ピクセル×縦が1080ピクセル)の解像度しか提供しないサービスもあれば、4K(横が3840ピクセル×縦が2160ピクセル)などのより高い解像度まで提供するサービスもあり得るでしょう。一部のSNSで見られるように、正方形の解像度(つまり、縦と横のピクセル数が同じ)を提供することもあるかもしれません。

 そして頭に入れておくべきは、映像の品質が高ければ高いほどいいとは限らないという点です。綺麗な映像であることはもちろん大事ですが、それがサービスの本質に合致していなければ、ユーザーにとっては不要なコストになるかもしれません。

 さて映像の品質を決めたとして、次にそれら映像作品をどのように確保するかを考える必要があります。というのも、私たちが提供するサービスにおいて、納品される映像ファイルは必ずしも私たちが提供する映像の品質に合致しているとは限らないからです。DMM TVのようなサブスクリプション型の動画配信サービスであれば、コンテンツホルダー(映像作品の権利者)から提供される映像ファイルは、オリジナルであるがゆえに高い品質であるものの、私たちが決定した映像の品質に合致しているとは限りません。SNSのようなサービスであれば、ユーザーが投稿した映像ファイルは、サービスとして提供する映像の品質から大きく外れていることが予想されます。

 このように、納品された映像ファイルを私たちが提供する品質に合致するように変換させるためには、映像ファイルを「エンコード」する必要があるわけです。DMMの配信基盤グループでは、このエンコード・システムを開発しており「JIRO」という名前で運用しています。少し古いですが、JIROの大まかな紹介は以下の記事にありますので、興味がある方はぜひご覧ください。

 大まかには変わりませんが、DMM TVがリリースされる前の記事であるため、現在のJIROはより複雑かつ高度になっています。

 余談ですが、JIROに関連した最新の取り組みとして、2024年7月にDMM TVが大手国内配信事業者で初となる次世代動画圧縮コーデックを採用したことを発表しました。最新のコーデックを利用したことで、同等の画質を提供する際に40%から70%程度の通信量を削減することに成功しており、視聴体験の向上に貢献することができました。一方で、最新のコーデックであるがゆえに、サービスとしてまともに視聴できる段階になるまで多くの課題を乗り越える必要があり、その様はまさに試行錯誤と呼べるものでした。

 ひとまず、今回の記事ではこの最新コーデックではなく、もっとも一般的である「H.264」をベースとして、動画ファイルをエンコードする方法について解説していきます。

次のページ
ffmpegで動画ファイルをエンコードしよう

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
今日からできる! 動画配信基盤システム構築連載記事一覧

もっと読む

この記事の著者

中村 航(合同会社DMM.com)(ナカムラ ワタル)

 2020年にDMM.comへ新卒入社。現在の配信基盤グループに配属され、今日までエンコードシステムやバックエンドシステム等の開発・運用に携わっています。その後、2022年にスタートしたDMM TVの立ち上げにも関わりました。エンタメ大好きなエンジニアです!

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/20263 2024/12/19 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング