diff --git a/README.md b/README.md
index 31876fb..21d6c24 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,5 @@
[ðšð³](/simplified-chinese/README-cn.md "Simplified Chinese")
+[ð¯ðµ](/japanese/README-ja.md "Japanese")
[![license](https://img.shields.io/badge/license-BSD--3--Clause-blue.svg)](https://img.shields.io/badge/license-BSD--3--Clause-blue.svg)
diff --git a/japanese/README-ja.md b/japanese/README-ja.md
new file mode 100644
index 0000000..04fa709
--- /dev/null
+++ b/japanese/README-ja.md
@@ -0,0 +1,928 @@
+[![license](https://img.shields.io/badge/license-BSD--3--Clause-blue.svg)](https://img.shields.io/badge/license-BSD--3--Clause-blue.svg)
+
+# ã¯ããã«
+
+ãããªæè¡ã®ããããå
¥éæžã§ãããœãããŠã§ã¢éçºè
ïŒãšã³ãžãã¢åãã§ããã**誰ã§ãç解ã§ããããã«**ãããã説æããããšæã£ãŠããŸãã [ãããªæè¡åå¿è
ã®ããã®ããã¯ãŒã¯ã·ã§ãã](https://docs.google.com/presentation/d/17Z31kEkl_NGJ0M66reqr9_uTG6tI5EDDVXpdPKVuIrs/edit#slide=id.p)ãããã®ã¢ã€ãã£ã¢ãçãŸããŸããã
+
+ã§ããã ã**ç°¡æœãªèšèãããããã®èŠèŠçèŠçŽ ãå®è³ªçãªäŸ**ã䜿ã£ãŠããã€ãã®ããžã¿ã«ãããªã®æŠå¿µã玹ä»ãã誰ã§ããã®ç¥èãåŸãæ©äŒãæäŸããããšãç®æšã§ããã©ãããèªç±ã«èšæ£ãææ¡ãéã£ãããæ¹åãããããŠãã ããã
+
+ããã€ãã®**ãã³ãºãªã³** ã»ã¯ã·ã§ã³ã§ã¯**dockerãã€ã³ã¹ããŒã«**ãããŠããã®ã¬ããžããªãã¯ããŒã³ãããŠããããšãå¿
èŠã§ãã
+
+```bash
+git clone https://github.com/leandromoreira/digital_video_introduction.git
+cd digital_video_introduction
+./setup.sh
+```
+> **泚æ**: `./s/ffmpeg` ã `./s/mediainfo` ã³ãã³ããèŠãããšããããŸããããããã®ããã°ã©ã ã® **ã³ã³ããåç** ãå®è¡ããŠããããšãæå³ããŸãããããã¯ãã§ã«å
šãŠã®å¿
èŠæ¡ä»¶ãæºãããŠããŸãã
+
+å
šãŠã®**ãã³ãºãªã³ã¯ãã®ã¬ããžããªãã¯ããŒã³ãããã©ã«ãã§å®è¡ããŠãã ãã**ã **jupyter examples**ã«ã€ããŠã¯ã`./s/start_jupyter.sh`ã§ãµãŒããŒãèµ·åããŠãURLãã³ããŒããŠããã©ãŠã¶ã«ãããå
¥åããŠãã ããã
+
+# å€æŽå±¥æŽ
+
+* DRMã·ã¹ãã ã®è¿œå
+* 1.0.0çã®ãªãªãŒã¹
+* ç°¡äœåèš³ã®è¿œå
+
+# ç®æ¬¡
+
+- [ã¯ããã«](#ã¯ããã«)
+- [ç®æ¬¡](#ç®æ¬¡)
+- [åºæ¬çšèª](#åºæ¬çšèª)
+ * [ã«ã©ãŒç»åã笊å·åããå¥ã®æ¹æ³](#ã«ã©ãŒç»åã笊å·åããå¥ã®æ¹æ³)
+ * [ãã³ãºãªã³: ç»åãšè²ã®å®éš](#ãã³ãºãªã³-ç»åãšè²ã®å®éš)
+ * [DVDã®ç»é¢ã¢ã¹ãã¯ãæ¯ã¯4:3](#dvdã®ç»é¢ã¢ã¹ãã¯ãæ¯ã¯43)
+ * [ãã³ãºãªã³: ãããªããããã£ã調ã¹ã](#ãã³ãºãªã³-ãããªããããã£ã調ã¹ã)
+- [åé·æ§é€å»](#åé·æ§é€å»)
+ * [è²ãæãããšç§ãã¡ã®ç®](#è²ãæãããšç§ãã¡ã®ç®)
+ + [ã«ã©ãŒã¢ãã«](#ã«ã©ãŒã¢ãã«)
+ + [YCbCrãšRGBéã®å€æ](#ycbcrãšrgbéã®å€æ)
+ + [ã¯ãããµããµã³ããªã³ã°](#ã¯ãããµããµã³ããªã³ã°)
+ + [ãã³ãºãªã³: YCbCrãã¹ãã°ã©ã ã調ã¹ã](#ãã³ãºãªã³-ycbcrãã¹ãã°ã©ã ã調ã¹ã)
+ * [ãã¬ãŒã ã®çš®é¡](#ãã¬ãŒã ã®çš®é¡)
+ + [Iãã¬ãŒã (ã€ã³ãã©ãããŒãã¬ãŒã )](#iãã¬ãŒã -ã€ã³ãã©ãããŒãã¬ãŒã )
+ + [Pãã¬ãŒã (äºæž¬)](#pãã¬ãŒã -äºæž¬)
+ - [ãã³ãºãªã³: Iãã¬ãŒã ãïŒã€ã ãã®ãããª](#ãã³ãºãªã³-iãã¬ãŒã ãïŒã€ã ãã®ãããª)
+ + [Bãã¬ãŒã (åæ¹åäºæž¬)](#bãã¬ãŒã -åæ¹åäºæž¬)
+ - [ãã³ãºãªã³: Bãã¬ãŒã ä»ãã®ãããªãšã®æ¯èŒ](#ãã³ãºãªã³-bãã¬ãŒã ä»ãã®ãããªãšã®æ¯èŒ)
+ + [ãŸãšã](#ãŸãšã)
+ * [æéçåé·æ§ (ã€ã³ã¿ãŒäºæž¬)](#æéçåé·æ§-ã€ã³ã¿ãŒäºæž¬)
+ - [ãã³ãºãªã³: åããã¯ãã«ãèŠã](#ãã³ãºãªã³-åããã¯ãã«ãèŠã)
+ * [空éçåé·æ§ (ã€ã³ãã©äºæž¬)](#空éçåé·æ§-ã€ã³ãã©äºæž¬)
+ - [ãã³ãºãªã³: ã€ã³ãã©äºæž¬ã調ã¹ã](#ãã³ãºãªã³-ã€ã³ãã©äºæž¬ã調ã¹ã)
+- [ãããªã³ãŒããã¯ã®ä»çµã¿](#ãããªã³ãŒããã¯ã®ä»çµã¿)
+ * [äœã? ãªã? ã©ã®ããã«?](#äœã-ãªã-ã©ã®ããã«)
+ * [æŽå²](#æŽå²)
+ + [AV1ã®èªç](#av1ã®èªç)
+ * [äžè¬çã³ãŒããã¯](#äžè¬çã³ãŒããã¯)
+ * [ã¹ãããïŒ - ç»ååå²](#ã¹ãããïŒ---ç»ååå²)
+ + [ãã³ãºãªã³: ããŒãã£ã·ã§ã³ã調ã¹ã](#ãã³ãºãªã³-ããŒãã£ã·ã§ã³ã調ã¹ã)
+ * [ã¹ãããïŒ - äºæž¬](#ã¹ãããïŒ---äºæž¬)
+ * [ã¹ãããïŒ - å€æ](#ã¹ãããïŒ---å€æ)
+ + [ãã³ãºãªã³: çš®ã
ã®ä¿æ°ãæšãŠã](#ãã³ãºãªã³-çš®ã
ã®ä¿æ°ãæšãŠã)
+ * [ã¹ãããïŒ - éåå](#ã¹ãããïŒ---éåå)
+ + [ãã³ãºãªã³: éåå](#ãã³ãºãªã³-éåå)
+ * [ã¹ãããïŒ - ãšã³ããããŒç¬Šå·å](#ã¹ãããïŒ---ãšã³ããããŒç¬Šå·å)
+ + [å¯å€é·ç¬Šå·](#å¯å€é·ç¬Šå·)
+ + [ç®è¡ç¬Šå·](#ç®è¡ç¬Šå·)
+ + [ãã³ãºãªã³: CABAC察CAVLC](#ãã³ãºãªã³-cabac察cavlc)
+ * [ã¹ãããïŒ - ãããã¹ããªãŒã ãã©ãŒããã](#ã¹ãããïŒ---ãããã¹ããªãŒã ãã©ãŒããã)
+ + [H.264ãããã¹ããªãŒã ](#h264ãããã¹ããªãŒã )
+ + [ãã³ãºãªã³: H.264ãããã¹ããªãŒã ã調ã¹ã](#ãã³ãºãªã³-h264ãããã¹ããªãŒã ã調ã¹ã)
+ * [ãããã](#ãããã)
+ * [ã©ã®ããã«H.265ã¯H.264ãããè¯ãå§çž®çãå®çŸããŠããã®ã?](#ã©ã®ããã«h265ã¯h264ãããè¯ãå§çž®çãå®çŸããŠããã®ã)
+- [ãªã³ã©ã€ã³ã¹ããªãŒãã³ã°](#ãªã³ã©ã€ã³ã¹ããªãŒãã³ã°)
+ * [äžè¬çãªã¢ãŒããã¯ãã£](#äžè¬çãªã¢ãŒããã¯ãã£)
+ * [ããã°ã¬ãã·ãããŠã³ããŒããšã¢ãããã£ãã¹ããªãŒãã³ã°](#ããã°ã¬ãã·ãããŠã³ããŒããšã¢ãããã£ãã¹ããªãŒãã³ã°)
+ * [ã³ã³ãã³ãä¿è·](#ã³ã³ãã³ãä¿è·)
+- [jupyterã®äœ¿ãæ¹](#jupyterã®äœ¿ãæ¹)
+- [ã«ã³ãã¡ã¬ã³ã¹](#ã«ã³ãã¡ã¬ã³ã¹)
+- [åèæç®](#åèæç®)
+
+# åºæ¬çšèª
+
+**ç»å**ã¯**äºæ¬¡å
ãããªã¯ã¹**ãšããŠèããããšãã§ããŸãã**è²**ãèæ
®ãããšãç»åã**è²ã®ããŒã¿**ãè¡šãããã®**ããäžã€ã®æ¬¡å
**ãæã£ã**äžæ¬¡å
ãããªã¯ã¹**ãšããŠæããããšãã§ããŸãã
+
+ãããã®è²ã[åè² (èµ€ãç·ãé)](https://ja.wikipedia.org/wiki/%E5%8E%9F%E8%89%B2)ã§è¡šçŸãããšãäžã€ã®å¹³é¢ãå®çŸ©ããããšã«ãªããŸããäžã€ãã**èµ€**ãäºã€ç®ã**ç·**ãããŠäžã€ç®ã**é**è²ã§ãã
+
+![an image is a 3d matrix RGB](/i/image_3d_matrix_rgb.png "ç»åã¯äžæ¬¡å
ãããªã¯ã¹ã§ã")
+
+ãããªã¯ã¹ã®ããããã®èŠçŽ ã**ãã¯ã»ã«** (ç»çŽ )ãšåŒã³ãŸããäžã€ã®ãã¯ã»ã«ã¯ãã®è²ã®**èŒåºŠ** (éåžžã¯æ°å€)ãè¡šããŸããäŸãã°ã**èµ€ãã¯ã»ã«**ã¯ç·ãïŒãéãïŒãèµ€ãæ倧ãæå³ããŸãã**ãã³ã¯è²ãã¯ã»ã«**ããããäžã€ã®å€ã§è¡šçŸã§ããŸããïŒããïŒïŒïŒã®æ°å€ã§è¡šçŸããããšã«ããããã³ã¯ãã¯ã»ã«ã¯**èµ€=255ãç·=192ãé=203**ãšå®çŸ©ãããŸãã
+
+> #### ã«ã©ãŒç»åã笊å·åããå¥ã®æ¹æ³
+> ç»åã圢æããè²ãè¡šçŸããããã«ã¯ãä»ã«ãå€ãã®ã¢ãã«ã䜿ããŸããäŸãã°ãè²ãè¡šçŸããã®ã«RGBã¢ãã«ã§ã¯ïŒãã€ã䜿ãã®ã«å¯ŸããŠãïŒãã€ããã䜿ããªãã€ã³ããã¯ã¹ãã¬ããã䜿ãããšãã§ããŸãããããã£ãã¢ãã«ã§ã¯ãè²ãè¡šçŸããããã«äžæ¬¡å
ã¢ãã«ã䜿ããã«äºæ¬¡å
ã¢ãã«ã䜿çšã§ããã§ããã§ããããã¡ã¢ãªãç¯çŽã§ããŸãããè²ã®éžæè¢ãçããããšã«ãªããŸãã
+>
+> ![NES palette](/i/nes-color-palette.png "ãã¡ãã³ã³ãã¬ãã")
+
+äŸãã°ãäžã®ç»åãã¿ãŠãã ãããæåã®é¡ã¯å
šãŠã®è²ã䜿ã£ãŠããŸããä»ã®åçã¯èµ€ãç·ãéã®å¹³é¢ã§ãã (ã°ã¬ãŒããŒã³ã§ç€ºããŠããŸã).
+
+![RGB channels intensity](/i/rgb_channels_intensity.png "RGBèŠçŽ ã®èŒåºŠ")
+
+**èµ€è²**ãæçµçãªè²ã«å¯ŸããŠ**ããè²¢ç®ããŠãã** (äºçªç®ã®é¡ã®æãæããéšå)ããšãåãããŸããäžæ¹**éè²** ã®è²¢ç®ã¯æã®äžéšãš**ããªãªã®ç®ã«ããã¿ãããŸãã**(æåŸã®é¡) ã**ããªãªã®ã²ã**ã«å¯ŸããŠã¯ã**å
šãŠã®å¹³é¢ãããŸãè²¢ç®ããŠããªã**(æãæãéšå)ããšãåãããŸãã
+
+åè²ã®èŒåºŠã§ã¯**ããã深床**ãšããŠç¥ãããäžå®éã®ããããäžå¯æ¬ ã§ããè²(å¹³é¢)ããšã«(0ããïŒïŒïŒã®å€ã§è¡šçŸãã)**8ããã**ã䜿ããšãããšã**24 (8 X 3)ããã**ã®**è²æ·±åºŠ**ãæã€ããšã«ãªããïŒã®ïŒïŒä¹çš®é¡ã®è²ã䜿ããããšãæšè«ã§ããŸãã
+
+> [ç»åãã©ã®ããã«äžç©ãããããšããŠãšãããã®ã](http://www.cambridgeincolour.com/tutorials/camera-sensors.htm)ãåŠã¶ãš **è¯ã**ã§ããã
+
+ããäžã€ã®ç»åã®ããããã£ã¯ **解å床**ã§ãã解å床ã¯é·ããããã®ãã¯ã»ã«ã®æ°ã§ãã解å床ã¯ããå¹
x é«ããšããŠè¡šçŸãããŸããäŸãã°ãäžèšã¯**4Ã4**ã®ç»åã§ãã
+
+![image resolution](/i/resolution.png "ç»å解å床")
+
+> #### ãã³ãºãªã³: ç»åãšè²ã®å®éš
+> [jupyter](#jupyterã®äœ¿ãæ¹) (pythonãnumpyãmatplotlibããã®ä»)ã䜿ã£ãŠã[ç»åãšè²ã®å®éš](/image_as_3d_array.ipynb)ãããŸãããã
+>
+> [(ãšããžæ€åº, ã·ã£ãŒãå, ãŒããçã®)ç»åãã£ã«ã¿ãã©ã®ããã«åãã](/filters_are_easy.ipynb)ãåŠã³ãŸãããã
+
+ç»åããããªã®äœæ¥ãããæã«ã¿ãããäžã€ã®ããããã£ã¯ **ã¢ã¹ãã¯ãæ¯**ã§ããã¢ã¹ãã¯ãæ¯ã¯ãç»åããã¯ã»ã«ã®å¹
ãšé«ãã®æ¯çãè¡šããŸãã
+
+åç»ãç»åã**16x9**ã§ãããšèšããšãã¯ããããŠã**ç»é¢ã¢ã¹ãã¯ãæ¯ (DAR)** ã®ããšãæããŸããããããåã
ã®ãã¯ã»ã«ãæ§ã
ãªåœ¢ç¶ã«ããããšãã§ããããã **ãã¯ã»ã«ã¢ã¹ãã¯ãæ¯ (PAR)** ãšãããŸãã
+
+![display aspect ratio](/i/DAR.png "ç»é¢ã¢ã¹ãã¯ãæ¯")
+
+![pixel aspect ratio](/i/PAR.png "ãã¯ã»ã«ã¢ã¹ãã¯ãæ¯")
+
+> #### DVDã®ç»é¢ã¢ã¹ãã¯ãæ¯ã¯4:3
+> DVDã®å®éã®è§£å床ã¯704x480ã§ããã10:11ã®ãã¯ã»ã«ã¢ã¹ãã¯ãæ¯ãæã£ãŠããããã4:3ã®ã¢ã¹ãã¯ãæ¯ãä¿ã£ãŠããŸãã(704x10/480x11)
+
+æåŸã«ã**ãããª**ã**åäœæé**å
ã®***n*ãã¬ãŒã ã®äžŠã³**ãšããŠå®çŸ©ã§ããããäžã€ã®ç¹æ§ãšèŠãããšãã§ããŸãã*n*ã¯ãã¬ãŒã ã¬ãŒããããã¯ç§éãã¬ãŒã æ° (FPS)ã§ãã
+
+![video](/i/video.png "ãããª")
+
+ãããªãè¡šãããã«å¿
èŠãªç§éãããã®ãããæ°ã¯**ãããã¬ãŒã**ã§ãã
+
+> ãããã¬ãŒã = å¹
x é«ã x ããã深床 x ãã¬ãŒã ã¬ãŒã
+
+äŸãã°ãå§çž®ãå
šã䜿ããªããªãããã¬ãŒã ã¬ãŒããïŒïŒã§ããã¯ã»ã«ããããïŒïŒãããã§ã解å床ã480x240ã®ãããªã¯ã**ç§éããã82,944,000ããã**ãããã¯82.944 Mbps (30x480x240x24)ãå¿
èŠã§ãã
+
+**ãããã¬ãŒã**ãã»ãšãã©äžå®ãªããåºå®ãããã¬ãŒã(**CBR**)ãšåŒã°ããŸãããããã¬ãŒããå€åãããªããå¯å€ãããã¬ãŒã (**VBR**)ãšåŒã°ããŸãã
+
+> ãã®ã°ã©ãã¯ãã¬ãŒã ãçã£é»ã®éã¯ããŸããããã䜿ããªããå¶çŽä»ãã®VBRã瀺ããŠããŸãã
+>
+> ![constrained vbr](/i/vbr.png "å¶çŽä»ãã®vbr")
+
+é»ææã«ãæè¡è
ãã¡ã**垯åå¹
ãå¢ãããã«**ãããªç»é¢ã§èªèã§ãããã¬ãŒã ã¬ãŒããåã«ããæè¡ãæãã€ããŸããããã®æè¡ã¯**ã€ã³ã¿ãŒã¬ãŒã¹åç»**ãšããŠç¥ãããŠããŸããåºæ¬çã«ã¯äžã€ç®ã®ããã¬ãŒã ãäžã§ç»é¢ã®ååãéãã次ã®ããã¬ãŒã ãã§æ®ãã®ååãéããŸãã
+
+ä»æ¥ã§ã¯ **ããã°ã¬ãã·ãã¹ãã£ã³æè¡**ã䜿ã£ãŠç»é¢ã«æç»ãããŸããããã°ã¬ãã·ãã¯ãåãç»åãæç»ãä¿åã転éããæ段ã®äžã€ã§ãåãã¬ãŒã ã®å
šèµ°æ»ç·ãé çªã«æç»ããŸãã
+
+![interlaced vs progressive](/i/interlaced_vs_progressive.png "ã€ã³ã¿ãŒã¬ãŒã¹å¯Ÿããã°ã¬ãã·ã")
+
+ãã㧠**ç»å**ãã©ã®ããã«ããžã¿ã«è¡šçŸãããã®ããåãããŸããã**è²**ãã©ã®ããã«é
眮ããããããªãè¡šãã®ã«ã©ã®ãããã®**ç§éãããã®ããã**ãå¿
èŠãªã®ãããããåºå®ãªã®ã(CBR)å¯å€ãªã®ã(VBR)ã**解å床**ãš**ãã¬ãŒã ã¬ãŒã**ãä»ã«ãã€ã³ã¿ãŒã¬ãŒã¹ããã¯ã»ã«ã¢ã¹ãã¯ãæ¯ããã®ä»ã®ããããã®çšèªãåŠã³ãŸããã
+
+> #### ãã³ãºãªã³: ãããªããããã£ã調ã¹ã
+> [ffmpegãmediainfoã䜿ã£ãŠèª¬æããããããã£ã®ã»ãšãã©ã調ã¹ã](https://github.com/leandromoreira/introduction_video_technology/blob/master/encoding_pratical_examples.md#inspect-stream)ããšãã§ããŸãã
+
+# åé·æ§é€å»
+
+å§çž®ãªãã«ãããªãæ±ãããšã¯äžå¯èœã§ããããšãåŠã³ãŸããã解å床ã720pã§30fpsã®å Žåã**1æéã®ãããªäžã€**ã«**278GB*ãå¿
èŠ**ã§ãã(PKZIPãGzipãPNGã§äœ¿ãããŠãã)DEFLATE ã®ãããª**å¯éå§çž®ã¢ã«ãŽãªãºã äžã€ã䜿ãã ãã§ã¯**å¿
èŠãªåž¯åå¹
ãååã«åæž**ã§ããªã**ããããããªãå§çž®ããå¥ã®æ¹æ³ãèŠã€ããå¿
èŠãããã®ã§ãã
+
+> * ãã®æ°å€ã¯1280 x 720 x 24 x 30 x 3600 (å¹
ãé«ãããã¯ã»ã«ãããã®ãããæ°ããã¬ãŒã ã¬ãŒããç§åäœã§ã®æé)ãæããããšã§ç®åºããŸãã
+
+ãããæãéããããã«ã**ç§ãã¡ã®èŠèŠã®ä»çµã¿ãå©çšãã**ããšãã§ããŸããç§ãã¡ã¯è²ãããæãããèŠåããããšãåŸæã§ãããŸãããããªã«ã¯å°ãã®å€åãããªãå€ãã®ç»åãå«ãŸããŠãã**æéçç¹°ãè¿ã**ããããŸããããããã®ãã¬ãŒã ããŸããå€ãã®é åã§ã¯åãã䌌ãŠããè²ã䜿ãããŠãã**ç»åå
ã®ç¹°ãè¿ã**ããããŸãã
+
+## è²ãæãããšç§ãã¡ã®ç®
+
+ç§ãã¡ã®ç®ã¯[è²ãããæããã«ããææ](http://vanseodesign.com/web-design/color-luminance/)ã§ãããã®ç»åãã¿ãŠãããèªåèªèº«ã§ç¢ºèªã§ããŸãã
+
+![luminance vs color](/i/luminance_vs_color.png "æãã 察 è²")
+
+å·ŠåŽã®**æ£æ¹åœ¢Aãšæ£æ¹åœ¢B**ã®è²ã¯**åã**ã§ããããšãåãããªããšããŠã倧äžå€«ã§ããç§ãã¡ã®è³ã¯**è²ãããææã«æ³šæãã¯ãã**ããšã§é¯èŠãèµ·ããããŠããã®ã§ããå³åŽã§ã¯ãåãè²ã®ã³ãã¯ã¿ãŒããããããç§ãã¡ïŒç§ãã¡ã®è³ïŒã¯ããããã¯å®éã¯åãè²ã§ãããšããããšãç°¡åã«æ°ã¥ããŸãã
+
+> **ç§ãã¡ã®ç®ãã©ã®ããã«æ©èœãããã®ç°¡åãªèª¬æ**
+>
+> [çŒã¯è€éãªåšå®](http://www.biologymad.com/nervoussystem/eyenotes.htm)ã§ãããããã®ããŒãããæãç«ã£ãŠããŸãããäž»ã«éäœçŽ°èãšæ¡¿äœçŽ°èã«é¢å¿ããããŸããçŒã¯ [1å2000äžã®æ¡¿äœçŽ°èãš600äžã®éäœçŽ°èãå«ãã§ãã](https://en.wikipedia.org/wiki/Photoreceptor_cell)ã®ã§ãã
+>
+> **ãã®ãããç°¡åã«ãã**ãããçŒã®ããŒãã®æ©èœã®ãã¡è²ãšæããã«çŠç¹ãåœãŠãŸãããã**[æ¡¿äœçŽ°è](https://en.wikipedia.org/wiki/Rod_cell)ã¯äž»ã«æããã«å¯ŸããŠè²¬ä»»ãæã£ãŠããŸã**ãäžæ¹ **[éäœçŽ°è](https://en.wikipedia.org/wiki/Cone_cell)ã¯è²ã«å¯ŸããŠè²¬ä»»ãæã£ãŠããŸã**ãç°ãªã£ãè²çŽ ãæã€3çš®é¡ã®éäœããããååã¯[Séäœ(é)ãMéäœ(ç·)ãLéäœ(èµ€)](https://upload.wikimedia.org/wikipedia/commons/1/1e/Cones_SMJ2_E.svg)ã§ãã
+>
+> ç§ãã¡ã¯éäœçŽ°è(è²)ãããå€ãã®æ¡¿äœçŽ°è(æãã)ãæã£ãŠãããããè²ãããææãããèå¥ããããšãã§ããããšãæšè«ã§ããŸãã
+>
+> ![eyes composition](/i/eyes.jpg "çŒã®æ§æ")
+
+ç§ãã¡ã¯**èŒåºŠ** (ç»åã®æããã®åºŠåã)ã«ããææã§ããããšãåãã£ããšããã§ããããå©çšããŠã¿ãããšãã§ããŸãã
+
+### ã«ã©ãŒã¢ãã«
+
+**RGBã¢ãã«**ã䜿ã£ãŠ[ã«ã©ãŒç»åãã©ã®ããã«](#basic-terminology)æ©èœããã®ãæåã«åŠã³ãŸããããä»ã®ã¢ãã«ãååšããŸããå®ã¯ãèŒåºŠ(æãã)ãšè²åºŠ(è²)ãå¥ã«ããã¢ãã«ãååšããŸããããã¯**YCbCr***ãšããŠç¥ãããŠããŸãã
+
+> * åãåé¢ãè¡ãã¢ãã«ã¯ãã£ãšååšããŸãã
+
+ãã®ã«ã©ãŒã¢ãã«ã¯æãããè¡šãããã«**Y**ã䜿ããïŒã€ã®è²ãã£ã³ãã«**Cb** (éã®è²å·®)ãš**Cr** (èµ€ã®è²å·®)ã䜿ããŸãã[YCbCr](https://en.wikipedia.org/wiki/YCbCr)ã¯RGBããçæããããšãã§ããRGBã«æ»ãããšãã§ããŸããäžã®åçã®ããã«ããã®ã¢ãã«ã䜿ã£ãŠãã«ã«ã©ãŒã®ç»åãäœãããšãã§ããŸãã
+
+![ycbcr example](/i/ycbcr.png "ycbcräŸ")
+
+### YCbCrãšRGBéã®å€æ
+
+äžã«ã¯ **ç·ãªãã§è²**ã®å
šãŠãçæã§ããã®ããšç°è°ãå±ããæ¹ãããã§ãããã
+
+ãã®è³ªåã«çããããã«ãRGBããYCbCrãžã®å€æãäžéã説æããŸãã**[ITU-Rã°ã«ãŒã*](https://en.wikipedia.org/wiki/ITU-R)** ã«ãã£ãŠæšå¥šããã **[BT.601æšæº](https://en.wikipedia.org/wiki/Rec._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ãšã¯äœãïŒã©ã®ãã¬ãŒã ã¬ãŒãã解å床ãã«ã©ãŒã¢ãã«ã䜿ãã¹ããïŒ](https://en.wikipedia.org/wiki/Rec._2020)ãªã©ã§ãã
+
+äžè¬çã«**ãã£ã¹ãã¬ã€** (ã¢ãã¿ãŒããã¬ããã¹ã¯ãªãŒã³ç) ã¯è²ã
ãªæ¹æ³ã§çµç¹åããã**RGBã¢ãã«ã ã**ãå©çšããŸããäžã®åçã§ããã€ãæ¡å€§ãããã®ç€ºããŠããŸãã
+
+![pixel geometry](/i/new_pixel_geometry.jpg "ç»çŽ 圢ç¶")
+
+### ã¯ãããµããµã³ããªã³ã°
+
+ç»åã¯èŒåºŠãšè²åºŠæåã§è¡šçŸããããšãã§ããã®ã§ã人éã®èŠèŠã·ã¹ãã ãè²åºŠãããèŒåºŠã«ææã§ããããšãå©çšããŠæ
å ±ãéžæçã«åæžããããšãã§ããŸãã**ã¯ãããµããµã³ããªã³ã°**ã¯**è²åºŠã®è§£å床ãèŒåºŠã®è§£å床ããå°ãããã**ç»å笊å·åæè¡ã§ãã
+
+
+![ycbcr subsampling resolutions](/i/ycbcr_subsampling_resolution.png "ycbcrãµããµã³ããªã³ã°è§£å床")
+
+
+è²åºŠã®è§£å床ãã©ã®ãããå°ãããã¹ãã§ããããïŒè§£å床ãšçµå (`æçµçãªè² = 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](/i/ycbcr_420_merge.png "YCbCr 4:2:0çµå")
+
+äž»ãªã¿ã€ãã®ã¯ãããµããµã³ããªã³ã°ã§ç¬Šå·åãããåãç»åãèŠãŠäžãããäžè¡ç®ã®ç»åã¯æçµçãªYCbCrã§ãäºè¡ç®ã®ç»åã¯è²åºŠè§£å床ã瀺ããŠããŸããå®ã«å°ããªå£åã§çŽ æŽãããçµæã§ãã
+
+![chroma subsampling examples](/i/chroma_subsampling_examples.jpg "ã¯ãããµããµã³ããªã³ã°äŸ")
+
+[解å床ã720pã§30fpsã®ãããªã1æéãã¡ã€ã«ã«ä¿åããããã«ã¯278GBã®é å](#redundancy-removal)ãå¿
èŠã«ãªãããšãå
ã«èšç®ããŸããã**YCbCr 4:2:0**ã䜿ããšã**ååã®ãµã€ãº(139 GB)***ã«ããããšãã§ããŸããããããŸã çæ³ã«ã¯çšé ãã§ãã
+
+> * å¹
ãé«ãããã¯ã»ã«ããšã®ãããæ°ããã¬ãŒã ã¬ãŒããæããããšã«ãããã®å€ãèšç®ããŸãããå
ã«èšç®ããæã¯ïŒïŒãããå¿
èŠã§ããããä»ã¯ïŒïŒãããããå¿
èŠãããŸããã
+
+
+
+> ### ãã³ãºãªã³: YCbCrãã¹ãã°ã©ã ã調ã¹ã
+> [ffmpegã§YCbCrãã¹ãã°ã©ã ã調ã¹ã](/encoding_pratical_examples.md#generates-yuv-histogram)ããšãã§ããŸãã ãã®ã·ãŒã³ã§ã¯éã®å¯äžçãããé«ããªã£ãŠããŸãã [ãã¹ãã°ã©ã ](https://en.wikipedia.org/wiki/Histogram)ã§ãã®ããšã瀺ãããŸãã
+>
+> ![ycbcr color histogram](/i/yuv_histogram.png "ycbcrã«ã©ãŒãã¹ãã°ã©ã ")
+
+## ãã¬ãŒã ã®çš®é¡
+
+次ã«**æéçãªåé·æ§**ã®åæžãè©Šã¿ãŠã¿ãŸãããããããããã®åã«ããã€ãã®åºæ¬ççšèª ã«ã€ããŠæŒãããŠãããŸãããã30 fpsã®åç»ããããäžèšãæåã®4ãã¬ãŒã ã§ãããšããŸãã
+
+![ball 1](/i/smw_background_ball_1.png "ããŒã«1") ![ball 2](/i/smw_background_ball_2.png "ããŒã«2") ![ball 3](/i/smw_background_ball_3.png "ããŒã«3")
+![ball 4](/i/smw_background_ball_4.png "ããŒã«4")
+
+**éãèæ¯**ã®ããã«ãã¬ãŒã éã«**ããããã®ç¹°ãè¿ã**ãèŠãããšãã§ããŸããèæ¯ã¯ãã¬ãŒã 0ãããã¬ãŒã 3ãŸã§å€åããŸããããã®åé¡ã«åãçµãããã«ããããã3çš®é¡ã®ãã¬ãŒã ã«**æœè±¡çã«åé¡**ããŸãããã
+
+### Iãã¬ãŒã (ã€ã³ãã©ãããŒãã¬ãŒã )
+
+Iãã¬ãŒã (åç
§ãããŒãã¬ãŒã ãã€ã³ãã©)ã¯**èªå·±å®çµçãªãã¬ãŒã **ã§ããIãã¬ãŒã ã¯ä»ã«äŸåããã«æç»ããããšãã§ããéæ¢ç»ãšäŒŒãŠããŸããæåã®ãã¬ãŒã ã¯æ®éã¯Iãã¬ãŒã ã§ãããä»ã®çš®é¡ã®ãã¬ãŒã ã®éã«ãèŠåçã«Iãã¬ãŒã ãæ¿å
¥ãããŠããŸãã
+
+![ball 1](/i/smw_background_ball_1.png "ããŒã«1")
+
+### Pãã¬ãŒã (äºæž¬)
+
+çŸåšã®ç»åã¯ãã»ãšãã©æ¯å**ïŒã€åã®ãã¬ãŒã ã䜿ã£ãŠæç»ãã**ããšãã§ãããšããäºå®ãPãã¬ãŒã ã¯å©çšããŠããŸããäŸãã°ã2çªç®ã®ãã¬ãŒã ã§ã¯ãããŒã«ãåã«åãããšããå€åãããããŸããã**ãã¬ãŒã 1ãåæ§ç¯ããŠãçžéç¹ã ãã䜿ããïŒã€åã®ãã¬ãŒã ãåç
§ãã**ããšãã§ããŸãã
+
+![ball 1](/i/smw_background_ball_1.png "ããŒã«1") <- ![ball 2](/i/smw_background_ball_2_diff.png "ããŒã«2")
+
+> #### ãã³ãºãªã³: Iãã¬ãŒã ãïŒã€ã ãã®ãããª
+> Pãã¬ãŒã ã¯ããå°ããªããŒã¿ãã䜿ããªãã®ã§ãå
šäœã[Iãã¬ãŒã ã¯ïŒã€ã ãã§ãä»ã¯å
šãŠPãã¬ãŒã ã®ãããª](/encoding_pratical_examples.md#1-i-frame-and-the-rest-p-frames)ã«ãšã³ã³ãŒããããã©ãã§ãããïŒ
+>
+> ãã®ãããªããšã³ã³ãŒãããåŸãåçããŠãããªã®**åæ¹ã«ã·ãŒã¯**ããŠãã ãããã·ãŒã¯å
ã«ç§»ãã®ã«**æéãããã**ããšã«æ°ã¥ãã§ããããããã¯ãæç»ã®ããã«**Pãã¬ãŒã ãåç
§ãã¬ãŒã ãå¿
èŠãšãã** (äŸãã°Iãã¬ãŒã )ããã§ãã
+>
+> ããïŒã€æ軜ã«ã§ãããã¹ããšããŠããŸãïŒã€ã®I-Frameã ãã䜿ã£ãŠãããªããšã³ã³ãŒãããŠã次ã«[ïŒç§ééã§Iãã¬ãŒã ãæ¿å
¥ããŠãšã³ã³ãŒã](/encoding_pratical_examples.md#1-i-frames-per-second-vs-05-i-frames-per-second)ããŠããã**ããããã®ãšã³ã³ãŒãçµæã®ãµã€ãºãæ¯èŒ**ããŠãã ããã
+
+### Bãã¬ãŒã (åæ¹åäºæž¬)
+
+éå»ãšæªæ¥ã®ãã¬ãŒã äž¡æ¹ãåç
§ããããããã«é«ãå§çž®çãåŸãããšãã§ããã®ã§ã¯ãªãã§ããããïŒïŒãããBãã¬ãŒã ã®åºæ¬ã§ãã
+
+![ball 1](/i/smw_background_ball_1.png "ããŒã«1") <- ![ball 2](/i/smw_background_ball_2_diff.png "ããŒã«2") -> ![ball 3](/i/smw_background_ball_3.png "ããŒã«3")
+
+> #### ãã³ãºãªã³: Bãã¬ãŒã ä»ãã®ãããªãšã®æ¯èŒ
+> ïŒã€ã®æ¹æ³ã§ãšã³ã³ãŒãããŠã¿ãŸããããïŒã€ã¯Bãã¬ãŒã ä»ãã§ãããäžæ¹ã¯[Bãã¬ãŒã ãªã](/encoding_pratical_examples.md#no-b-frames-at-all)ã§ãšã³ã³ãŒãããŠããã¡ã€ã«ãµã€ãºããã³ç»è³ªã確èªããŠãã ããã
+
+### ãŸãšã
+
+ãããã®ç°ãªãçš®é¡ã®ãã¬ãŒã ã¯**ããé«ãå§çž®çãåŸã**ããã«äœ¿ãããŸãã次ã®ç¯ã§ã©ããã£ãŠãããè¡ãããã®ãèŠãŠãããŸããããããä»ã®ãšããã¯**Iãã¬ãŒã ã¯éããPãã¬ãŒã ã¯è»œãããæã軜ãã®ã¯Bãã¬ãŒã **ãšèããŠãããŠããã§ãããã
+
+![frame types example](/i/frame_types.png "ãã¬ãŒã ã®çš®é¡ã®äŸ")
+
+## æéçåé·æ§ (ã€ã³ã¿ãŒäºæž¬)
+
+**æéçç¹°ãè¿ã**ãåæžããããã«äœãã§ãããèŠãŠãããŸãããããã®çš®ã®åé·æ§ã¯**ã€ã³ã¿ãŒäºæž¬**ãšããæè¡ã§è§£æ±ºããããšãã§ããŸãã
+
+
+**ã§ããã ãå°ãªããããã䜿ã£ãŠ**ãé£ç¶ãããã¬ãŒã 0ãšãã¬ãŒã 1ããšã³ã³ãŒãããŠã¿ãŸãããã
+
+![original frames](/i/original_frames.png "å
ã®ãã¬ãŒã ")
+
+ïŒã€ã§ããããšãšããŠãåŒãç®ããããŸããåçŽã«**ãã¬ãŒã 0ãããã¬ãŒã 1ãåŒã**ãšã**ãšã³ã³ãŒã**ããå¿
èŠããã**å·®å**ãåŸãããšãã§ããŸãã
+
+![delta frames](/i/difference_frames.png "å·®åãã¬ãŒã ")
+
+ããããããã«å°ãªãããããã䜿ããªã**ãã£ãšããæ¹æ³**ããããšèšã£ããã©ãã§ãããïŒãŸãã`ãã¬ãŒã 0`ããã¡ããšå®ããããåºç»ã®éåã§ãããšããŸãããããŠ`ãã¬ãŒã 0`ã®ããããã®ãããã¯ã`ãã¬ãŒã 1`äžã«ããããããããšããŸãã.ãã㯠**åãæšå®**ãšããŠèããããšãã§ããŸãã
+
+> ### Wikipedia - ãããã¯åãè£å
+> "**ãããã¯åãè£å**ã¯çŸåšã®ãã¬ãŒã ãéãªããªããããã¯ã«åããŠãåãè£åãã¯ãã«ã¯**ãããã®ãããã¯ãã©ãããã®ãã®ããè¡šããŸã** (ååã®ãã¬ãŒã ãéãªããªããããã¯ã«åããããåãè£åãã¯ãã«ã¯ãããã®ãããã¯ãã©ããžè¡ãããè¡šããšããã®ã¯ããããã誀解ã§ãã)ã å
ã®ãããã¯ã¯å
ã®ãã¬ãŒã å
ã§éåžžã¯éãªãåããŸãããããªå§çž®ã¢ã«ãŽãªãºã ã®äžã«ã¯ã ãã§ã«éä¿¡ãããç°ãªã£ãããã€ãã®ãã¬ãŒã ã®æçããçŸåšã®ãã¬ãŒã ãçµã¿ç«ãŠããã®ããããŸãã"
+
+![delta frames](/i/original_frames_motion_estimation.png "ãã¬ãŒã å·®å")
+
+ããŒã«ã`x=0ãy=25`ãã`x=6ãy=26`ãžç§»åãããšæšå®ããããšãã§ããŸãã**x**ãš**y**ã®å€ã¯**åããã¯ãã«**ã§ããããããç¯çŽããããã®ããïŒã€ã®**ãããªãã¹ããã**ã¯ãååã®ãããã¯äœçœ®ãšäºæž¬ããããããã¯äœçœ®ãšã®**åããã¯ãã«ã®å·®åã ãããšã³ã³ãŒããã**ããšã§ãã æçµçãªåããã¯ãã«ã¯`x=6 (6-0)ãy=1 (26-25)`ã®ããã«ãªããŸãã
+
+> çŸå®äžçã®ç¶æ³ã§ã¯ããã®**ããŒã«ã¯ã¹ã©ã€ã¹ãããŠnåã®åºç»ã«ãŸãããã§ããã**ããããåŠçã¯åãã§ã
+
+ãã¬ãŒã ç¶ã®ç©äœã¯**3Dæ¹åã«åã**ãããŒã«ã¯èæ¯ã®æ¹ã«åããšå°ããããªããŸãã ãããã¯ãžã®**å®å
šãªããããèŠã€ããããªã**ã®ã¯ããããããšã§ãã æšå®ç»åãšå®éã®ç»åãéãããšäžèšã®ããã«ãªããŸãã
+
+![motion estimation](/i/motion_estimation.png "åãæšå®")
+
+ãããã**åãæšå®**ãé©çšãããšãåçŽãªãã¬ãŒã å·®åææ³ã䜿ãããã**ãšã³ã³ãŒãããããŒã¿ãããå°ãããªã**ããšãåãããŸãã
+
+![motion estimation vs delta ](/i/comparison_delta_vs_motion_estimation.png "åãæšå® å·®å")
+
+> ### å¯èŠåãããå®éã®åãè£å
+> ãã®ææ³ã¯å
šãŠã®ãããã¯ã«é©çšãããããªãé »ç¹ã«ããŒã«ã¯ïŒã€ä»¥äžã®ãããã¯ã«é
眮ãããŸãã
+> ![real world motion compensation](/i/real_world_motion_compensation.png "çŸå®äžçã®åãè£å")
+> Source: https://web.stanford.edu/class/ee398a/handouts/lectures/EE398a_MotionEstimation_2012.pdf
+
+[jupyterã䜿ã£ãŠãããã®æŠå¿µãå®éš](/frame_difference_vs_motion_estimation_plus_residual.ipynb)ã§ããŸãã
+
+> #### ãã³ãºãªã³: åããã¯ãã«ãèŠã
+> [ffmpegã§ã€ã³ã¿ãŒäºæž¬ (åããã¯ãã«)ä»ãã®ãããªãçæãã](/encoding_pratical_examples.md#generate-debug-video)ããšãã§ããŸãã
+>
+> ![inter prediction (motion vectors) with ffmpeg](/i/motion_vectors_ffmpeg.png "ffmpegã§ã€ã³ã¿ãŒäºæž¬ (åããã¯ãã«)")
+>
+> ãŸãã¯ã[Intel Video Pro Analyzer](https://software.intel.com/en-us/intel-video-pro-analyzer) (ææã§ãããæåã®10ãã¬ãŒã ã«å¶éãããç¡æãè©ŠãçããããŸã)ã䜿ãããšãã§ããŸãã
+>
+> ![inter prediction intel video pro analyzer](/i/inter_prediction_intel_video_pro_analyzer.png "ã€ã³ã¿ãŒäºæž¬ intel video pro analyzer")
+
+## 空éçåé·æ§ (ã€ã³ãã©äºæž¬)
+
+ãããªã®äžã®**ïŒã€ïŒã€ã®ãã¬ãŒã **ãåæãããšã**ããããã®çžé¢æ§ã®ããé å**ãååšããããšãåãããŸãã
+
+![](/i/repetitions_in_space.png)
+
+äŸãéããŠã¿ãŠãããŸãããããã®ã·ãŒã³ã¯ã»ãšãã©éãšçœã§æ§æãããŠããŸãã
+
+![](/i/smw_bg.png)
+
+ãã㯠`Iãã¬ãŒã `ã§ãäºæž¬ã®ããã«**åã®ãã¬ãŒã ã䜿ããŸãã**ããå§çž®ããããšã¯ã§ããŸããèµ€ããããã¯ãéžæããŠãšã³ã³ãŒãããŠã¿ãŸãããã**é£æ¥ããéšåãèŠã**ãšã**ãã®åšãã®è²ã«åŸå**ãããããšã**æšå®**ããããšãã§ããŸãã
+
+![](/i/smw_bg_block.png)
+
+ãã®ãã¬ãŒã ã§ã¯**è²ãåçŽæ¹åã«åºãã**ç¶ããããšã**äºæž¬**ããŠã¿ãŸãã**æªç¥ã®ãã¯ã»ã«ã®è²ãé£ã®è²ãæã€**ããšãæå³ããŸãã
+
+![](/i/smw_bg_prediction.png)
+
+**äºæž¬ãééããããããŸãã**ããã®ããããã®ææ³(**ã€ã³ãã©äºæž¬**)ãé©çšããŠããã**å®éã®å€ãåŒããŠ**å·®åãçæããå¿
èŠããããŸãããã®å·®åã¯å
ããããã£ãšå§çž®ãããããããªã¯ã¹ã«ãªããŸãã
+
+![](/i/smw_residual.png)
+
+> #### ãã³ãºãªã³: ã€ã³ãã©äºæž¬ã調ã¹ã
+> [ffmpegã§ãã¯ããããã¯ãšãããã®äºæž¬ä»ãã®ãããªãçæãã](/encoding_pratical_examples.md#generate-debug-video)ããšãã§ããŸãã[ããããã®ãããã¯ã®è²ã®æå³](https://trac.ffmpeg.org/wiki/Debug/MacroblocksAndMotionVectors)ãç解ããããã«ffmpegã®ããã¥ã¡ã³ãã調ã¹ãŠãã ããã
+>
+> ![intra prediction (macro blocks) with ffmpeg](/i/macro_blocks_ffmpeg.png "ffmpegã§ã€ã³ã¿ãŒäºæž¬ (åããã¯ãã«)")
+>
+> ãŸãã¯[Intel Video Pro Analyzer](https://software.intel.com/en-us/intel-video-pro-analyzer) (ææã§ãããæåã®10ãã¬ãŒã ã«å¶éãããç¡æãè©ŠãçããããŸã)ã䜿ãããšãã§ããŸãã
+>
+> ![intra prediction intel video pro analyzer](/i/intra_prediction_intel_video_pro_analyzer.png "ã€ã³ãã©äºæž¬ intel video pro analyzer")
+
+# ãããªã³ãŒããã¯ã®ä»çµã¿
+
+## äœã? ãªã? ã©ã®ããã«?
+
+**äœã?** ããžã¿ã«ãããªãå§çž®ã解åãããœãããŠã§ã¢ / ããŒããŠã§ã¢ã®éšåã**ãªã?** å¶éããã垯åãšã¹ãã¬ãŒãžã®äžã§ããé«ãå質ã®ãããªãžã®èŠæ±ããåžå Žãšç€ŸäŒã§é«ãŸã£ãŠããããã30ãã¬ãŒã æ¯ç§ã24ãããæ¯ãã¯ã»ã«ã解å床ã480x240ã®ãããªã«[å¿
èŠãªåž¯åãèšç®](#basic-terminology)ããã®ãèŠããŠããŸãããå§çž®ãªãã§ã¯**82.944 Mbps**ã§ããããã¬ããã€ã³ã¿ãŒãããã§HD/FullHD/4Kãé
ä¿¡ããããã«ã¯å§çž®ãããããããŸããã**ã©ã®ããã«?** ããã§äž»ãªææ³ã«ã€ããŠç°¡åã«èŠãŠãããŸãã
+
+> **ã³ãŒãã㯠察 ã³ã³ãã**
+>
+> åå¿è
ããã誀解ããããšã®ïŒã€ã«ãããžã¿ã«ãããªã³ãŒããã¯ãš[ããžã¿ã«ãããªã³ã³ãã](https://en.wikipedia.org/wiki/Digital_container_format)ãæ··åãããšãããã®ããããŸãã**ã³ã³ãã**ã¯ãããª(ãšé³å£°ããããã)ã®ã¡ã¿ããŒã¿ãšãã€ããŒãã§ãã**å§çž®ããããããª**ãå
æ¬ããã©ãããŒãã©ãŒããããšããŠèããããšãã§ããŸãã
+>
+> ãããŠãããããªãã¡ã€ã«ã®æ¡åŒµåã¯ãã®ãããªã³ã³ãããå®çŸ©ããŸããäŸãã°ããã¡ã€ã«`video.mp4`ã¯ãããã **[MPEG-4 Part 14](https://en.wikipedia.org/wiki/MPEG-4_Part_14)** ã³ã³ããã§ã`video.mkv`ãšããååã®ãã¡ã€ã«ã¯ãããã **[matroska](https://en.wikipedia.org/wiki/Matroska)** ã§ããã³ãŒããã¯ãšã³ã³ãããã©ãŒãããã確å®ã«èª¿ã¹ãããã«ã¯ã[ffmpegãmediainfo](/encoding_pratical_examples.md#inspect-stream)ã䜿ããŸãã
+
+## æŽå²
+
+äžè¬çãªã³ãŒããã¯ã®å
éšåäœã«å
¥ã£ãŠè¡ãåã«ãããã€ãã®å€ããããªã³ãŒããã¯ã«ã€ããŠå°ãç解ããããã«éå»ãæ¯ãè¿ã£ãŠã¿ãŸãããã
+
+ãããªã³ãŒããã¯ã§ãã[H.261](https://en.wikipedia.org/wiki/H.261)ã¯1990幎(å³å¯ã«ã¯1988幎)ã«çãŸããŸãããH.261ã¯**64 kbit/sã®ããŒã¿ã¬ãŒã**ã§åäœããããã«èšèšãããŸãããã¯ãããµããµã³ããªã³ã°ããã¯ããããã¯ãªã©ã®èãããã§ã«äœ¿ã£ãŠããŸããã1995幎ã«ã**H.263**ãããªã³ãŒããã¯æšæºãçºè¡šãã2001幎ãŸã§æ¡åŒµããç¶ããŸããã
+
+2003幎ã«**H.264/AVC**ã®åçãå®æããŸãããåã幎ã«**TrueMotion**ãšåŒã°ããäŒç€Ÿãã**ãã€ã€ãªãã£ãŒããªãŒ**ã§éå¯éãããªå§çž®ã® **VP3**ãšåŒã°ãããããªã³ãŒããã¯ããªãªãŒã¹ããŸããã2008幎ã«ãã®äŒç€Ÿã**Googleãè²·å**ããåã幎ã«**VP8**ããªãªãŒã¹ããŸããã2012幎ã®12æã«Googleã**VP9**ããªãªãŒã¹ããŸãããVP9ã¯(ã¢ãã€ã«ãå«ã)**ãã©ãŠã¶åžå Žã®ãããŸã«ãµããŒããããŠããŸã**ã
+
+ **[AV1](https://en.wikipedia.org/wiki/AOMedia_Video_1)**ã¯æ°ãã**ãã€ã€ãªãã£ãŒããªãŒ**ã§ãªãŒãã³ãœãŒã¹ã®ãããªã³ãŒããã¯ã§ã[Alliance for Open Media (AOMedia)](http://aomedia.org/)ã«ãã£ãŠèšèšãããŸãããAOMediaã¯**è€æ°ã®äŒç€Ÿ: GoogleãMozillaãMicrosoftãAmazonãNetflixãAMDãARMãNVidiaãIntelãCisco**ãšä»ã®ããã€ãã®äŒç€Ÿããæãç«ã£ãŠããŸãããªãã¡ã¬ã³ã¹ã³ãŒããã¯ã®**åç** 0.1.0ã**2016幎4æ7æ¥ã«å
¬éãããŸãã**ã
+
+![codec history timeline](/i/codec_history_timeline.png "ã³ãŒããã¯æŽå²å¹Žè¡š")
+
+> #### AV1ã®èªç
+>
+> 2015幎ã®åæã«Googleã[VP10](https://en.wikipedia.org/wiki/VP9#Successor:_from_VP10_to_AV1)ã®éçºãXiph (Mozilla)ã¯[Daala](https://xiph.org/daala/)ã®éçºãCiscoã¯ãªãŒãã³ãœãŒã¹ã§ãã€ã€ãªãã£ãŒããªãŒã®[Thor](https://tools.ietf.org/html/draft-fuldseth-netvc-thor-03)ãšåŒã°ãããããªã³ãŒããã¯ã®éçºã«åãçµãã§ããŸããã
+>
+> MPEG LAã¯ãåœåã¯HEVC (H.265)ã®å¹Žéãã€ã€ãªãã£ãŒã®äžéãšH.264ã®8åé«ãã©ã€ã»ã³ã¹æãçºè¡šããŸããããããã«ã«ãŒã«ãå€æŽããŸããã:
+> * **幎éãã€ã€ãªãã£ãŒã®äžéãªã**
+> * **ã³ã³ãã³ãæé** (åå
¥ã®0.5%)
+> * **h264ãã10åé«ãåäœãããæé**
+>
+> [alliance for open media](http://aomedia.org/about-us/)ã¯ããŒããŠã§ã¢ã¡ãŒã«ãŒ(IntelãAMDãARMãNvidiaãCisco)ãã³ã³ãã³ãé
ä¿¡ (GoogleãNetflixãAmazon)ããã©ãŠã¶éçº(Google, Mozilla)ããã®ä»ã®äŒç€Ÿã«ãã£ãŠäœãããŸããã
+>
+> ãããã®äŒç€Ÿã«ã¯ãã€ã€ãªãã£ãŒããªãŒã®ãããªã³ãŒããã¯ãšããå
±éã®ç®çããããAV1ã¯ãã [ç°¡åãªç¹èš±ã©ã€ã»ã³ã¹](http://aomedia.org/license/patent/)ã§èªçããŸããã**Timothy B. Terriberry**ã [AV1ã®æŠå¿µãã©ã€ã»ã³ã¹ã¢ãã«ãçŸç¶](https://www.youtube.com/watch?v=lzPaldsmJbk)ã«ã€ããŠã®çŽ æŽããããã¬ãŒã³ããŒã·ã§ã³ãè¡ããŸããããã®ç¯ã¯ãã®ãã¬ãŒã³ããŒã·ã§ã³ãå
ã«æžããŠããŸãã
+>
+> **ãã©ãŠã¶ãŒã䜿ã£ãŠAV1ã³ãŒããã¯ãåæ**ã§ããããšãç¥ã£ãŠé©ãããšã§ããããhttp://aomanalyzer.org/ ãèŠãŠãã ããã
+>
+> ![av1 browser analyzer](/i/av1_browser_analyzer.png "av1ãã©ãŠã¶ãŒã¢ãã©ã€ã¶ãŒ")
+>
+> è¿œèš: ã³ãŒããã¯ã®æŽå²ã«ã€ããŠãã£ãšåŠã³ãããªããèåŸã«ãã[ãããªå§çž®ã®ç¹èš±](https://www.vcodex.com/video-compression-patents/)ã®åºæ¬ãåŠã°ãªããŠã¯ãªããŸããã
+
+## äžè¬çã³ãŒããã¯
+
+**äžè¬çãªãããªã³ãŒããã¯ã®èåŸã«ããäž»ãªæ©æ§**ã玹ä»ããŠãããŸããããããã®æŠå¿µã®ã»ãšãã©ã¯ VP9ãAV1ãHEVCã®ãããªææ°ã®ã³ãŒããã¯ã§ã圹ã«ç«ã¡ã䜿ãããŠããŸããç©äºãããªãåçŽã«ããŠèª¬æããããšãç解ããŠãã ããããšãã©ãå®éã®äŸ(ã ãããã¯H.264)ã䜿ã£ãŠãææ³ã®ãã¢ãè¡ããŸãã
+
+## ã¹ãããïŒ - ç»ååå²
+
+æåã®ã¹ãããã¯ãããã€ãã®**ããŒãã£ã·ã§ã³ããµãããŒãã£ã·ã§ã³**ããã£ãšçŽ°ããåäœã«**ãã¬ãŒã ãåå²**ããããšã§ãã
+
+![picture partitioning](/i/picture_partitioning.png "ç»ååå²")
+
+**ããããªã?** ããããã®çç±ããããŸããäŸãã°ãç»åãåå²ãããšå°ããªããŒãã£ã·ã§ã³ãåãã®ããå°ããªéšåã«äœ¿ãããã倧ããªããŒãã£ã·ã§ã³ãéçãªèæ¯ã«äœ¿ã£ãŠãäºæž¬ãããæ£ç¢ºã«è¡ãããšãã§ããŸãã
+
+éåžžã¯ãã³ãŒããã¯ã¯ãã¹ã©ã€ã¹(ãããã¯ã¿ã€ã«)ããã¯ã(ãããã¯ç¬Šå·ããªãŒãŠããã)ãããããã®ãµãããŒãã£ã³ã«ãš **ããŒãã£ã·ã§ã³ãæ§é åããŸã**ããããã®ããŒãã£ã·ã§ã³ã®æ倧ãµã€ãºã¯æ§ã
ã§ãHEVCã§ã¯64x64ãAVC16x16ã§ããããµãããŒãã£ã·ã§ã³ã¯4x4ãŸã§ã§ãã
+
+**ãã¬ãŒã ã¯ããã€ãã®ã¿ã€ãã«åããããŠãã**ã®ãåŠãã ããšãèŠããŠããŸããïŒ**ããŠããããã®èãããããã¯ã«é©çšãã**ããšãã§ããŸããããã§ãIã¹ã©ã€ã¹ãBã¹ã©ã€ã¹ãIãã¯ããããã¯ãªã©ãæã€ããšãã§ããŸãã
+
+> ### ãã³ãºãªã³: ããŒãã£ã·ã§ã³ã調ã¹ã
+> [Intel Video Pro Analyzer](https://software.intel.com/en-us/intel-video-pro-analyzer) (ææã§ãããæåã®10ãã¬ãŒã ã«å¶éãããç¡æãè©ŠãçããããŸã)ã䜿ãããšãã§ããŸãããããåæããã[VP9ããŒãã£ã·ã§ã³](/encoding_pratical_examples.md#transcoding)ã§ãã
+>
+> ![VP9 partitions view inte ](/i/paritions_view_intel_video_pro_analyzer.png "VP9 ããŒãã£ã·ã§ã³ãã¥ãŒ intel video pro analyzer")
+
+## ã¹ãããïŒ - äºæž¬
+
+ããŒãã£ã·ã§ã³ã«åå²ãããšããããã«ã€ããŠäºæž¬ãè¡ãããšãã§ããŸãã[ã€ã³ã¿ãŒäºæž¬](#temporal-redundancy-inter-prediction)ã®ããã«ã**åããã¯ãã«ãšå·®åãéä¿¡ãã**å¿
èŠãããããŸã[ã€ã³ãã©äºæž¬](#spatial-redundancy-intra-prediction)ã®ããã«ã**äºæž¬æ¹åãšå·®åãéä¿¡ãã**å¿
èŠããããŸãã
+
+## ã¹ãããïŒ - å€æ
+
+å·®åããã㯠(`äºæž¬ããŒãã£ã·ã§ã³ - å®éã®ããŒãã£ã·ã§ã³`)ãçæããåŸã**å€æ**ããããšã§**倧ãŸããªç»è³ª**ãä¿ã£ããŸãŸã©ã®**ãã¯ã»ã«ãæšãŠãããã**ãåããããã«ãªããŸãããããè¡ãããã«ã¯ããã€ãã®å€æãååšããŸãã
+
+[ä»ã®å€æ](https://en.wikipedia.org/wiki/List_of_Fourier-related_transforms#Discrete_transforms)ããããŸãããé¢æ£ã³ãµã€ã³å€æ(DCT)ããã£ããèŠãŠãããŸãã[**DCT**](https://en.wikipedia.org/wiki/Discrete_cosine_transform)ã®äž»ãªç¹åŸŽã¯:
+
+* **ãã¯ã»ã«**ãããã¯ãåããµã€ãºã®**åšæ³¢æ°ä¿æ°**ãããã¯ã«**å€æãã**ã
+* ãšãã«ã®ãŒã**å§çž®**ããŠã空éçåé·æ§ãåæžããããããã
+* **å
ã«æ»ãã**ããŸãã¯ãã¯ã»ã«ã«æ»ãã
+
+> 2017幎2æ2æ¥ã«Cintra, R. J.ãšBayer, F. Mã[14å ç®ã®ã¿ã®ç»åå§çž®çšDCTè¿äŒŒå€æ](https://arxiv.org/abs/1702.00817)ãšããè«æãçºè¡šããŸããã
+
+äžèšã®ç®æ¡æžãã®å©ç¹ãå
šãŠç解ããªãã£ããšããŠãå¿é
ãããŸããããã®æ¬åœã®äŸ¡å€ãèŠãåºãããã«ããã€ãã®å®éšãè©Šã¿ãŠã¿ãŸãã
+
+次ã®**ãã¯ã»ã«ã®ãããã¯** (8x8)ãäŸã«ãšããŸããã:
+
+![pixel values matrix](/i/pixel_matrice.png "ãã¯ã»ã«å€ãããªã¯ã¹")
+
+ããã¯ãããã¯ç»å(8x8)ãæç»ããŸã:
+
+![pixel values matrix](/i/gray_image.png "ãã¯ã»ã«å€ãããªã¯ã¹")
+
+ãã®ãã¯ã»ã«ã®ãããã¯ã«**DCTãé©çšãã**ãš**ä¿æ°ã®ãããã¯** (8x8)ãåŸãŸã:
+
+![coefficients values](/i/dct_coefficient_values.png "ä¿æ°ã®å€")
+
+ãã®ä¿æ°ã®ãããã¯ãæç»ããã°ããã®ç»åãåŸãã§ãããã:
+
+![dct coefficients image](/i/dct_coefficient_image.png "dctä¿æ°ç»å")
+
+å
ã®ç»åãšã¯äŒŒãŠã䌌ã€ããªãããšãåããã**æåã®ä¿æ°**ã¯ä»ã®ä¿æ°ãšã¯å
šãç°ãªã£ãŠããããšã«æ°ã¥ããããããŸããã ãã®æåã®ä¿æ°ã¯DCä¿æ°ãšããŠç¥ãããå
¥åé
åã®**ãµã³ãã«å
šäœ**ãè¡šããŸãã**å¹³åã«äŒŒãŠã**äœãã§ãã
+
+ãã®ä¿æ°ã®ãããã¯ã¯é«åšæ³¢æ°æåãäœåšæ³¢æ°æåããåãé¢ããšããé¢çœãç¹æ§ãæã£ãŠããŸãã
+
+![dct frequency coefficients property](/i/dctfrequ.jpg "dctåšæ³¢æ°ä¿æ°ç¹æ§")
+
+ç»åã§ã¯ã**ãšãã«ã®ãŒã®ã»ãšãã©**ã¯[**äœåšæ³¢**](https://web.archive.org/web/20150129171151/https://www.iem.thm.de/telekom-labor/zinke/mk/mpeg2beg/whatisit.htm)ã«éäžãããŸããããã§ç»åãåšæ³¢æ°æåã«å€æããŠ**é«åšæ³¢æ°ä¿æ°ãæšãŠ**ãã°ãç»è³ªãããã»ã©ç ç²ã«ããã«ç»åãè¡šçŸããã®ã«å¿
èŠãª**ããŒã¿éãåæž**ã§ããŸãã
+
+> åšæ³¢æ°ã¯ä¿¡å·ãã©ãã ãéãå€åããããæå³ããŸãã
+
+ã§ã¯åŸãããç¥èã䜿ã£ãŠãå
ã®ç»åãDCTã䜿ã£ãŠåšæ³¢æ°(ä¿æ°ã®ãããã¯)ã«å€æããŠããã£ãšãéèŠã§ãªãä¿æ°ã®éšåãæšãŠãå®éšãããŠã¿ãŸãããã
+
+ãŸããç»åã**åšæ³¢æ°é å**ã«å€æããŸãã
+
+![coefficients values](/i/dct_coefficient_values.png "åšæ³¢æ°å€")
+
+次ã«ãä¿æ°ã®äžéš(67%)ãæšãŠãŸããæšãŠãã®ã¯ã»ãšãã©ã¯å³äžã®éšåã§ãã
+
+![zeroed coefficients](/i/dct_coefficient_zeroed.png "ãŒãã«ããä¿æ°")
+
+æåŸã«ããã®äžéšãæšãŠãããä¿æ°ã®ãããã¯ããç»åãåçæã(å
ã«æ»ããå¿
èŠãããããšãèŠããŠãããŠãã ãã)ãå
ã®ç»åãšæ¯èŒããŸãã
+
+![original vs quantized](/i/original_vs_quantized.png "å
vs éåååŸ")
+
+ãã®ç»åã¯å
ã®ç»åãšäŒŒãŠããŸãããå€ãã®çžéç¹ãçºçããŠããŸãã**67.1875%ãæšãŠãŸãã**ãã å°ãªããšãå
ã®ç»åã«äŒŒãŠããç»åãåŸãããšãã§ããŸãããããç¥çã«ä¿æ°ãæšãŠãŠããã£ãšç»è³ªãè¯ãããããšãã§ããŸããããããã¯æ¬¡ã®ãããã¯ã§ãã
+
+> **ããããã®ä¿æ°ã¯ç»çŽ å
šäœã䜿ã£ãŠåœ¢æããã**
+>
+> ããããã®ä¿æ°ã¯ãïŒã€ã®ç»çŽ ã«çŽæ¥ãããã³ã°ããŠããããã§ã¯ãªããç»çŽ å
šäœã®éã¿ä»ãåèšã§ããããšã«çæããããšã¯éèŠã§ããäžèšã®çŽ æŽãããã°ã©ãã¯ã1çªç®ãš2çªç®ã®ä¿æ°ããããããã®ã€ã³ããã¯ã¹ã§ç°ãªãéã¿ã䜿ã£ãŠãã©ã®ããã«èšç®ããããã瀺ããŠããŸãã
+>
+> ![dct calculation](/i/applicat.jpg "dctèšç®")
+>
+> åå
ž: https://web.archive.org/web/20150129171151/https://www.iem.thm.de/telekom-labor/zinke/mk/mpeg2beg/whatisit.htm
+>
+> DCTåºåºããšã®[åçŽãªç»åã®åœ¢æãèŠãŠDCTãèŠèŠåãã](/dct_better_explained.ipynb)ããšãã§ããŸããäŸãã°ãäžèšã¯ããããã®ä¿æ°ã®éã¿ãã䜿ã£ãŠ[ïŒã€ã®æåã圢æãããŠãã](https://en.wikipedia.org/wiki/Discrete_cosine_transform#Example_of_IDCT)éçšã§ãã
+>
+> ![](https://upload.wikimedia.org/wikipedia/commons/5/5e/Idct-animation.gif )
+
+
+
+
+
+
+> ### ãã³ãºãªã³: çš®ã
ã®ä¿æ°ãæšãŠã
+> [DCTå€æ](/uniform_quantization_experience.ipynb)ãå®éšããŸãããã
+
+## ã¹ãããïŒ - éåå
+
+åã®ã¹ããã (å€æ)ã§ä¿æ°ãããã€ãæšãŠããšãã«ãéååã®ãããªãã®ãè¡ããŸããã ãã®ã¹ãããã§ã¯ãæšãŠãæ
å ±(**æ倱éšå**)ãéžã³ãŸããåçŽãªèšèã§ãããšã**å§çž®ãæãéããããã«ä¿æ°ãéåå**ããŸãã
+
+ã©ã®ããã«ä¿æ°ã®ãããã¯ãéååã§ããã§ããããïŒïŒã€ã®åçŽãªæ¹æ³ã¯ãåäžéååã§ãããããããã¯ã**åäžå€** (10) **ã§å²ã**ãå°æ°ç¹ãåãæšãŠãŸãã
+
+![quantize](/i/quantize.png "éåå")
+
+ã©ã®ããã«ãã®ä¿æ°ã®ãããã¯ã**å
ã«æ»ã** (åéåå)ã§ããã§ããããïŒ**åãå€** (10)**ãæãã**ããšã«ããæ»ãããšãã§ããŸãã
+
+![re-quantize](/i/re-quantize.png "åéåå")
+
+ãã®**ããæ¹ã¯æé©ãªæ¹æ³ã§ã¯ãããŸãã**ãããããã®ä¿æ°ã®éèŠåºŠãèæ
®ããŠããªãããã§ãã åäžå€ã®ä»£ããã«**éååãããªã¯ã¹**ã䜿ãããšãã§ããŸãããã®ãããªã¯ã¹ã§DCTã®ç¹æ§ã掻ããããšãã§ããŸããå³äžãäžçªéååããŠãå·Šäžã¯ããŸãéååããŸããã[JPEGã¯äŒŒãããæ¹ã䜿ã£ãŠããŸã](https://www.hdm-stuttgart.de/~maucher/Python/MMCodecs/html/jpegUpToQuant.html)ã[ãœãŒã¹ã³ãŒãäžã§ãã®ãããªã¯ã¹ãèŠã](https://github.com/google/guetzli/blob/master/guetzli/jpeg_data.h#L40)ããšãã§ããŸãã
+
+> ### ãã³ãºãªã³: éåå
+> [éåå](/dct_experiences.ipynb)ãå®éšããŸãããã
+
+## ã¹ãããïŒ - ãšã³ããããŒç¬Šå·å
+
+ããŒã¿(ç»å ãããã¯/ã¹ã©ã€ã¹/ãã¬ãŒã )ãéååããåŸãããã«å¯éå§çž®ããããšãã§ããŸããããŒã¿å§çž®ã®ããã®ããããã®æ¹æ³(ã¢ã«ãŽãªãºã )ãååšããŸãããããã®ããã€ããç°¡åã«äœéšããŠãããŸããããæ·±ãç解ã®ããã«ã¯ããã®çŽ æŽãããæ¬[Understanding Compression: Data Compression for Modern Developers](https://www.amazon.com/Understanding-Compression-Data-Modern-Developers/dp/1491961538/)ãèªããšããã§ãããã
+
+### å¯å€é·ç¬Šå·:
+
+èšå·ã®ã¹ããªãŒã ãæã£ãŠãããšããŸã: **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ããã**ãã䜿ããŸããã
+
+ããããã®ã³ãŒãã¯ãŠããŒã¯ãªæ¥é 笊å·ãæã€å¿
èŠãããããšã«æ³šæããŠãã ãã [ãããã³ããããã®æ°åãèŠã€ããããšãå©ããŠãããŸã](https://en.wikipedia.org/wiki/Huffman_coding)ãããã€ãã®åé¡ããããŸããããã®æ¹æ³ã¯[ããã€ãã®ãããªã³ãŒããã¯ã§ãŸã ãµããŒã](https://en.wikipedia.org/wiki/Context-adaptive_variable-length_coding)ããŠããŸããããã¯å§çž®ãå¿
èŠãšããå€ãã®ã¢ããªã±ãŒã·ã§ã³ã«æçšãªã¢ã«ãŽãªãºã ã§ãã
+
+ãšã³ã³ãŒããŒãšãã³ãŒããŒã®äž¡æ¹ããã®ã³ãŒãã®èšå·ããŒãã«ã**ç¥ããªããŠã¯ãããŸãã**ãããã§ããŒãã«ãéä¿¡ããå¿
èŠããããŸãã
+
+### ç®è¡ç¬Šå·:
+
+èšå·: **a**, **e**, **r**, **s**, **t** ã®ã¹ããªãŒã ãæã£ãŠããŠããããã®ç¢ºçããã®è¡šã«ãã£ãŠè¡šããããšä»®å®ããŸãããã
+
+| | a | e | r | s | t |
+|-------------|-----|-----|------|------|-----|
+| probability | 0.3 | 0.3 | 0.15 | 0.05 | 0.2 |
+
+ãã®è¡šãèæ
®ã«å
¥ããŠãåºçŸé ã«ãœãŒããããå
šãŠã®å¯èœãªèšå·ãå«ãç¯å²ã°ã©ããäœããŸãã
+
+![initial arithmetic range](/i/range.png "åæç®è¡ç¯å²")
+
+ããŠãã¹ããªãŒã **eat**ã笊å·åããŠã¿ãŸããããæåã®èšå·**e**ãåãäžããŸããããã¯**0.3以äž0.6æªæº**ã«äœçœ®ããŠããŸãããã®éšåç¯å²ãåãäžãããããåã³åãå²åã§åå²ããŸãã
+
+![second sub range](/i/second_subrange.png "2çªç®ã®éšåç¯å²")
+
+ã¹ããªãŒã **eat**ã®ç¬Šå·åãç¶ããŸãããã次ã«èšå·**a**ãåãäžããŸããããã¯**0.3以äž0.39æªæº**ã«ååšãŸãããããŠãæåŸã®èšå· **t**ãåãäžããŸããããäžåºŠåãåŠçãè¡ããš**0.354以äž0.372æªæº**ãšããæçµçãªç¯å²ãåŸãŸãã
+
+![final arithmetic range](/i/arithimetic_range.png "æçµçãªç®è¡ç¯å²")
+
+æçµç¯å²**0.354以äž0.372æªæº**ããïŒã€ã®æ°å€ãåãäžããå¿
èŠããããŸãã**0.36**ãåãäžããŸããããããããã®éšåç¯å²å
ãªãã©ããªæ°å€ãéžãã§ãããŸããŸããããã®æ°å€**ã ãã§**ãå
ã®ã¹ããªãŒã **eat**ã埩å
ããããšãã§ããŸããããã¯ãã¹ããªãŒã ã笊å·åããçºã«ç¯å²ã®ç¯å²ã«ç·ãåŒããã®ããã«æããããšãã§ããŸãã
+![final range traverse](/i/range_show.png "æçµç¯å²æšªæ")
+
+**ééçš** (å¥åã埩å·å) ã¯åæ§ã«ç°¡åã§ãæ°å€**0.36**ãšå
ã®ç¯å²ã䜿ã£ãŠãåãåŠçãè¡ãããã®æ°å€ãã笊å·åãããã¹ããªãŒã ãæããã«ããŸãã
+
+æåã®ç¯å²ã§ããã®æ°å€ãïŒã€ã®éšåã«äžèŽãããããæåã®èšå·ã§ããããšã«æ°ã¥ããŸããããããããã®éšåç¯å²ã以åè¡ã£ãããã«ãŸãåå²ããŸãããããš**0.36**ãèšå·**a**ã«åãããšãããããåãåŠçãç¹°ãè¿ããšãæåŸã®èšå·ã§ãã**t**ãèŠã€ããŸã(笊å·åã®ã¹ããªãŒã *eat*ã圢æããŸã)ã
+
+笊å·åãšåŸ©å·åã®äž¡æ¹ã¯ãèšå·ç¢ºçããŒãã«ã**ç¥ãå¿
èŠããããŸã**ãããã§ããŒãã«ãéä¿¡ããå¿
èŠããããŸãã
+
+çŽ æŽãããã§ãããã人ã
ã¯æ¬åœã«è³¢ãããã®ãããªè§£æ±ºçãçã¿åºããŸãããããã€ãã®[ãããªã³ãŒããã¯](https://en.wikipedia.org/wiki/Context-adaptive_binary_arithmetic_coding)ã¯ãã®ææ³ã䜿ã£ãŠããŸãã(ãããã¯å°ãªããšããªãã·ã§ã³ãšããŠæäŸããŠããŸã)ã
+
+ãã®èãã¯ãéååãããã¹ããªãŒã ãå¯éå§çž®ããçºã®ãã®ã§ããééããªããã®èšäºã§ã¯äŒããããŠããªã詳现ãçç±ããã¬ãŒããªãçãå±±ã®ããã«ãããŸããããããèªè
ã¯ããããããŒãšããŠ[ãã£ãšåŠã¶ã¹ãã§ã](https://www.amazon.com/Understanding-Compression-Data-Modern-Developers/dp/1491961538/)ãããæ°ããã³ãŒããã¯ã¯å¥ã®[ANSã®ãããªãšã³ããããŒç¬Šå·åã¢ã«ãŽãªãºã ](https://en.wikipedia.org/wiki/Asymmetric_Numeral_Systems)ã䜿ãããšããŠããŸãã
+
+> ### ãã³ãºãªã³: CABAC察CAVLC
+> [ïŒã€ã¯CABACãããäžæ¹ã¯CAVLCã䜿ã£ãŠïŒã€ã®ã¹ããªãŒã ãçæ](https://github.com/leandromoreira/introduction_video_technology/blob/master/encoding_pratical_examples.md#cabac-vs-cavlc)ããçæããçºã«ããã**æéãšæçµçãªãµã€ãºãæ¯èŒã**ããŠã¿ãŸãããã
+
+## ã¹ãããïŒ - ãããã¹ããªãŒã ãã©ãŒããã
+
+ãããã®ã¹ãããå
šãŠãè¡ã£ãåŸã**å§çž®ããããã¬ãŒã ãšãããã®ã¹ããããŸã§ã®ã³ã³ããã¹ããäžã€ã«ãŸãšãã**å¿
èŠããããŸãã **ãšã³ã³ãŒãã«ãã£ãŠãªããã決å®**ã«ã€ããŠãã³ãŒããžæ瀺çã«ç¥ãããå¿
èŠããããŸããããã深床ãè²ç©ºéã解å床ãäºæž¬æ
å ±ïŒåããã¯ãã«ãã€ã³ãã©äºæž¬æ¹åïŒããããã¡ã€ã«ã¬ãã«ããã¬ãŒã ã¬ãŒãããã¬ãŒã ã¿ã€ãããã¬ãŒã æ°ããã®ä»å€æ°ã§ãã
+
+H.264ãããã¹ããªãŒã ã«ã€ããŠè¡šé¢çã«åŠãã§ãããŸããæåã®ã¹ãããã¯[æå°éã®H.264 *ãããã¹ããªãŒã ãçæãã](/encoding_pratical_examples.md#generate-a-single-frame-h264-bitstream)ããšã§ãããã®ã¬ããžããªãš[ffmpeg](http://ffmpeg.org/)ã䜿ã£ãŠããããã§ããŸãã
+
+```
+./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](/i/minimal.png "æå°h264ãããã¹ããªãŒã ãçæãããã¬ãŒã ã䜿ã£ã")
+
+### H.264ãããã¹ããªãŒã
+
+AVC (H.264)æšæºã¯ãæ
å ±ã**ãã¯ããã¬ãŒã ** (ãããã¯ãŒã¯çã«ã¯)**[NAL](https://en.wikipedia.org/wiki/Network_Abstraction_Layer)** (Network Abstraction Layer)ãšåŒã°ãã圢ã§éä¿¡ãããããšãå®çŸ©ããŠããŸããNALã®äž»ãªç®çã¯ã"ãããã¯ãŒã¯ãã¬ã³ããªãŒ"ãªãããªè¡šçŸãæäŸããããšã§ãããã®æšæºã¯ãTV (ã¹ããªãŒã ããŒã¹)ãã€ã³ã¿ãŒããã(ãã±ããããŒã¹)ããã®ä»ã§åäœããªããã°ãªããŸããã
+
+![NAL units H.264](/i/nal_units.png "NALãŠããã H.264")
+
+NALãŠãããã®å¢çãå®çŸ©ãã **[åæããŒã«ãŒ](https://en.wikipedia.org/wiki/Frame_synchronization)**ããããŸããããããã®åæããŒã«ãŒã¯ãæåã¯`0x00 0x00 0x00 0x01`ã§ããã以éã¯`0x00 0x00 0x01`ã®å€ãæã¡ãŸããããçæãããh264ãããã¹ããªãŒã äžã§**16é²ãã³ã**ãè¡ãã°ããã¡ã€ã«ã®æåã®æ¹ã«ãå°ãªããšãïŒã€ã®NALãèŠã€ããããšãã§ããŸãã
+
+![synchronization marker on NAL units](/i/minimal_yuv420_hex.png "NALãŠãããã®åæããŒã«ãŒ")
+
+å
ã«è¿°ã¹ããšããããã³ãŒãã¯ç»åããŒã¿ã ãã§ã¯ãªããåç»ããã¬ãŒã ãè²ã䜿çšããããã©ã¡ãŒã¿ããã®ä»ã®è©³çŽ°ãç¥ãå¿
èŠããããŸããããããã®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**ãã£ãŒã«ãã§ããšã³ã³ãŒãã䜿ã£ããããã¡ã€ã«ã瀺ããŸãããã®äŸã§ã¯ã **[å¶çŽä»ããã€ãããã¡ã€ã«](https://en.wikipedia.org/wiki/H.264/MPEG-4_AVC#Profiles)** ã䜿ã£ãŠããŸããããã¯B (åæ¹åäºæž¬)ã¹ã©ã€ã¹ããµããŒãããªããã€ãããã¡ã€ã«ã§ãã
+
+![SPS binary view](/i/minimal_yuv420_bin.png "SPSãã€ããªãã¥ãŒ")
+
+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](https://pythonhosted.org/bitstring/exp-golomb.html)
+
+ãããã®ãã£ãŒã«ãã®å€ã«å¯ŸããŠããèšç®ããããšã**解å床**ãåŸãããšãã§ããŸãã`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](/i/slice_nal_idr_bin.png "h264 IDRã¹ã©ã€ã¹ããããŒ")
+
+æåã®ïŒãã€ãã®å€ãèŠãŸããã: `01100101 10001000 10000100 00000000 00100001 11111111`ããã§ã«ç¥ã£ãŠãéããæåã®ãã€ãã§NALãäœããç¥ãããšãã§ããŸãããã®äŸã§ã¯ã(`00101`)㧠**IDRã¹ã©ã€ã¹ (5)** ã§ããããã«æ€æ»ããŠã¿ãŸã:
+
+![h264 slice header spec](/i/slice_header.png "h264ã¹ã©ã€ã¹ãããä»æ§")
+
+ä»æ§ã®æ
å ±ã䜿ããã¹ã©ã€ã¹ã®ã¿ã€ã (**slice_type**)ããã¬ãŒã çªå·(**frame_num**)ãä»ã®éèŠãªãã£ãŒã«ãã埩å·ããããšãã§ããŸãã
+
+ããã€ãã®ãã£ãŒã«ãã®å€ãåŸãããã«(`ue(v)ãme(v)ãse(v)ãte(v)`)ãããã[Exponential-Golomb](https://pythonhosted.org/bitstring/exp-golomb.html)ãšåŒã°ããç¹å¥ãªãã³ãŒããŒã䜿ã£ãŠããã³ãŒãããå¿
èŠããããŸãããã®æ¹æ³ã¯ãããã©ã«ãå€ãå€ãã±ãŒã¹ã§ã¯ãããŠãã**å€æ°å€ã笊å·åããã®ã«ãšãŠãå¹çç**ã§ãã
+
+> ãã®ãããªã®**slice_type**ãš**frame_num**ã®å€ã¯7 (Iã¹ã©ã€ã¹)ãš0 (æåã®ãã¬ãŒã )ã§ãã
+
+**ãããã¹ããªãŒã ããããã³ã«ãšããŠ**èŠãããšãã§ããŸãããã®ãããã¹ããªãŒã ã«ã€ããŠãã£ãšåŠã³ããããããã¯åŠã¶å¿
èŠããããªãã[ITU H.264 spec.]( http://www.itu.int/rec/T-REC-H.264-201610-I)ãåç
§ããŠãã ãããäžèšã¯ãã¯ãå³è¡šã§ããã¯ãã£ããŒã¿(å§çž®YUV)ãã©ãã«äœçœ®ãããã瀺ããŠããŸãã
+
+![h264 bitstream macro diagram](/i/h264_bitstream_macro_diagram.png "h264ãããã¹ããªãŒã ãã¯ãå³è¡š")
+
+[VP9ãããã¹ããªãŒã ](https://storage.googleapis.com/downloads.webmproject.org/docs/vp9/vp9-bitstream-specification-v0.6-20160331-draft.pdf)ã[H.265 (HEVC)](http://handle.itu.int/11.1002/1000/11885-en?locatt=format:pdf)ããããã«ã¯**æ°ãããã¹ããã¬ãã§ãã** [**AV1** ãããã¹ããªãŒã ](https://medium.com/@mbebenita/av1-bitstream-analyzer-d25f1c27072b#.d5a89oxz8
+)ã®ãããã¹ããªãŒã ãæ¢çŽ¢ããããšãã§ããŸãã[ãããã¯ã¿ããªäŒŒãŠãŸããïŒããã](http://www.gpac-licensing.com/2016/07/12/vp9-av1-bitstream-format/)ããããïŒã€ãåŠã¶ãšãä»ã®ã¯ç°¡åã«ç解ã§ããŸãã
+
+> ### ãã³ãºãªã³: H.264ãããã¹ããªãŒã ã調ã¹ã
+> [åäžãã¬ãŒã ã®ãããªãçæ](https://github.com/leandromoreira/introduction_video_technology/blob/master/encoding_pratical_examples.md#generate-a-single-frame-video)ãã[mediainfo](https://en.wikipedia.org/wiki/MediaInfo)ã䜿ã£ãŠH.264ãããã¹ããªãŒã ãæ€æ»ããŠã¿ãŸããããå®éã[h264 (AVC)ãããã¹ããªãŒã ãããŒã¹ãããœãŒã¹ã³ãŒã](https://github.com/MediaArea/MediaInfoLib/blob/master/Source/MediaInfo/Video/File_Avc.cpp)ãèŠãããšãã§ããŸãã
+>
+> ![mediainfo details h264 bitstream](/i/mediainfo_details_1.png "mediainfoãh264ãããã¹ããªãŒã ã詳述ãã")
+>
+> [Intel Video Pro Analyzer](https://software.intel.com/en-us/intel-video-pro-analyzer)ã䜿ãããšãã§ããŸããææã§ãããæåã®10ãã¬ãŒã ã«å¶éãããç¡æãè©ŠãçããããåŠç¿ç®çãšããŠã¯åé¡ãããŸããã
+>
+> ![intel video pro analyzer details h264 bitstream](/i/intel-video-pro-analyzer.png "intel video pro analyzerãh264ãããã¹ããªãŒã ã詳述ãã")
+
+## ãããã
+
+å€ãã®**çŸä»£ã®ã³ãŒããã¯ãããããŸã§åŠãã§ããåãã¢ãã«ã䜿ã£ãŠãã**ããšã«æ°ã¥ãã§ããããå®éã®ãããªã³ãŒããã¯ã®ãããã¯å³ãã¿ãŠã¿ãŸããããããã¯åŠãã§ããå
šãŠã®ã¹ããããå«ãã§ããŸããå°ãªããšãã³ãŒããã¯é¢é£ã®çºæãæç®ã«ã€ããŠããç解ããããšãã§ããããã«ãªã£ãããšã«ãªããŸãã
+
+![thor_codec_block_diagram](/i/thor_codec_block_diagram.png "thor_codec_block_diagram")
+
+å
ã«ã[720p解å床ã§30fpsã§1æéã®ãããªãã¡ã€ã«ãä¿åããã®ã«139GBã®ã¹ãã¬ãŒãž](#chroma-subsampling)ãå¿
èŠã«ãªãããšãèšç®ããŸãããããã§åŠãã ææ³ã䜿ãã°ãã€ãŸã**ã€ã³ã¿ãŒäºæž¬ãã€ã³ãã©äºæž¬ãå€åœ¢ãéååããšã³ããããŒç¬Šå·åããã®ä»**ã䜿ãã°ã**ãã¯ã»ã«ããã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](/i/avc_vs_hevc.png "h264察h265")
+
+# ãªã³ã©ã€ã³ã¹ããªãŒãã³ã°
+## äžè¬çãªã¢ãŒããã¯ãã£
+
+![general architecture](/i/general_architecture.png "äžè¬çãªã¢ãŒããã¯ãã£")
+
+[TODO]
+
+## ããã°ã¬ãã·ãããŠã³ããŒããšã¢ãããã£ãã¹ããªãŒãã³ã°
+
+![progressive download](/i/progressive_download.png "ããã°ã¬ãã·ãããŠã³ããŒã")
+
+![adaptive streaming](/i/adaptive_streaming.png "ã¢ãããã£ãã¹ããªãŒãã³ã°")
+
+[TODO]
+
+## ã³ã³ãã³ãä¿è·
+
+**åçŽãªããŒã¯ã³ã·ã¹ãã **ã䜿ã£ãŠã³ã³ãã³ããä¿è·ããããšãã§ããŸããããŒã¯ã³ãæã£ãŠããªããŠãŒã¶ãŒã¯ãããªããªã¯ãšã¹ãããããšããŠããCDNãçŠæ¢ããŸããäžæ¹æå¹ãªããŒã¯ã³ãæã€ãŠãŒã¶ãŒã¯ãã®ã³ã³ãã³ããåçããããšãã§ããŸããããã¯ãããŠãã®ãŠã§ãèªèšŒã·ã¹ãã ãšã»ãšãã©åãããã«åäœããŸãã
+
+![token_protection](/i/token_protection.png "ããŒã¯ã³ä¿è·")
+
+ãã®ããŒã¯ã³ã·ã¹ãã ã®äžäººã®ãŠãŒã¶ãŒãããããŠãŒã¶ãŒã«ãããªãããŠã³ããŒããããŠããããé
åžãããããšãã§ããŸãã**DRM (ããžã¿ã«èäœæš©ç®¡ç)** ã·ã¹ãã ã䜿ã£ãŠãããé¿ããããšãã§ããŸãã
+
+![drm](/i/drm.png "drm")
+
+å®éã®è£œåã·ã¹ãã ã§ã人ã
ã¯ãã°ãã°ãããäž¡æ¹ã®æè¡ã䜿ã£ãŠãæ¿èªãšèªèšŒãæäŸããŸãã
+
+### DRM
+#### ã¡ã€ã³ã·ã¹ãã
+
+* FPS - [**FairPlay Streaming**](https://developer.apple.com/streaming/fps/)
+* PR - [**PlayReady**](https://www.microsoft.com/playready/)
+* WV - [**Widevine**](http://www.widevine.com/)
+
+
+#### �
+
+DRMã¯ããžã¿ã«èäœæš©ç®¡çãæå³ããŸããããã¯ãäŸãã°ããžã¿ã«ãããªããªãŒãã£ãªãªã©ã®**ããžã¿ã«ã¡ãã£ã¢ã«èäœæš©ä¿è·ãæäŸãã**æ¹æ³ã§ããããã¯å€ãã®å Žæã§äœ¿ãããŠããŸããã[åºãã¯åãå
¥ããããŠããŸãã](https://en.wikipedia.org/wiki/Digital_rights_management#DRM-free_works)ã
+
+#### ãªã?
+
+ã³ã³ãã³ã補äœè
(ãããŠãã¯ã¹ã¿ãžãª)ã¯ãããžã¿ã«ã¡ãã£ã¢ã®äžæ£ãªåé
åžãé²ãããã«ã ç¥ç財ç£ãã³ããŒãããããšããå®ãããããã§ãã
+
+#### ã©ã®ããã«?
+
+DRMã®æœè±¡çã§äžè¬çãªåœ¢åŒãããšãŠãåçŽãªæ¹æ³ã§èª¬æããŠãããŸãã
+
+**ã³ã³ãã³ãC1** (äŸãã° hlsãdashãããªã¹ããªãŒãã³ã°)ãš**ãã¬ã€ã€ãŒP1** (äŸãã° shaka-clapprãexo-playerãios)ã**ããã€ã¹D1** (äŸãã° ã¹ããŒããã©ã³ããã¬ããã¿ãã¬ããããã¹ã¯ããã/ããŒãããã¯)äžã«ããã**DRMã·ã¹ãã DRM1** (widevineãplayreadyãFairPlayãªã©)ã䜿ã£ãŠãããšããŸãããã
+
+ã³ã³ãã³ãC1ã¯ãã·ã¹ãã DRM1ããã®**察称éµK1**ã§æå·åããã**æå·åã³ã³ãã³ãC'1**ãçæããŸãã
+
+![drm general flow](/i/drm_general_flow.jpeg "drmçæãããŒ")
+
+ããã€ã¹D1ã®ãã¬ã€ã€ãŒP1ã¯ïŒã€ã®(é察称)éµã**ç§å¯éµPRK1** (ãã®éµã¯ä¿è·ãã1**D1**ã«ããç¥ãããŠããªã)ãš**å
¬ééµPUK1**ãæã£ãŠããŸãã
+
+> **1ä¿è·ããã**: ãã®ä¿è·ã¯ã**ããŒããŠã§ã¢ãä»ããŠ**ãªãããŸããäŸãã°ããã®éµã¯ãç¹å¥ãª(èªã¿åãå°çš)ãããã®äžã«ä¿åãããŸããããã¯ã埩å·ãæäŸãã[ãã©ãã¯ããã¯ã¹](https://en.wikipedia.org/wiki/Black_box)ã®ããã«åããŸãããããã¯(ããŸãå®å
šã§ãªã)**ãœãããŠã§ã¢ã«ãã** ãªãããŸããDRM ã·ã¹ãã ã¯ãäžããããããã€ã¹ãã©ã®ã¿ã€ãã®ä¿è·ãæã£ãŠããããç¥ãæ¹æ³ãæäŸããŸãã
+
+**ãã¬ã€ã€ãŒP1ãã³ã³ãã³ãC'1ãåçããã**ãšãã**DRMã·ã¹ãã DRM1**ã䜿ãå¿
èŠãããããŸãå
¬ééµ**PUK1**ãäžããŸããDRMã·ã¹ãã DRM1㯠ã¯ã©ã€ã¢ã³ãã®å
¬ééµ**PUK1**ã§**æå·åãããéµK1**ãè¿ããŸããçè«äžããã®ã¬ã¹ãã³ã¹ã¯.**D1ã ãã埩å·å¯èœ**ã§ãã
+
+`K1P1D1 = enc(K1, PUK1)`
+
+**P1**ã¯ãDRMããŒã«ã«ã·ã¹ãã (ããã¯ç¹å¥ãªããŒããŠã§ã¢ããœãããŠã§ã¢ã§ãã[SOC](https://en.wikipedia.org/wiki/System_on_a_chip)ããªããã)ã䜿ããŸãããã®ã·ã¹ãã ã¯ãç§å¯éµPRK1ã䜿ã£ãŠãã³ã³ãã³ãã**埩å·ããããšãã§ããŸã**ã**K1P1D1ããã®å¯Ÿç§°éµK1**ã埩å·åããŠã**C'1ãåç**ããããšãã§ããŸããéµãRAMäžã§å€ã«ãããããªãã®ããã¹ãã§ãã
+
+ ```
+ K1 = dec(K1P1D1, PRK1)
+
+ P1.play(dec(C'1, K1))
+ ```
+
+![drm decoder flow](/i/drm_decoder_flow.jpeg "drmãã³ãŒããããŒ")
+
+# jupyterã®äœ¿ãæ¹
+
+**dockerãã€ã³ã¹ããŒã«**ãããŠããããšã確èªããŠã`./s/start_jupyter.sh`ãå®è¡ããã¿ãŒããã«äžã®æ瀺ã«åŸã£ãŠãã ããã
+
+# ã«ã³ãã¡ã¬ã³ã¹
+
+* [DEMUXED](https://demuxed.com/) - [æåŸã®ïŒã€ã®ã€ãã³ããã¬ãŒã³ããŒã·ã§ã³ããã§ãã¯](https://www.youtube.com/channel/UCIc_DkRxo9UgUSTvWVNCmpA)ããããšãã§ããŸãã
+
+# åèæç®
+
+ããã«æé«ã®ã³ã³ãã³ãããããŸãããã®ããã¹ãã§èŠãããå
šãŠã¯ãããããæœåºãããããå
ã«ãªã£ãŠããããäœã圱é¿ãåããŠããŸãããã®é©ãã¹ããªã³ã¯ãæ¬ãåç»ãªã©ã§ãç¥èãããæ·±ãããããšãã§ããŸãã
+
+ãªã³ã©ã€ã³ã³ãŒã¹ãšãã¥ãŒããªã¢ã«:
+
+* https://www.coursera.org/learn/digital/
+* https://people.xiph.org/~tterribe/pubs/lca2012/auckland/intro_to_video1.pdf
+* https://xiph.org/video/vid1.shtml
+* https://xiph.org/video/vid2.shtml
+* http://slhck.info/ffmpeg-encoding-course
+* http://www.cambridgeincolour.com/tutorials/camera-sensors.htm
+* http://www.slideshare.net/vcodex/a-short-history-of-video-coding
+* http://www.slideshare.net/vcodex/introduction-to-video-compression-13394338
+* https://developer.android.com/guide/topics/media/media-formats.html
+* http://www.slideshare.net/MadhawaKasun/audio-compression-23398426
+* http://inst.eecs.berkeley.edu/~ee290t/sp04/lectures/02-Motion_Compensation_girod.pdf
+
+æ¬:
+
+* https://www.amazon.com/Understanding-Compression-Data-Modern-Developers/dp/1491961538/ref=sr_1_1?s=books&ie=UTF8&qid=1486395327&sr=1-1
+* https://www.amazon.com/H-264-Advanced-Video-Compression-Standard/dp/0470516925
+* https://www.amazon.com/Practical-Guide-Video-Audio-Compression/dp/0240806301/ref=sr_1_3?s=books&ie=UTF8&qid=1486396914&sr=1-3&keywords=A+PRACTICAL+GUIDE+TO+VIDEO+AUDIO
+* https://www.amazon.com/Video-Encoding-Numbers-Eliminate-Guesswork/dp/0998453005/ref=sr_1_1?s=books&ie=UTF8&qid=1486396940&sr=1-1&keywords=jan+ozer
+
+ãããã¹ããªãŒã ä»æ§:
+
+* http://www.itu.int/rec/T-REC-H.264-201610-I
+* http://www.itu.int/ITU-T/recommendations/rec.aspx?rec=12904&lang=en
+* https://storage.googleapis.com/downloads.webmproject.org/docs/vp9/vp9-bitstream-specification-v0.6-20160331-draft.pdf
+* http://iphome.hhi.de/wiegand/assets/pdfs/2012_12_IEEE-HEVC-Overview.pdf
+* http://phenix.int-evry.fr/jct/doc_end_user/current_document.php?id=7243
+* http://gentlelogic.blogspot.com.br/2011/11/exploring-h264-part-2-h264-bitstream.html
+* https://forum.doom9.org/showthread.php?t=167081
+* https://forum.doom9.org/showthread.php?t=168947
+
+ãœãããŠã§ã¢:
+
+* https://ffmpeg.org/
+* https://ffmpeg.org/ffmpeg-all.html
+* https://ffmpeg.org/ffprobe.html
+* https://trac.ffmpeg.org/wiki/
+* https://software.intel.com/en-us/intel-video-pro-analyzer
+* https://medium.com/@mbebenita/av1-bitstream-analyzer-d25f1c27072b#.d5a89oxz8
+
+éITUã³ãŒããã¯:
+
+* https://aomedia.googlesource.com/
+* https://github.com/webmproject/libvpx/tree/master/vp9
+* https://people.xiph.org/~xiphmont/demo/daala/demo1.shtml
+* https://people.xiph.org/~jm/daala/revisiting/
+* https://www.youtube.com/watch?v=lzPaldsmJbk
+* https://fosdem.org/2017/schedule/event/om_av1/
+
+ãšã³ã³ãŒãã®æŠå¿µ:
+
+* http://x265.org/hevc-h265/
+* http://slhck.info/video/2017/03/01/rate-control.html
+* http://slhck.info/video/2017/02/24/vbr-settings.html
+* http://slhck.info/video/2017/02/24/crf-guide.html
+* https://arxiv.org/pdf/1702.00817v1.pdf
+* https://trac.ffmpeg.org/wiki/Debug/MacroblocksAndMotionVectors
+* http://web.ece.ucdavis.edu/cerl/ReliableJPEG/Cung/jpeg.html
+* http://www.adobe.com/devnet/adobe-media-server/articles/h264_encoding.html
+* https://prezi.com/8m7thtvl4ywr/mp3-and-aac-explained/
+* https://blogs.gnome.org/rbultje/2016/12/13/overview-of-the-vp9-video-codec/
+
+ãã¹ãçšãããªã·ãŒã±ã³ã¹:
+
+* http://bbb3d.renderfarming.net/download.html
+* https://www.its.bldrdoc.gov/vqeg/video-datasets-and-organizations.aspx
+
+ãã®ä»:
+
+* http://stackoverflow.com/a/24890903
+* http://stackoverflow.com/questions/38094302/how-to-understand-header-of-h264
+* http://techblog.netflix.com/2016/08/a-large-scale-comparison-of-x264-x265.html
+* http://vanseodesign.com/web-design/color-luminance/
+* http://www.biologymad.com/nervoussystem/eyenotes.htm
+* http://www.compression.ru/video/codec_comparison/h264_2012/mpeg4_avc_h264_video_codecs_comparison.pdf
+* http://www.csc.villanova.edu/~rschumey/csc4800/dct.html
+* http://www.explainthatstuff.com/digitalcameras.html
+* http://www.hkvstar.com
+* http://www.hometheatersound.com/
+* http://www.lighterra.com/papers/videoencodingh264/
+* http://www.red.com/learn/red-101/video-chroma-subsampling
+* http://www.slideshare.net/ManoharKuse/hevc-intra-coding
+* http://www.slideshare.net/mwalendo/h264vs-hevc
+* http://www.slideshare.net/rvarun7777/final-seminar-46117193
+* http://www.springer.com/cda/content/document/cda_downloaddocument/9783642147029-c1.pdf
+* http://www.streamingmedia.com/Articles/Editorial/Featured-Articles/A-Progress-Report-The-Alliance-for-Open-Media-and-the-AV1-Codec-110383.aspx
+* http://www.streamingmediaglobal.com/Articles/ReadArticle.aspx?ArticleID=116505&PageNum=1
+* http://yumichan.net/video-processing/video-compression/introduction-to-h264-nal-unit/
+* https://cardinalpeak.com/blog/the-h-264-sequence-parameter-set/
+* https://cardinalpeak.com/blog/worlds-smallest-h-264-encoder/
+* https://codesequoia.wordpress.com/category/video/
+* https://developer.apple.com/library/content/technotes/tn2224/_index.html
+* https://en.wikibooks.org/wiki/MeGUI/x264_Settings
+* https://en.wikipedia.org/wiki/Adaptive_bitrate_streaming
+* https://en.wikipedia.org/wiki/AOMedia_Video_1
+* https://en.wikipedia.org/wiki/Chroma_subsampling#/media/File:Colorcomp.jpg
+* https://en.wikipedia.org/wiki/Cone_cell
+* https://en.wikipedia.org/wiki/File:H.264_block_diagram_with_quality_score.jpg
+* https://en.wikipedia.org/wiki/Inter_frame
+* https://en.wikipedia.org/wiki/Intra-frame_coding
+* https://en.wikipedia.org/wiki/Photoreceptor_cell
+* https://en.wikipedia.org/wiki/Pixel_aspect_ratio
+* https://en.wikipedia.org/wiki/Presentation_timestamp
+* https://en.wikipedia.org/wiki/Rod_cell
+* https://it.wikipedia.org/wiki/File:Pixel_geometry_01_Pengo.jpg
+* https://leandromoreira.com.br/2016/10/09/how-to-measure-video-quality-perception/
+* https://sites.google.com/site/linuxencoding/x264-ffmpeg-mapping
+* https://softwaredevelopmentperestroika.wordpress.com/2014/02/11/image-processing-with-python-numpy-scipy-image-convolution/
+* https://tools.ietf.org/html/draft-fuldseth-netvc-thor-03
+* https://www.encoding.com/android/
+* https://www.encoding.com/http-live-streaming-hls/
+* https://web.archive.org/web/20150129171151/https://www.iem.thm.de/telekom-labor/zinke/mk/mpeg2beg/whatisit.htm
+* https://www.lifewire.com/cmos-image-sensor-493271
+* https://www.linkedin.com/pulse/brief-history-video-codecs-yoav-nativ
+* https://www.linkedin.com/pulse/video-streaming-methodology-reema-majumdar
+* https://www.vcodex.com/h264avc-intra-precition/
+* https://www.youtube.com/watch?v=9vgtJJ2wwMA
+* https://www.youtube.com/watch?v=LFXN9PiOGtY
+* https://www.youtube.com/watch?v=Lto-ajuqW3w&list=PLzH6n4zXuckpKAj1_88VS-8Z6yn9zX_P6
+* https://www.youtube.com/watch?v=LWxu4rkZBLw
+* https://web.stanford.edu/class/ee398a/handouts/lectures/EE398a_MotionEstimation_2012.pdf