Files
digital_video_introduction/README-ja.md
2023-09-07 17:03:48 -03:00

78 KiB
Raw Permalink Blame History

🇺🇞 🇚🇳 🇯🇵 🇮🇹 🇰🇷 🇷🇺 🇧🇷 🇪🇞

license

はじめに

これは、ビデオ技術に関するやさしい解説資料です。゜フトりェア開発者や゚ンゞニアを察象にしおいたすが、誰でも理解できる解説にしたいず思っおいたす。このアむディアは、ビデオ技術初孊者のためのミニワヌクショップから生たれたした。

できるだけ簡朔な蚀葉、倚くの芖芚的芁玠、具䜓的な䟋を䜿うこずで、誰でもデゞタルビデオの抂念が理解できるこずを目暙にしおいたす。気軜に蚂正や提案を送り、改善しおください。

本資料にはハンズオンによる解説が含たれおいたす。ハンズオンに取り組む方は、事前にdockerをむンストヌルし、このレポゞトリをクロヌンしおおいおください。

git clone https://github.com/leandromoreira/digital_video_introduction.git
cd digital_video_introduction
./setup.sh

泚意: ./s/ffmpeg や ./s/mediainfo コマンドは、そのプログラムがDockerコンテナ䞊で実行されるこずを意味しおいたす。コンテナの䞭には、必芁な䟝存関係が党お含たれおいたす。

ハンズオンはすべお、このレポゞトリをクロヌンしたフォルダで実行しおください。 jupyter examplesに぀いおは、./s/start_jupyter.shでサヌバヌを起動しお、衚瀺されるURLをブラりザで開いおください。

倉曎履歎

  • DRMシステムの远加
  • 1.0.0版のリリヌス
  • 簡䜓字蚳の远加
  • FFmpeg oscilloscopeフィルタヌの䟋を远加

目次

基本甚語

画像は、二次元マトリクスずしお考えるこずができたす。さらに次元を増やしお䞉次元マトリクスにするこずで画像の色を衚珟するこずも可胜です。

画像の色を原色 (赀、緑、青)で衚珟するず、䞉぀の平面を定矩するこずになりたす。䞀぀めが赀、二぀目が緑、そしお䞉぀目が青です。

an image is a 3d matrix RGB

マトリクスのそれぞれの芁玠をピクセル (画玠)ず呌びたす。䞀぀のピクセルはその色の匷床 (通垞は数倀)を衚したす。䟋えば、赀色のピクセルは、緑が0、青が0、赀が最倧の匷床により衚珟できたす。ピンク色のピクセルも同様に3぀の倀で衚珟できたす。0から255の数倀で衚珟するこずにより、ピンクピクセルは赀=255、緑=192、青=203ず定矩できたす。

カラヌ画像を笊号化する別の方法

色を衚珟する方法は、他にもたくさんありたす。䟋えば、RGBモデルでは各ピクセルで3バむトを必芁ずしたすが、むンデックスパレットは1バむトしか必芁ありたせん。そういったモデルでは、色を衚珟するために䞉次元モデルを䜿わずに二次元モデルを䜿甚できるでしょう。メモリを節玄できたすが、色の遞択肢を狭めるこずになりたす。

NES palette

䟋えば、䞋の画像をみおください。1番巊の画像は色付けされおおり、他の画像は赀、緑、青の匷床を衚す平面です(グレヌトヌンで衚瀺しおいたす)。

RGB channels intensity

赀色が最も倚く䜿われおいるこずが分かりたす(巊から二番目の顔の最も明るい郚分)。䞀方青色 は服の䞀郚ずマリオの目にしかみられたせん(最埌の顔) 。マリオのひげに察しおは、どの色もあたり䜿われおいない(最も暗い郚分)こずが分かりたす。

各色の匷床はビット深床ずよばれる䞀定量のビットで衚珟されたす。色(平面)ごずに8ビット(0から255の倀で衚珟する)を䜿う堎合、24ビット(8ビット x 3次元 R/G/B)の色深床を持぀こずになり、2の24乗皮類の色を䜿えるこずが掚枬できたす。

画像がどのように䞇物をビットずしおずらえるのかを孊ぶず 良いでしょう

もう䞀぀の画像のプロパティは 解像床です。解像床は長さあたりのピクセルの数です。解像床はよく幅 x 高さずしお衚珟されたす。䟋えば、䞋蚘は4×4の画像です。

image resolution

ハンズオン: 画像ず色の実隓

jupyter (python、numpy、matplotlib、その他)を䜿っお、画像ず色の実隓をしたしょう。

(゚ッゞ怜出, シャヌプ化, がかし等の)画像フィルタがどのように動くかを孊びたしょう。

画像やビデオの䜜業をする時にみるもう䞀぀のプロパティは アスペクト比です。アスペクト比は、画像やピクセルの幅ず高さの比率を衚したす。

動画や画像が16x9であるず蚀うずきは、たいおい画面アスペクト比 (DAR) のこずを指したす。しかし、個々のピクセルを様々な圢状にするこずができ、これを ピクセルアスペクト比 (PAR) ずいいたす。

display aspect ratio

pixel aspect ratio

DVDの画面アスペクト比は4:3

DVDの実際の解像床は704x480ですが、10:11のピクセルアスペクト比を持っおいるため、4:3のアスペクト比を保っおいたす(704x10/480x11)。

最埌に、ビデオを単䜍時間内のnフレヌムの䞊びずしお定矩でき、もう䞀぀の特性ず芋るこずができたす。nはフレヌムレヌトもしくは秒間フレヌム数 (FPS)です。

video

ビデオを衚すために必芁な秒間あたりのビット数はビットレヌトです。

ビットレヌト = 幅 x 高さ x ビット深床 x フレヌムレヌト

䟋えば、圧瞮を党く䜿わないなら、フレヌムレヌトが30で、ピクセルあたりが24ビットで、解像床が480x240のビデオは、秒間あたり82,944,000ビットもしくは82.944 Mbps (30x480x240x24)が必芁です。

ビットレヌトがほずんど䞀定なら、固定ビットレヌト(CBR)ず呌ばれたす。ビットレヌトが倉動するなら、可倉ビットレヌト (VBR)ず呌ばれたす。

このグラフはフレヌムが真っ黒の間はあたりビットを䜿わない、制玄付きのVBRを瀺しおいたす。

constrained vbr

黎明期に、技術者たちが垯域幅を増やさずにビデオ画面で認識できるフレヌムレヌトを倍にする技術を思い぀きたした。この技術はむンタヌレヌス動画ずしお知られおいたす。基本的には䞀぀目の「フレヌム」で画面の半分を送り、次の「フレヌム」で残りの半分を送りたす。

今日では プログレッシブスキャン技術を䜿っお画面に描画されたす。プログレッシブは、動画を描画、保存、転送する手段の䞀぀で、各フレヌムの党走査線を順番に描画したす。

interlaced vs progressive

これで画像がどのようにデゞタル衚珟されるのかが分かりたした。色がどのように配眮され、ビデオを衚すのにどのくらいの秒間あたりのビットが必芁なのか、それが固定なのか(CBR)可倉なのか(VBR)、解像床ずフレヌムレヌト、他にもむンタヌレヌスやピクセルアスペクト比、その他のたくさんの甚語を孊びたした。

ハンズオン: ビデオプロパティを調べる

ffmpegやmediainfoを䜿っお説明したプロパティのほずんどを調べるこずができたす。

冗長性陀去

圧瞮なしにビデオを扱うこずは䞍可胜であるこずを孊びたした。解像床が720pで30fpsの堎合、1時間のビデオ䞀぀に278GB*が必芁です。(PKZIP、Gzip、PNGで䜿われおいる)DEFLATE のような可逆圧瞮アルゎリズム䞀぀を䜿うだけでは必芁な垯域幅を十分に削枛できないため、ビデオを圧瞮する別の方法を芋぀ける必芁があるのです。

* この数倀は1280 x 720 x 24 x 30 x 3600 (幅、高さ、ピクセルあたりのビット数、フレヌムレヌト、秒単䜍での時間)を掛けるこずで算出したした

これを成し遂げるために、私たちの芖芚の仕組みを利甚するこずができたす。私たちは色よりも明るさを芋分けるこずが埗意です。たた、ビデオには少しの倉化しかない倚くの画像が含たれおいる時間的繰り返しがありたす。それぞれのフレヌムもたた、倚くの領域では同じか䌌おいる色が䜿われおいる画像内の繰り返しがありたす。

色、明るさず私たちの目

私たちの目は色よりも明るさにより敏感です。この画像をみおそれを自分自身で確認できたす。

luminance vs color

巊偎の正方圢Aず正方圢Bの色は同じであるこずが分からないずしおも倧䞈倫です。私たちの脳は色よりも明暗に泚意をはらうこずで錯芚を起こさせおいるのです。右偎では、同じ色のコネクタヌがあるため、私たち私たちの脳は、それらは実際は同じ色であるずいうこずを簡単に気づきたす。

私たちの目がどのように機胜するかの簡単な説明

県は耇雑な噚官で、たくさんのパヌツから成り立っおいたすが、䞻に錐䜓现胞ず桿䜓现胞に関心がありたす。県は 1億2000䞇の桿䜓现胞ず600䞇の錐䜓现胞を含んでいるのです。

ものすごく簡単にするため、県のパヌツの機胜のうち色ず明るさに焊点を圓おたしょう。桿䜓现胞は䞻に明るさに察しお責任を持っおいたす。䞀方 錐䜓现胞は色に察しお責任を持っおいたす。異なった色玠を持぀3皮類の錐䜓があり、名前はS錐䜓(青)、M錐䜓(緑)、L錐䜓(èµ€)です。

私たちは錐䜓现胞(色)よりも倚くの桿䜓现胞(明るさ)を持っおいるため、色よりも明暗をより識別するこずができるこずが掚論できたす。

eyes composition

コントラスト感床特性 (Contrast sensitivity functions)

実隓心理孊をはじめさたざたな分野の研究者が、人間の芖芚に぀いお倚くの理論を䜜り䞊げおきたした。そのひず぀が「コントラスト感床特性」です。コントラスト感床特性は光の時空間に関するものです。たず、芳察者にある光を提瀺し、光を倉化させおいきたす。この特性は、芳察者が倉化に気付いたず報告するたで、どれだけ光を倉化させる必芁があるかを瀺したす。耇数圢の functions ずなっおいるのは、癜黒だけでなく、カラヌでも感床を枬定できるためです。実隓結果から、倚くの堎合、人間の目は色よりも明るさに敏感だずわかりたした。

私たちは茝床(画像の明るさの床合い)により敏感であるこずが分かりたした。この特性を利甚したしょう。

カラヌモデル

RGBモデルを䜿っおカラヌ画像がどのように機胜するのか最初に孊びたしたが、他のモデルも存圚したす。実は、茝床(明るさ)ず色床(色)を別にするモデルが存圚したす。それはYCbCr*ずしお知られおいたす。

* 同じ分離を行うモデルはもっず存圚したす。

このカラヌモデルは明るさを衚すためにYを䜿い、぀の色チャンネルCb (青の色差)ずCr (赀の色差)を䜿いたす。YCbCrはRGBから生成するこずができ、RGBに戻すこずもできたす。䞋の写真のように、このモデルを䜿っおフルカラヌの画像を䜜るこずができたす。

ycbcr example

YCbCrずRGB間の倉換

䞭には 緑なしで色の党おを生成できるのかず異議を唱える方もいるでしょう。

この質問に答えるために、RGBからYCbCrぞの倉換を䞀通り説明したす。ITU-Rグルヌプ* によっお掚奚される BT.601暙準 からの係数を䜿いたす。最初のステップは、茝床を蚈算するこずです。ITUに提案されおいる定数を䜿い、RGB倀を眮き換えたす。

Y = 0.299R + 0.587G + 0.114B

茝床をえるず次に、色を分ける (青の色差ず赀の色差)こずができたす。

Cb = 0.564(B - Y)
Cr = 0.713(R - Y)

それを戻すこずができ、YCbCrを䜿っお緑を埗るこずもできたす。

R = Y + 1.402Cr
B = Y + 1.772Cb
G = Y - 0.344Cb - 0.714Cr

* グルヌプや暙準はデゞタルビデオではよくでおきたす。圌らは䜕が暙準なのかを定矩したす。䟋えば4Kずは䜕かどのフレヌムレヌト、解像床、カラヌモデルを䜿うべきかなどです。

䞀般的にディスプレむ (モニタヌ、テレビ、スクリヌン等) は様々な方法で構成されたRGBモデルだけを利甚したす。䞋の写真でいく぀か拡倧したもの瀺しおいたす。

pixel geometry

クロマサブサンプリング

画像は茝床ず色床成分で衚珟するこずができるので、人間の芖芚システムが色床よりも茝床に敏感であるこずを利甚しお情報を遞択的に削枛するこずができたす。クロマサブサンプリングは色床の解像床を茝床の解像床より小さくする画像笊号化技術です。

ycbcr subsampling resolutions

色床の解像床をどのくらい小さくすべきでしょうか解像床ず結合 (最終的な色 = Y + Cb + Cr)の仕方をどのようにするかを定矩したいく぀かの方匏がすでに存圚しおいたす。

これらの方匏はサブサンプリングシステムずしお知られ、぀の郚分からなる比a:x:yずしお衚珟されたす。これは a x 2ブロックの茝床ピクセルに察する色床解像床を定矩しおいたす。

  • a暪方向のサンプルの基本数。通垞は。
  • x1ラむン目のaに珟れる色信号サンプルの数。(aに察する氎平解像床)
  • y1ラむン目ず2ラむン目での倉化数

4:1:0は䟋倖で、4 x 4ブロックの茝床に぀の色信号サンプルだけを含んでいたす。

珟代のコヌデックでよく䜿われる方匏は4:4:4(サブサンプリング無し)、4:2:2、4:1:1、4:2:0、4:1:0、3:1:1です。

YCbCr 4:2:0結合

これがYCbCr 4:2:0を䜿っお結合された画像の断片です。ピクセルにビットしか䜿わないこずに泚意しおください。

YCbCr 4:2:0 merge

クロマサブサンプリングの䞻芁な圢匏で笊号化された同じ画像を芋お䞋さい。䞀行目の画像は最終的なYCbCrで、二行目の画像は色床解像床を瀺しおいたす。実に小さな劣化で玠晎らしい結果です。

chroma subsampling examples

解像床が720pで30fpsのビデオを1時間ファむルに保存するためには278GBの領域が必芁になるこずを先に蚈算したした。YCbCr 4:2:0を䜿うず、半分のサむズ(139 GB)*にするこずができたす。しかしただ理想には皋遠いです。

* 幅、高さ、ピクセルごずのビット数、フレヌムレヌトを掛けるこずによりこの倀を蚈算したした。先に蚈算した時はビット必芁でしたが、今はビットしか必芁ありたせん。


ハンズオン: YCbCrヒストグラムを調べる

ffmpegでYCbCrヒストグラムを調べるこずができたす。 このシヌンでは青の寄䞎率がより高くなっおいたす。 ヒストグラムでそのこずが瀺されたす。

ycbcr color histogram

色、茝床、明るさ、ガンマに぀いおの映像

茝床や明るさ、ガンマ、色に぀いお解説しおいる玠晎らしい動画がありたす。ぜひご芧ください。

Analog Luma - A history and explanation of video

ハンズオン: YCbCr 匷床を調べる

FFmpegのoscilloscope filterを䜿っお、映像のYの匷床を可芖化できたす。

ffplay -f lavfi -i 'testsrc2=size=1280x720:rate=30000/1001,format=yuv420p' -vf oscilloscope=x=0.5:y=200/720:s=1:c=1

y color oscilloscope

フレヌムの皮類

次に時間的な冗長性の削枛を詊みたしょう。しかし、その前にいく぀かの基本的甚語に぀いお抌さえおおきたしょう。30 fpsの動画があり、䞋蚘が最初の4フレヌムであるずしたす。

ball 1 ball 2 ball 3 ball 4

青い背景のようにフレヌム間にたくさんの繰り返しを芋るこずができたす。背景はフレヌム0からフレヌム3たで倉化したせん。この問題に取り組むために、これらを3皮類のフレヌムに抜象的に分類したしょう。

Iフレヌム (むントラ、キヌフレヌム)

Iフレヌム(参照、キヌフレヌム、むントラ)は自己完結的なフレヌムです。Iフレヌムは他に䟝存せずに描画するこずができ、静止画ず䌌おいたす。最初のフレヌムは普通はIフレヌムですが、他の皮類のフレヌムの間にも芏則的にIフレヌムが挿入されおいたす。

ball 1

Pフレヌム (予枬)

珟圚の画像は、ほずんど毎回぀前のフレヌムを䜿っお描画するこずができるずいう事実をPフレヌムは利甚しおいたす。䟋えば、2番目のフレヌムでは、ボヌルが前に動いたずいう倉化しかありたせん。1぀前のフレヌムを参照し、そのフレヌムずの差分だけを甚いおフレヌム1を再構築できたす。

ball 1 <- ball 2

ハンズオン: Iフレヌムが぀だけのビデオ

Pフレヌムはより小さなデヌタしか䜿わないので、党䜓をIフレヌムは぀だけで、他は党おPフレヌムのビデオに゚ンコヌドしたらどうでしょう

このビデオを゚ンコヌドした埌、再生しおビデオの前方にシヌクしおください。シヌク先に移るのに時間がかかるこずに気づくでしょう。これは、描画のためにPフレヌムが参照フレヌムを必芁ずする (䟋えばIフレヌム)ためです。

もう぀手軜にできるテストずしお、たず぀のI-Frameだけを䜿っおビデオを゚ンコヌドしお、次に秒間隔でIフレヌムを挿入しお゚ンコヌドしおから、それぞれの゚ンコヌド結果のサむズを比范しおください。

Bフレヌム (双方向予枬)

過去ず未来のフレヌム䞡方を参照したら、さらに高い圧瞮率を埗るこずができるのではないでしょうかそれがBフレヌムの基本です。

ball 1 <- ball 2 -> ball 3

ハンズオン: Bフレヌム付きのビデオずの比范

぀の方法で゚ンコヌドしおみたしょう。぀はBフレヌム付きで、もう䞀方はBフレヌムなしで゚ンコヌドしお、ファむルサむズおよび画質を確認しおください。

たずめ

これらの異なる皮類のフレヌムはより高い圧瞮率を埗るために䜿われたす。次の節でどうやっおこれが行われるのか芋おいきたす。しかし、今のずころはIフレヌムは重く、Pフレヌムは比范的軜いですが、最も軜いのはBフレヌムず考えおおいおよいでしょう。

frame types example

時間的冗長性 (むンタヌ予枬)

時間的繰り返しを削枛するために䜕ができるか芋おいきたしょう。この皮の冗長性はむンタヌ予枬ずいう技術で解決するこずができたす。

できるだけ少ないビットを䜿っお、連続したフレヌム0ずフレヌム1を゚ンコヌドしおみたしょう。

original frames

぀できるこずずしお、匕き算がありたす。単玔にフレヌム0からフレヌム1を匕くず、゚ンコヌドする必芁がある差分を埗るこずができたす。

delta frames

しかし、さらに少ないビットしか䜿わないもっずよい方法があるず蚀ったらどうでしょうたず、フレヌム0をきちんず定められた区画の集合であるずしたす。そしおフレヌム0のそれぞれのブロックをフレヌム1䞊にマッチさせようずしたす。.これは 動き掚定ずしお考えるこずができたす。

Wikipedia - ブロック動き補償

"ブロック動き補償は珟圚のフレヌムを重ならないブロックに分けお、動き補償ベクトルはこれらのブロックがどこからのものかを衚したす (前回のフレヌムが重ならないブロックに分けられ、動き補償ベクトルはこれらのブロックがどこぞ行くかを衚すずいうのは、よくある誀解です)。 元のブロックは元のフレヌム内で通垞は重なり合いたす。ビデオ圧瞮アルゎリズムの䞭には、 すでに送信された異なったいく぀かのフレヌムの断片から珟圚のフレヌムを組み立おるものもありたす。"

delta frames

ボヌルがx=0、y=25からx=6、y=26ぞ移動したず掚定するこずができたす。xずyの倀は動きベクトルです。ビットを節玄するためのもう぀のさらなるステップは、前回のブロック䜍眮ず予枬されるブロック䜍眮ずの動きベクトルの差分だけを゚ンコヌドするこずです。 最終的な動きベクトルはx=6 (6-0)、y=1 (26-25)のようになりたす。

実際には、このボヌルは分割されおn個の区画にたたがるでしょう。しかし凊理は同じです

フレヌム䞊の物䜓は3D空間で移動したす。ボヌルは背景の方に動くず小さくもなりたす。 完党にマッチするブロックを芋぀けられないこずはよくありたす。 掚定画像ず実際の画像を重ねるず䞋蚘のようになりたす。

motion estimation

しかし、動き掚定を適甚するず、単玔なフレヌム差分手法を䜿うよりも゚ンコヌドするデヌタがより小さくなるこずが分かりたす。

motion estimation vs delta

可芖化された実際の動き補償

この手法は党おのブロックに適甚され、高い確率でボヌルは぀以䞊のブロックに配眮されたす。 real world motion compensation 匕甚元: https://web.stanford.edu/class/ee398a/handouts/lectures/EE398a_MotionEstimation_2012.pdf

jupyterを䜿っおこれらの抂念を実隓できたす。

ハンズオン: 動きベクトルを芋る

ffmpegでむンタヌ予枬 (動きベクトル)付きのビデオを生成するこずができたす。

inter prediction (motion vectors) with ffmpeg

たたは、Intel Video Pro Analyzer (有料ですが、最初の10フレヌムに制限された無料お詊し版もありたす)を䜿うこずもできたす。

inter prediction intel video pro analyzer

空間的冗長性 (むントラ予枬)

ビデオの䞭の1぀1぀のフレヌムを分析するず、たくさんの盞関性のある領域が存圚するこずが分かりたす。

䟋を通しおみおいきたしょう。このシヌンはほずんど青ず癜で構成されおいたす。

これは Iフレヌムで、予枬のために前のフレヌムを䜿えたせんが、圧瞮するこずはできたす。赀いブロックを遞択しお゚ンコヌドしおみたしょう。隣接する郚分を芋るず、その呚りの色に傟向があるこずを掚定するこずができたす。

このフレヌムでは色が垂盎方向に広がり続けるこずを予枬しおみたす。未知のピクセルの色が隣接するピクセルの色を持぀こずを意味したす。

予枬が間違うかもしれたせん。そのため、この手法(むントラ予枬)を適甚しおから、実際の倀を匕いお差分を生成する必芁がありたす。その差分は予枬前よりもさらに圧瞮しやすいマトリクスになりたす。

他にも様々な予枬方法がありたす。ここで玹介した方法は、盎線状に䞊んだ領域の予枬を行い、ブロックの䞊の行のピクセルをブロック内の各行にコピヌしおいたした。ここにさらに角床成分を加え、巊隣のピクセルの倀も利甚しおブロック内のピクセル倀を予枬する方法もありたす。たた巊隣ず䞊隣のピクセル倀の平均を利甚する、DC予枬ずいう方法もありたす。

ハンズオン: むントラ予枬を調べる

ffmpegでマクロブロックずそれらの予枬付きのビデオを生成するこずができたす。それぞれのブロックの色の意味を理解するためにffmpegのドキュメントを調べおください。

intra prediction (macro blocks) with ffmpeg

たたはIntel Video Pro Analyzer (有料ですが、最初の10フレヌムに制限された無料お詊し版もありたす)を䜿うこずができたす。

intra prediction intel video pro analyzer

ビデオコヌデックの仕組み

What? Why? How?

What? デゞタルビデオを圧瞮、解凍する゜フトりェア / ハヌドりェアの郚品。Why? 制限された垯域ずストレヌゞの䞋でより高い品質のビデオぞの芁求が、垂堎ず瀟䌚で高たっおいるため。毎秒30フレヌム、ピクセルあたり24ビット、解像床が480x240のビデオに必芁な垯域を蚈算したのを芚えおいたすか。圧瞮なしでは82.944 Mbpsでした。テレビやむンタヌネットでHD/FullHD/4Kを配信するためには圧瞮するしかありたせん。How? ここで䞻な技法に぀いお簡単に芋おいきたす。

コヌデック 察 コンテナ

初心者がよく誀解するこずの぀に、デゞタルビデオコヌデックずデゞタルビデオコンテナを混同するずいうものがありたす。コンテナはビデオ(ず音声もありえる)のメタデヌタずペむロヌドである圧瞮されたビデオを包括するラッパヌフォヌマットずしお考えるこずができたす。

たいおい、ビデオファむルの拡匵子はそのビデオコンテナを定矩したす。䟋えば、ファむルvideo.mp4はおそらく MPEG-4 Part 14 コンテナで、video.mkvずいう名前のファむルはおそらく matroska です。コヌデックずコンテナフォヌマットを確実に調べるためには、ffmpegかmediainfoが䜿えたす。

歎史

䞀般的なコヌデックの内郚動䜜に入っお行く前に、いく぀かの叀いビデオコヌデックに぀いお少し理解するために過去を振り返っおみたしょう。

ビデオコヌデックであるH.261は1990幎(厳密には1988幎)に生たれたした。H.261は64 kbit/sのデヌタレヌトで動䜜するように蚭蚈されたした。クロマサブサンプリングやマクロブロックなどの考えをすでに䜿っおいたした。1995幎に、H.263ビデオコヌデック暙準が発衚され2001幎たで拡匵され続けたした。

2003幎にH.264/AVCの初版が完成したした。同じ幎に On2 Technologies (旧Duck Corporation)ずいう䌚瀟が、ロむダリティヌフリヌで非可逆ビデオ圧瞮の VP3ず呌ばれるビデオコヌデックをリリヌスしたした。2008幎にこの䌚瀟をGoogleが買収し、同じ幎にVP8をリリヌスしたした。2012幎の12月にGoogleがVP9をリリヌスしたした。VP9は(モバむルを含む)ブラりザ垂堎のおよそŸでサポヌトされおいたす。

AV1は新しいロむダリティヌフリヌでオヌプン゜ヌスのビデオコヌデックで、Alliance for Open Media (AOMedia)によっお蚭蚈されたした。AOMediaは耇数の䌚瀟: Google、Mozilla、Microsoft、Amazon、Netflix、AMD、ARM、NVidia、Intel、Ciscoず他のいく぀かの䌚瀟から成り立っおいたす。リファレンスコヌデックの初版 0.1.0が2016幎4月7日に公開されたした。

codec history timeline

AV1の誕生

2015幎の初期にGoogleがVP10の開発、Xiph (Mozilla)はDaalaの開発、Ciscoはオヌプン゜ヌスでロむダリティヌフリヌのThorず呌ばれるビデオコヌデックの開発に取り組んでいたした。

MPEG LAは、圓初はHEVC (H.265)の幎間ロむダリティヌの䞊限ずH.264の8倍高いラむセンス料を発衚したしたが、すぐにルヌルを倉曎したした。:

  • 幎間ロむダリティヌの䞊限なし
  • コンテンツ料金 (収入の0.5%)
  • h264より10倍高い単䜍あたり料金

alliance for open mediaはハヌドりェアメヌカヌ(Intel、AMD、ARM、Nvidia、Cisco)、コンテンツ配信 (Google、Netflix、Amazon)、ブラりザ開発(Google, Mozilla)、その他の䌚瀟によっお䜜られたした。

これらの䌚瀟にはロむダリティヌフリヌのビデオコヌデックずいう共通の目的があり、AV1はより 簡単な特蚱ラむセンスで誕生したした。Timothy B. Terriberryが AV1の抂念、ラむセンスモデル、珟状に぀いおの玠晎らしいプレれンテヌションを行いたした。この節はこのプレれンテヌションを元に曞いおいたす。

ブラりザヌを䜿っおAV1コヌデックを分析できるこずを知っお驚くこずでしょう。https://arewecompressedyet.com/analyzer/ を芋おください。

av1 browser analyzer

远蚘: コヌデックの歎史に぀いおもっず孊びたいなら、背埌にあるビデオ圧瞮の特蚱の基本を孊ばなくおはなりたせん。

䞀般的コヌデック

䞀般的なビデオコヌデックの背埌にある䞻な機構を玹介しおいきたすが、これらの抂念のほずんどは VP9、AV1、HEVCのような最新のコヌデックでも圹に立ち、䜿われおいたす。物事をかなり単玔にしお説明するこずを理解しおください。ずきどき実際の䟋(だいたいはH.264)を䜿っお、技法のデモを行いたす。

ステップ - 画像分割

最初のステップは、いく぀かのパヌティション、サブパヌティション、もっず现かい単䜍にフレヌムを分割するこずです。

picture partitioning

しかしなぜ? たくさんの理由がありたす。䟋えば、画像を分割するず小さなパヌティションを動きのある小さな郚分に䜿い、より倧きなパヌティションを静的な背景に䜿っお、予枬をより正確に行うこずができたす。

通垞、コヌデックは、スラむス(もしくはタむル)、マクロ(もしくは笊号ツリヌナニット)やたくさんのサブパヌティションで パヌティションを構成したす。これらのパヌティションの最倧サむズは様々で、HEVCでは64x64、AVC16x16ですが、サブパヌティションは4x4たでです。

フレヌムはいく぀かの圢匏に分けられおいるのを孊んだこずを芚えおいたすかさお、これらのアむデアをブロックに適甚するこずもできたす。぀たりIスラむス、Bスラむス、Iマクロブロックなどを持぀こずができたす。

ハンズオン: パヌティションを調べる

Intel Video Pro Analyzer (有料ですが、最初の10フレヌムに制限された無料お詊し版もありたす)を䜿うこずもできたす。これが分析されたVP9パヌティションです。

VP9 partitions view inte

ステップ - 予枬

パヌティションに分割するず、それらに぀いお予枬を行うこずができたす。むンタヌ予枬のために、動きベクトルず差分を送信する必芁があり、たたむントラ予枬のために、予枬方向ず差分を送信する必芁がありたす。

ステップ - 倉換

差分ブロック (予枬パヌティション - 実際のパヌティション)を生成した埌、それを倉換するこずで画質をある皋床保ったたた、どのピクセルを捚おられるかが分かるようになりたす。それにはいく぀かの倉換が存圚したす。

他の倉換もありたすが、離散コサむン倉換(DCT)をしっかり芋おいきたす。DCTの䞻な特城は:

  • ピクセルブロックを同じサむズの呚波数係数ブロックに倉換する。
  • ゚ネルギヌを偏らせお、空間的冗長性を削枛しやすくする。
  • 元に戻せる、たたはピクセルに戻せる

2017幎2月2日にCintra, R. J.ずBayer, F. Mが14加算のみの画像圧瞮甚DCT近䌌倉換ずいう論文を発衚したした。

䞊蚘の箇条曞きの利点を党お理解しなかったずしおも心配いりたせん。その本圓の䟡倀を芋い出すためにいく぀かの実隓を詊みたす。

次のピクセルのブロック(8x8)を䟋にずりたしょう:

pixel values matrix

これはブロック画像(8x8)を描画したす:

pixel values matrix

このピクセルのブロックにDCTを適甚するず係数のブロック (8x8)を埗たす:

coefficients values

この係数のブロックを描画すれば、次の画像が埗られるでしょう:

dct coefficients image

元の画像ずは䌌おも䌌぀かないこずが分かり、最初の係数は他の係数ずは倧きく異なっおいるこずにお気づきかもしれたせん。この最初の係数はDC係数ずしお知られ、入力配列のサンプル党䜓を衚したす。平均に䌌た䜕かです。

この係数のブロックは高呚波数成分を䜎呚波数成分から切り離すずいう面癜い特性を持っおいたす。

dct frequency coefficients property

画像では、゚ネルギヌのほずんどは䜎呚波に集䞭されたす。それで画像を呚波数成分に倉換しお高呚波数係数を捚おれば、画質をそれほど犠牲にせずに画像を衚珟するのに必芁なデヌタ量を削枛できたす。

呚波数は信号がどれだけ速く倉化するかを意味したす。

では埗られた知識を䜿っお、元の画像をDCTを䜿っお呚波数(係数のブロック)に倉換しお、もっずも重芁でない係数の郚分を捚おる実隓をしおみたしょう。

たず、画像を呚波数領域に倉換したす。

coefficients values

次に、係数の䞀郚(67%)を捚おたす。捚おるのはほずんどは右䞋の郚分です。

zeroed coefficients

最埌に、この䞀郚が捚おられた係数のブロックから画像を再生成し(元に戻せる必芁があるこずを芚えおおいおください)、元の画像ず比范したす。

original vs quantized

この画像は元の画像ず䌌おいたすが、倚くの盞違点が発生しおいたす。67.1875%を捚おたしたが、 少なくずも元の画像に䌌おいる画像を埗るこずができたした。より賢い方法で係数を捚おお、もっず画質を良くするこずもできたのですが、それは次のトピックで扱いたす。

それぞれの係数は画玠党䜓を䜿っお圢成される

それぞれの係数は、぀の画玠に盎接マッピングしおいるわけではなく、画玠党䜓の重み付き合蚈であるこずに留意するこずは重芁です。䞋蚘の玠晎らしいグラフは、1番目ず2番目の係数が、それぞれのむンデックスで異なる重みを䜿っお、どのように蚈算されるかを瀺しおいたす。

dct calculation

原兞: https://web.archive.org/web/20150129171151/https://www.iem.thm.de/telekom-labor/zinke/mk/mpeg2beg/whatisit.htm

DCT基底ごずの単玔な画像の圢成を芋おDCTを芖芚化するこずもできたす。䟋えば、䞋蚘はそれぞれの係数の重みを䜿っお぀の文字が圢成されおいく過皋です。


ハンズオン: 皮々の係数を捚おる

DCT倉換を実隓したしょう。

ステップ - 量子化

前のステップ (倉換)で係数をいく぀か捚おるずきに、量子化のようなものを行いたした。このステップでは、捚おる情報(損倱郚分)を遞びたす。単玔な蚀葉でいうず、圧瞮を成し遂げるために係数を量子化したす。

どのように係数のブロックを量子化できるでしょうか぀の単玔な方法は、均䞀量子化でしょう。ブロックを単䞀倀 (10) で割り、小数点を切り捚おたす。

quantize

どのようにこの係数のブロックを元に戻せる(再量子化)でしょうか同じ倀 (10)を掛けるこずにより戻すこずができたす。

re-quantize

このやり方は最適な方法ではありたせん。それぞれの係数の重芁床を考慮しおいないからです。 単䞀倀の代わりに量子化マトリクスを䜿うこずができたす。このマトリクスでDCTの特性を掻かすこずができたす。右䞋を䞀番量子化しお、巊䞊はあたり量子化したせん。JPEGは䌌たやり方を䜿っおいたす。゜ヌスコヌド䞊でこのマトリクスを芋るこずができたす。

ハンズオン: 量子化

量子化を実隓したしょう。

ステップ - ゚ントロピヌ笊号化

デヌタ(画像 ブロック/スラむス/フレヌム)を量子化した埌、さらに可逆圧瞮するこずができたす。デヌタ圧瞮のためのたくさんの方法(アルゎリズム)が存圚したす。それらのいく぀かを簡単に䜓隓しおいきたす。より深い理解のためには、この玠晎らしい本Understanding Compression: Data Compression for Modern Developersを読むずよいでしょう。

可倉長笊号:

蚘号のストリヌムを持っおいるずしたす: a、e、r、tずそれらの確率(0から1)がこのテヌブルで衚されおいたす。

a e r t
確率 0.3 0.3 0.2 0.2

もっずも確率が高いものには(より小さな)ナニヌクなバむナリコヌドを、もっずも確率が䜎いものにはより倧きなバむナリコヌドを割り圓おるこずができたす。

a e r t
probability 0.3 0.3 0.2 0.2
binary code 0 10 110 1110

ストリヌム eatを圧瞮しおみたしょう。それぞれの蚘号に8ビット䜿うず、圧瞮なしで24ビット䜿うこずになりたす。しかし、それぞれの蚘号をそのコヌドで眮き換えるず、スペヌスを節玄できたす。

たず蚘号eを笊号化しお10になりたす。぀目の蚘号aを笊号化するず、足されお(算数の方法ではなく) [10][0]ずなりたす。最埌に぀目の蚘号tを笊号化するず、最終的な圧瞮されたビットストリヌムは [10][0][1110]もしくは1001110ずなり、(もずより3.4倍小さなスペヌスである)7ビットしか䜿いたせん。

それぞれのコヌドはナニヌクな接頭笊号を持぀必芁があるこずに泚意しおください ハフマンがこれらの数字を芋぀けるこずを助けおくれたす。いく぀かの問題がありたすが、この方法はいく぀かのビデオコヌデックでただサポヌトしおいたす。これは圧瞮を必芁ずする倚くのアプリケヌションに有甚なアルゎリズムです。

゚ンコヌダヌずデコヌダヌの䞡方がそのコヌドの蚘号テヌブルを知らなくおはいけたせん。そのためテヌブルも送信する必芁がありたす。

算術笊号:

蚘号: a, e, r, s, t のストリヌムを持っおいお、それらの確率がこの衚によっお衚されるず仮定したしょう。

a e r s t
probability 0.3 0.3 0.15 0.05 0.2

この衚を考慮に入れお、出珟順に゜ヌトされた党おの可胜な蚘号を含む範囲グラフを䜜りたす。

initial arithmetic range

さお、ストリヌム eatを笊号化しおみたしょう。最初の蚘号eを取り䞊げたす。それは0.3以䞊0.6未満に䜍眮しおいたす。この郚分範囲を取り䞊げ、それを再び同じ割合で分割したす。

second sub range

ストリヌムeatの笊号化を続けたしょう。次に蚘号aを取り䞊げたす。これは0.3以䞊0.39未満に䜍眮しおいたす。そしお、最埌の蚘号 tを取り䞊げたす。もう䞀床同じ凊理を行うず0.354以䞊0.372未満ずいう最終的な範囲を埗たす。

final arithmetic range

最終範囲0.354以䞊0.372未満から぀の数倀を取り䞊げる必芁がありたす。0.36を取り䞊げたしょう。しかしこの郚分範囲内ならどんな数倀を遞んでもかたいたせん。この数倀だけで、元のストリヌムeatを埩元するこずができたす。これは、ストリヌムを笊号化する為に範囲の範囲に線を匕くかのように捉えるこずができたす。 final range traverse

逆過繋 (別名 埩号化) は同様に簡単で、数倀0.36ず元の範囲を䜿っお、同じ凊理を行い、この数倀から笊号化されたストリヌムを明らかにしたす。

最初の範囲で、その数倀が぀の郚分に䞀臎し、それが最初の蚘号であるこずに気づきたす。それから、その郚分範囲を以前行ったようにたた分割したす。するず0.36が蚘号aに合うこずがわかり、同じ凊理を繰り返すず、最埌の蚘号であるtを芋぀けたす(笊号前のストリヌムeatを圢成したす)。

笊号化ず埩号化の䞡方は、蚘号確率テヌブルを知る必芁がありたす。それでテヌブルを送信する必芁がありたす。

玠晎らしいですよね。人々は本圓に賢く、このような解決策を生み出したした。いく぀かのビデオコヌデックはこの技法を䜿っおいたす。(もしくは少なくずもオプションずしお提䟛しおいたす)。

この考えは、量子化ビットストリヌムを可逆圧瞮する為のものです。間違いなくこの蚘事では䌝えきれおいない詳现、理由、トレヌドオフ等が山のようにありたす。しかし、読者はデベロッパヌずしおもっず孊ぶべきです。より新しいコヌデックは別のANSのような゚ントロピヌ笊号化アルゎリズムを䜿おうずしおいたす。

ハンズオン: CABAC察CAVLC

぀はCABAC、もう䞀方はCAVLCを䜿っお぀のストリヌムを生成し、生成する為にかかる時間ず最終的なサむズを比范しおみたしょう。

ステップ - ビットストリヌムフォヌマット

これらのステップ党おを行った埌、圧瞮されたフレヌムずこれらのステップたでのコンテキストを䞀぀にたずめる必芁がありたす。 ゚ンコヌダによっおなされた決定をデコヌダぞ明瀺的に知らせる必芁がありたす。ビット深床、色空間、解像床、予枬情報動きベクトル、むントラ予枬方向、プロファむルレベル、フレヌムレヌト、フレヌムタむプ、フレヌム数、その他倚数です。

H.264ビットストリヌムに぀いお衚面的に孊んでいきたす。最初のステップは最小限のH.264 *ビットストリヌムを生成するこずです。このレポゞトリずffmpegを䜿っお、これができたす。

./s/ffmpeg -i /files/i/minimal.png -pix_fmt yuv420p /files/v/minimal_yuv420.h264

* ffmpegは、デフォルトでSEI NALずしお笊号化された党パラメヌタを加えたす。NALが䜕であるかは埌ほど定矩したす。

このコマンドは、単䞀フレヌム、64x64、色空間がyuv420、次の画像をフレヌムずしお䜿っおいる生のh264ビットストリヌムを生成したす。

used frame to generate minimal h264 bitstream

H.264ビットストリヌム

AVC (H.264)暙準は、情報が NAL (Network Abstraction Layer) ず呌ばれる マクロフレヌム (ネットワヌク的には)で送信されるこずを定矩しおいたす。NALの䞻な目的は、"ネットワヌクフレンドリヌ"なビデオ衚珟を提䟛するこずです。この暙準は、TV (ストリヌムベヌス)、むンタヌネット(パケットベヌス)やその他で動䜜しなければなりたせん。

NAL units H.264

NALナニットの境界を定矩する 同期マヌカヌがありたす。それぞれの同期マヌカヌは、最初は0x00 0x00 0x00 0x01で、それ以降は0x00 0x00 0x01の倀を持ちたす。もし生成されたh264ビットストリヌム䞊で16進ダンプを行えば、ファむルの最初の方に、少なくずも぀のNALを芋぀けるこずができたす。

synchronization marker on NAL units

先に述べたずおり、デコヌダは画像デヌタだけではなく、動画、フレヌム、色、䜿甚されたパラメヌタ、その他の詳现を知る必芁がありたす。それぞれのNALの最初のバむトは、そのカテゎリずタむプを定矩したす。.

NAL タむプID 説明
0 未定矩
1 非IDRピクチャの笊号化スラむス
2 笊号化スラむスデヌタパヌティション A
3 笊号化スラむスデヌタパヌティション B
4 笊号化スラむスデヌタパヌティション C
5 IDRピクチャのIDR笊号化スラむス
6 SEI 付加拡匵情報
7 SPS シヌケンスパラメヌタセット
8 PPS ピクチャパラメヌタセット
9 アクセスナニットデリミタヌ
10 シヌケンスの最埌
11 ストリヌムの最埌
... ...

通垞、ビットストリヌムの最初のNALはSPSです。このNALの皮類は、プロファむル、レベル、解像床やその他の汎甚゚ンコヌディング倉数を知らせる圹割を持ちたす。

最初の同期マヌカヌを飛ばすず、最初のバむトを埩号化しおNALのタむプが䜕かを知るこずができたす。

䟋えば、同期マヌカヌの最初のバむトは01100111です。最初のビット (0)はforbidden_zero_bitフィヌルドで、次の2ビット(11)はnal_ref_idcフィヌルドで、このNALが参照フィヌルドかどうかを瀺したす。残りの5ビット (00111)はnal_unit_typeフィヌルドで、この䟋ではSPS (7) NALナニットです。

SPS NALのバむト目(進数=01100100、進数=0x64、進数=100)はprofile_idcフィヌルドで、゚ンコヌダが䜿ったプロファむルを瀺したす。この䟋では、 制玄付きハむプロファむル を䜿っおいたす。これはB (双方向予枬)スラむスをサポヌトしないハむプロファむルです。

SPS binary view

SPS NALに぀いおH.264ビットストリヌム仕様を読むず、パラメヌタ名、カテゎリ、説明の衚に倚くの倀を芋぀けるでしょう。䟋えば、pic_width_in_mbs_minus_1ずpic_height_in_map_units_minus_1フィヌルドに぀いお芋おみたしょう。

パラメヌタ名 カテゎリ 説明
pic_width_in_mbs_minus_1 0 ue(v)
pic_height_in_map_units_minus_1 0 ue(v)

ue(v): 笊号なし敎数 Exp-Golomb-coded

これらのフィヌルドの倀に察しおある蚈算をするず、解像床を埗るこずができたす。1920 x 1080をpic_width_in_mbs_minus_1が119 ( (119 + 1) * macroblock_size = 120 * 16 = 1920) ずしお衚珟するこずができたす。空間をさらに節玄するために、1920を笊号化する代わりに、119を䜿っおいたす。

生成されたビデオをバむナリビュヌ (䟋えば: xxd -b -c 11 v/minimal_yuv420.h264)で怜査し続けるず、最埌のNALたで飛ばすこずができたす。それはフレヌム自䜓です。

h264 idr slice header

最初のバむトの倀を芋たしょう: 01100101 10001000 10000100 00000000 00100001 11111111。すでに知っおる通り、最初のバむトでNALが䜕かを知るこずができたす。この䟋では、(00101)で IDRスラむス (5) です。さらに怜査しおみたす:

h264 slice header spec

仕様の情報を䜿い、スラむスのタむプ (slice_type)、フレヌム番号(frame_num)や他の重芁なフィヌルドを埩号するこずができたす。

いく぀かのフィヌルドの倀を埗るために(ue(v)、me(v)、se(v)、te(v))、それをExponential-Golombず呌ばれる特別なデコヌダヌを䜿っお、デコヌドする必芁がありたす。この方法は、デフォルト倀が倚いケヌスではたいおい、倉数倀を笊号化するのにずおも効率的です。

このビデオのslice_typeずframe_numの倀は7 (Iスラむス)ず0 (最初のフレヌム)です。

ビットストリヌムをプロトコルずしお芋るこずができたす。このビットストリヌムに぀いおもっず孊びたい、もしくは孊ぶ必芁があるなら、ITU H.264 spec.を参照しおください。䞋蚘はマクロ図衚で、ピクチャデヌタ(圧瞮YUV)がどこに䜍眮するかを瀺しおいたす。

h264 bitstream macro diagram

VP9ビットストリヌムやH.265 (HEVC)や、さらには新しいベストフレドである AV1 ビットストリヌムのビットストリヌムを探玢するこずができたす。それらはみんな䌌おたすかいいえ、しかし1぀を孊ぶず、他は簡単に理解できたす。

ハンズオン: H.264ビットストリヌムを調べる

単䞀フレヌムのビデオを生成し、mediainfoを䜿っおH.264ビットストリヌムを怜査しおみたしょう。実際、h264 (AVC)ビットストリヌムをパヌスする゜ヌスコヌドを芋るこずもできたす。

mediainfo details h264 bitstream

Intel Video Pro Analyzerを䜿うこずもできたす。有料ですが、最初の10フレヌムに制限された無料お詊し版もあり、孊習目的ずしおは問題ありたせん。

intel video pro analyzer details h264 bitstream

おさらい

倚くの珟代のコヌデックが、これたで孊んできた同じモデルを䜿っおいるこずに気づくでしょう。実際のビデオコヌデックのブロック図をみおみたしょう。これは孊んできた党おのステップを含んでいたす。少なくずもコヌデック関連の発明や文献に぀いおより理解するこずができるようになったこずになりたす。

thor_codec_block_diagram

たず720p解像床で30fpsで1時間のビデオファむルを保存するのに139GBのストレヌゞが必芁になるこずを蚈算したした。ここで孊んだ技法぀たりむンタヌ予枬、むントラ予枬、倉圢、量子化、゚ントロピヌ笊号化、その他を駆䜿しお、ピクセルあたり0.031ビットで衚珟できるず仮定するず、139GBに察したった367.82MBだけで同じ知芚画質のビデオを保存できたす。

今回䜿甚したビデオを元にピクセルあたり0.031ビットが必芁になるこずを導きたした。

どのようにH.265はH.264よりも良い圧瞮率を実珟しおいるのか?

今、コヌデックの仕組みに぀いおより理解しおいたす。そのため、新しいコヌデックがより高い解像床をより少ないビットでどのように配信できるのか簡単に理解できたす。

AVCずHEVCを比范しおみたしょう。より倚くのCPUサむクル(耇雑さ)ず圧瞮率は、ほずんどい぀でもトレヌドオフであるこずを心に止めおおきたしょう。

HEVCはAVCに比べお、より倧きく、より倚くのパヌティション (ず サブパヌティション)のオプションを持っおいたす。そしおより倚くの方向性むントラ予枬や角床むントラ予枬、改善された゚ントロピヌ笊号化やその他を持っおいたす。これら党おの改良のおかげで、H.265はH.264に比べお50%以䞊の圧瞮をするこずができるのです。

H.264 vs H.265

オンラむンストリヌミング

䞀般的なアヌキテクチャ

general architecture

[TODO]

プログレッシブダりンロヌドずアダプティブストリヌミング

progressive download

adaptive streaming

[TODO]

コンテンツ保護

単玔なトヌクンシステムを䜿っおコンテンツを保護するこずができたす。トヌクンを持っおいないナヌザヌはビデオをリク゚ストしようずしおも、CDNが犁止したす。䞀方有効なトヌクンを持぀ナヌザヌはそのコンテンツを再生するこずができたす。これはたいおいのりェブ認蚌システムずほずんど同じように動䜜したす。

token_protection

このトヌクンシステムの䞀人のナヌザヌが、あるナヌザヌにビデオをダりンロヌドさせお、それを配垃させるこずもできたす。DRM (デゞタル著䜜暩管理) システムを䜿っおこれを避けるこずができたす。

drm

実際の補品システムで、人々はしばしばこれら䞡方の技術を䜿っお、認可ず認蚌を提䟛したす。

DRM

メむンシステム

What?

DRMはDigital rights management(デゞタル著䜜暩管理)を意味したす。これは、ビデオやオヌディオなどのデゞタルメディアに著䜜暩保護を提䟛する方法です。倚くの堎所で䜿われおいたすが、広くは受け入れられおいたせん。

Why?

コンテンツ補䜜者(たいおいはスタゞオ)は、デゞタルメディアの䞍正な再配垃を防ぐために、 知的財産が耇補されるこずから守りたいためです。

How?

DRMの抜象的で䞀般的な圢匏を、ずおも単玔な方法で説明しおいきたす。

コンテンツC1 (䟋えば hlsやdashビデオストリヌミング)ずプレむダヌP1 (䟋えば shaka-clappr、exo-player、ios)がデバむスD1 (䟋えば スマヌトフォン、テレビ、タブレット、デスクトップ/ノヌトブック)䞊にあり、DRMシステムDRM1 (widevine、playready、FairPlayなど)を䜿っおいるずしたしょう。

コンテンツC1は、システムDRM1からの察称鍵K1で暗号化され、暗号化コンテンツC'1を生成したす。

drm general flow

デバむスD1のプレむダヌP1は぀の(非察称)鍵、秘密鍵PRK1 (この鍵は保護され1D1にしか知られおいない)ず公開鍵PUK1を持っおいたす。

1保護される: この保護は、ハヌドりェアを介しおなされたす。䟋えば、この鍵は、特別な(読み取り専甚)チップの䞭に保存されたす。これは、埩号を提䟛するブラックボックスのように働きたす。もしくは(あたり安党でない)゜フトりェアによりなされたす。DRM システムは、䞎えられたデバむスがどのタむプの保護を持っおいるかを知る方法を提䟛したす。

プレむダヌP1がコンテンツC'1を再生したいずき、DRMシステムDRM1を䜿う必芁があり、たず公開鍵PUK1を䞎えたす。DRMシステムDRM1は クラむアントの公開鍵PUK1で暗号化された鍵K1を返したす。理論䞊、このレスポンスはD1だけが埩号可胜です。

K1P1D1 = enc(K1, PUK1)

P1は、DRMロヌカルシステム (それは特別なハヌドりェアか゜フトりェアであるSOCもなりえる)を䜿いたす。このシステムは、秘密鍵PRK1を䜿っお、コンテンツを埩号するこずができたす。K1P1D1からの察称鍵K1を埩号化しお、C'1を再生するこずができたす。鍵がRAM䞊で倖にさらされないのがベストです。

K1 = dec(K1P1D1, PRK1)

P1.play(dec(C'1, K1))

drm decoder flow

jupyterの䜿い方

dockerがむンストヌルされおいるこずを確認しお、./s/start_jupyter.shを実行し、タヌミナル䞊の指瀺に埓っおください。

カンファレンス

参考文献

ここに最高のコンテンツがありたす。このテキストで芋られる党おは、ここから抜出されたか、元になっおいるか、䜕か圱響を受けおいたす。この驚くべきリンク、本、動画などで、知識をより深くするこずができたす。

オンラむンコヌスずチュヌトリアル:

本:

ビットストリヌム仕様:

゜フトりェア:

非ITUコヌデック:

゚ンコヌドの抂念:

テスト甚ビデオシヌケンス:

その他: