2018年4月15日日曜日

画質と圧縮の関係

この記事では、画質と圧縮の関係について書いていきます。

動画では、どのように圧縮するかということが画質に大きく影響してきます。データ容量の制約が大きいからです。静止画や音声であれば、十分に品質が高くなるように低い圧縮率で配信すれば良いのですが、動画はそういう訳にはいきません。

ちなみに静止画、音声、動画では、現在主流となっているのは非可逆圧縮であり、圧縮したデータは、元のデータから一部が失われたものとなります。そこをなるべく人間の耳や目に感じられないようにデータを削り落とすのが重要な技術の一つです。

画質や音質というものを論じるときに最も難しい点は、最終的な画質や音質というのは、人間が主観的に評価するものであり、評価には膨大な手間と費用がかかるということです。これを主観的評価官能評価と呼びます。

また人の感じ方はそれぞれですから、Aという人が良いという音質や画質も、Bという人にとっては良くないと感じられるかもしれません。ただしデータ圧縮を論じるときは、なるべく圧縮前の品質と近いものを高く評価することになりますので、この影響は減ります。

主観的評価にはあまりにコストがかかりすぎるので、動画の品質評価には、通常は客観的評価が使われます。これは計算式によって元の画像と圧縮した画像の違いを自動的に評価するという方法です。これですら、実際にいろいろな条件で試すのは大変なので、あまり多くの実験結果が公表されているわけではありません。

さて、あまり深い解説を続けても意味不明になりますので、まずはさくっと単純化してみてみましょう。

画質 = コーデックの性能 × エンコーダーの性能 × エンコードにかけた時間 × ビットレート × 元の動画の単純さ

となります。(これはあくまで簡易式です、実際の画質とパラメータの関係は非線形になります)

元の動画の単純さという要素については、前回の記事では説明しませんでしたね。

動画は単純であればあるほど、圧縮率が高くなります。単純とはすなわち動きが少ない動画や、複雑さが少ない動画ということです。画面がのっぺりとしていて、映っているものが少なくて、それらの動きが少なければ、圧縮率が改善されます。

さらに言うと、元の動画の画質や、出力する解像度などにより、上限の画質が決まってきますので、それ以上に画質を高めようとしても無駄になるということが言えます。

これらのことを考えると、単純にビットレートだけから画質を推定できないことが分かりますね。ビットレートが高いほど良い画質とは言えないのです。

エンコーダーの性能については要注意です。同じH.264のエンコーダーと言っても、何倍も圧縮率が異なるエンコーダーが存在するからです。実績のあるx264を使うのが最も安全な選択肢でしょう。変なエンコーダーを使うと、頑張って作成した動画が低い画質になってしまいます。

x264はオープンソースのエンコーダーであり、様々な製品に統合されています。フリーソフトウェアではffmpegやHandbrakeなどで利用することができますし、有償製品であればAdobe Premiere ProやEDIUS用のプラグインも発売されています。

NVENCやIntel QSVなどのハードウェアエンコーダーは現在までの評価ではかなり画質が低いという評判ですので、避けた方が良いでしょう。日進月歩の世界なので、来年どうなってるかは不明ですが。

ビットレートの設定ですが、もしYoutubeを使っているのであれば、Youtubeの推奨エンコード設定に従えば良いかと思います。細かい設定はYoutube側で再エンコードが行われて修正されるはずですので、若干高めの画質に調整してアップロードすることがコツと思います。再エンコードのさいに若干画質が低下するからです。

XCREAMでも近いうちに推奨エンコード設定を公開する予定です。

自社で配信する場合には、ビットレートをどのように設定するかはかなり難しい問題になります。ビットレートの設定により、配信コストが大きく変わりますし、視聴者が見るための環境もそれによって決まります。光回線であっても、高画質4K動画をストリーミング配信で再生するのは難しいでしょうから、ある程度、画質を犠牲にせざるを得ません。

エンコードにかける時間は、もし時間をかけられるなら長い時間をかけるほうが良いはずなのですが、たまに問題がでます。時間をかけてエンコードを行った動画の場合、再生時にプレーヤー(デコーダー)にかかる負荷が増えますので、環境によっては再生できなくなる恐れもあります。とくにモバイル環境での再生可否については良く検証したほうがよいでしょう。

x264であればslowerが無難でしょう。

コーデックの性能ですが、保存用やアップロード用としてはH.265(HEVC)も一つの選択肢だと思います。Youtubeは推奨していないので未対応かもしれません。XCREAMではH.265によるアップロードも可能ですが、エンコーダーとの相性によっては上手く動作しない場合もあるかと思います。今後検証して結果を載せていきます。

配信用としては現在のところH.264が無難でしょう。他のコーデックは実績が少ないため再生できる環境が少なかったり、予想外のエラーがでる可能性があるので、2018年4月現在ではよほど詳しい方以外は避ける方が無難と思います。

注:
  1. そもそも画質とはなんなのか? 撮影するときのカメラやレンズの性能はどうなのか? という疑問をお持ちになる方もいるでしょうが、私は一介のソフトウェア技術者なので、残念ながらそうした疑問に対する答えは持ち合わせておりませんm(__)m
  2. コーデックやエンコーダーの比較情報サイトとしては、モスクワ大学のサイトが有名です。ただ、かなり専門的な内容になりますので、正直、正しい意味を読み解くのはかなり難しいなと感じています。
  3. 余談ですが、ハリウッド映画などでは、エンコードするときに手作業でシーンごとにエンコード設定を変えながらエンコードしているそうです。マジかよ?と思いますが、パナソニックハリウッド研究所ではそのような作業のための専用のエンコーダまで持っているそうですね。 - https://av.watch.impress.co.jp/docs/20080911/avt030.htm

デジタル動画の基礎知識

前稿「デジタル静止画の基礎知識」はこちら。

前稿で書いたとおり、動画では、静止画を1秒あたり24枚~60枚を高速に表示することで、人間の目にとって動いている動画として認識させます。これはアナログの映画フィルムも同じ仕組みです。

基本的には動画を構成する静止画は、前稿で説明したものと同じですが、動画でだけ多用される設定として、ピクセルフォーマットピクセルアスペクト比というものがあります。

動画では通常RGBではなくYUV 420などのピクセルフォーマットを使います。色をRGB(赤緑青)ではなく、輝度(Y,明るさ)と色の信号(U,V)に分けて、人間の目が鈍感な色の信号を削減することで情報圧縮することが特徴です。YUV 420では、ピクセル4つにつき、輝度信号4つと色信号UV1つずつだけを記録します。

ピクセルアスペクト比は、一つ一つのピクセルの縦横の大きさを表します。パソコンでは、ピクセルは必ず正方形ですので、ピクセルアスペクト比は1:1となりますが、テレビやDVDでは10:11や40:33などの正方形ではないピクセルが使われます。

動画の中に含まれる静止画のことをフレーム(frame)と呼びます。一秒間に何枚の静止画(フレーム)が含まれるかということを、フレームレート(framerate)と呼びます。単位はframes per second (fps)です。

映画は伝統的に24fpsで撮影され、それが映画らしさを作っているとも言われますが、ちょっとなめらかさに欠けるようにも思います。パソコン用動画としては30fpsが良く選ばれてきましたが、最近ではYoutubeが60fps動画に対応して話題になりました。フレームレートが高いほど動画が美しく見えるかどうかについては、まだ定説はないようです。[1]

動画の最も重要な要素は、静止画の仕様すなわち解像度と色数に加えて、フレームレートの三つがあります。1920×1080ピクセル、YUV420 8bit、30fpsなどといった条件です。

本来であれば、この三つを定めれば良いはずなのですが、残念ながら動画にはもっとややこしい要素が無数にあります。それをこれから解説していきます。

動画の静止画を構成する方式には、インタレースという独特の方式があります。

これはテレビ放送で生まれた仕組みです。言葉で説明しにくいですが、1枚のフレームを細切りに分割して、それを1/60秒だけずれた2枚のフィールドという半分の解像度を持つ静止画に分割して配信します。

60iという方式では、1秒間に60枚の画像が表示されますが、そのうち交互に送信される1枚目と2枚目は縦に1ピクセルだけずれた画像になっています。

これはブラウン管には合った表示方式だったのですが、液晶ディスプレイやパソコン配信には非常に不向きです。インタレース形式の動画は大きなトラブルや画質低下の原因となりますので、現在は必ずインタレースではない形式(プログレッシブ形式)で動画を撮影することが必要です。

もしどうしてもインタレース形式が必要になる場合は、高fps(60fps等)のプログレッシブ形式の動画を撮影して、そこからインタレース形式に変換しましょう。この方式なら動画の画質をあまり落とすことなく、両方の形式の動画が作成できます。

逆にインタレース形式のDVD形式などの動画をPC用に変換した場合、どうしても画質が著しく低下してしまいます。

動画は、静止画と異なりデータ容量が膨大になります。24fpsでも、一秒の動画で24枚の静止画、1時間の動画ではなんと86400枚もの静止画を含むことになるからです。

膨大なデータ容量は、コンピュータ、記憶媒体、通信回線などに高い処理能力を要求します。そのため圧縮率や圧縮方法などについて、動画作成者が考えるべきことが無数にでてきます。それによって画質や扱いやすさが変わるからです。

データ圧縮をするときには、元のデータを同程度の画質でどれだけ小さいデータ容量に減らすことが出来るかが重要です。これを圧縮率と言います。

動画を作成する際には、以下の点が重要になってきます。

  • コーデック
  • エンコーダー
  • エンコード速度
  • ビットレート

コーデック(codec)は、圧縮方式です。どんなルールで圧縮するかが業界標準として決められています。これによって圧縮率が大きく変わりますし、どのプレーヤーで再生できるかが決まってきます。

現在最も広く使われているコーデックはH.264 (AVC)です。これはほぼ全てのインターネットブラウザ、パソコン、スマホなどで再生することができますので、広く使われています。2018年現在では圧縮率も高い方のコーデックです。次世代コーデックとしてはH.265 (HEVC)、VP9などがあり、現在はAV1というさらに新しい方式が開発中です。

エンコーダー(encoder)は、実際に圧縮を行う機器やソフトウェアのことです。動画の圧縮では、エンコードを実際に行う方法は各製品の自由裁量となっており、各製品によって圧縮率や画質は大幅に変わってきます。H.264ではx264というソフトウェアエンコーダーが最も良い性能だと言われています。

エンコード速度は、エンコードするのにどれだけ時間をかけるかということです。同じコーデック、同じエンコーダーを使っても、エンコード時間をかけるほど圧縮率は向上する傾向にあります。

ビットレート(bitrate)は、動画の時間あたりのデータ容量です。通常Kbps (1000bit毎秒)かMbps(百万bit毎秒)の単位で表現されます。他の条件が同じであれば、ビットレートが高いほど画質が高くなる傾向にあります。

1Mbpsの動画は1時間で450MB(megabyte = 100万バイト)となります。10Mbpsなら4.5GB(gigabyte = 1000MB)となります。

これらの設定をどのように決めるかが、動画制作者や配信者の腕の見せ所です。次からの記事でそれらについて細かく説明していこうと思います。

補足ですが、mp4wmvなどというファイル形式のことをコンテナフォーマットと言います。とりあえず通常配信する場合はmp4で問題ないでしょう。

あ、音声に関しても説明が必要でしたね。これもそのうち解説しようと思いますが、通常配信する場合にはAAC 128kbpsまたは256kbpsにしておけば問題ないでしょう。

注:

  1. フレームレートによる動画の見え方の違いについては動画用カメラを作っているRED社の解説ページが分かりやすいのでご覧ください。

2018年4月14日土曜日

デジタル静止画の基礎知識

デジタル動画について学ぶには、まず静止画(二次元デジタルラスター画像)の基礎知識が必要になります。

なぜなら動画とは、静止画を1秒間に24~60枚ほど組み合わせて、それを高速に表示することで、人間の目に動いているように見せているものだからです。

デジタルラスター画像では、一枚の画像を無数のピクセル(画素)の組み合わせで表現します。ピクセルという色を表す点を何百万個も並べることで、一枚の画像となります。

ディスプレイ上では、色は光の三原色(RGB, 赤緑青)の組み合わせで表現されます。三原色をごく小さい点で表すことで、人間の目に入ったときには一つの混ざり合った色として認識されます。

ご存じのように光の三原色を混ぜ合わせることで、人間が認識できるほぼ全ての色を作り出すことができます。なぜなら、光の三原色とは、人間の目が持っている三種類のセンサーの色に対応しているからです。

RGBをそれぞれどれくらい明るくするか(輝度)を指定することで、ディスプレイが発する光の強さが変わり、それによって映像が出力できるということです。

現在のパソコンでは、RGBそれぞれ8bitすなわち256段階の輝度(明るさ)が出力できるようになっているものが主流です。色としては8+8+8=24bit、すなわち約1677万色が表現できます。

画像は、ピクセルが組み合わさった二次元の行列として記録されます。

このピクセルの数のことを一般に解像度(Resolution)と言います。[1]

フルHD画像であれば、横1920ピクセル、縦1080ピクセルとなります。総ピクセル数でいうと1920×1080で207万3600画素(2メガピクセル, 2MP)となります。

UHD 4K解像度(3840×2160)は、フルHDに比べて、縦横が双方2倍のため、ピクセル数でいうと4倍になります。圧縮率の変化を考慮しなければデータ容量も4倍になるので注意が必要です。すなわちデータの保存や配信にかかる費用も4倍になるということです。

初期のゲーム機ではドット絵と言われるガクガクギザギザした絵が主流でした。それは解像度が256×240ピクセル程度しかなかったからです。その当時では一つ一つのピクセルが目に見えていたということです。

解像度が高くなれば、より細かく多数の画素を記録・再生することができるため、精細な画像表現が可能になります。ただし解像度はあくまで画質を構成する一要素でしかないことに注意が必要です。これはそのうち別稿で説明します。

デジタル静止画を扱うときは、通常はデータ圧縮を行って保存します。

RGB 24bitのフルHD画像は、データ圧縮を行わないと6.2MBの容量を消費しますが、データ圧縮を行えば、画質にもよりますが、数分の一から二十分の一くらいの容量に削減することが可能です。

データ圧縮についての詳細は別稿にて述べさせていただきます。

注:
  1. 解像度というのは本来はピクセル密度(長さあたりのピクセル数すなわちdots per inch, dpi等)を指す言葉でした。しかしコンピュータ業界では、解像度というと画面や画像のピクセルの数を表す言葉として使われますので、本ブログでもその用法を使います。

XCREAM動画技術ブログへようこそ

弊社ではXCREAMという動画配信サービスを運営していますが、動画の基礎知識を体系立てて学ぶための良い書籍やウェブサイトが無いということに気づいたので、このブログを立ち上げました。

このブログは技術者が書いていますので、初歩的な技術的な誤りなどは無いように気をつけていますが、もし誤りを見つけたらコメント欄などにお気軽にご連絡いただければと思いますm(__)m

技術者が書くことで、他の動画に関するウェブサイトなどとは一線を画する体系立った知識を紹介して行ければと思います。