[๐บ๐ธ](/README.md "English")
[๐จ๐ณ](/README-cn.md "Simplified Chinese")
[๐ฏ๐ต](/README-ja.md "Japanese")
[๐ฎ๐น](/README-it.md "Italian")
[๐ฐ๐ท](/README-ko.md "Korean")
[๐ท๐บ](/README-ru.md "Russian")
[๐ง๐ท](/README-pt.md "Portuguese")
[๐ช๐ธ](/README-es.md "Spanish")
[](https://img.shields.io/badge/license-BSD--3--Clause-blue.svg)
# Intro
๋น๋์ค ๊ธฐ์ ์ ๋ํ ์น์ ํ ์๊ฐ ์๋ฃ์
๋๋ค. ๋น๋ก ์ํํธ์จ์ด ๊ฐ๋ฐ์/์์ง๋์ด๋ฅผ ๋์์ผ๋ก ์์ฑ ํ์ง๋ง, **๋๊ตฌ๋ ๋ฐฐ์ธ ์ ์๋** ๊ธ์ด ๋์์ผ๋ฉด ํฉ๋๋ค. ์์ด๋์ด๋ [๋น๋์ค ๊ธฐ์ ๋ด๋น๋ฅผ ์ํ ๋ฏธ๋ ์ํฌ์ต](https://docs.google.com/presentation/d/17Z31kEkl_NGJ0M66reqr9_uTG6tI5EDDVXpdPKVuIrs/edit#slide=id.p)์์ ๋น๋กฏ๋์์ต๋๋ค.
๊ฐ๋ฅํ **์ฌ์ด ๋จ์ด, ๋ง์ ์๊ฐ ์๋ฃ ๊ทธ๋ฆฌ๊ณ ์ค์ฉ์ ์ธ ์์ **๋ค๋ก ๋์งํธ ๋น๋์ค์ ์ปจ์
์ ์๊ฐํ๋ฉฐ ์ด๋์๋ ์ฌ์ฉํ ์ ์๋ ์ง์์ด ๋ ์ ์๋ ๊ฒ์ด ๋ชฉํ์
๋๋ค. ์ธ์ ๋ ์์ ์ฌํญ, ์ ์ ๋ฑ์ ๋ณด๋ด์
์ ๊ฐ์ ํด์ฃผ์ธ์.
**์ค์ต** ์น์
์์๋ **๋์ปค**๊ฐ ํ์ํ๋ฉฐ ์ด ๋ ํฌ์งํ ๋ฆฌ๋ฅผ ํด๋ก ํ์
์ผ ํฉ๋๋ค.
```bash
git clone https://github.com/leandromoreira/digital_video_introduction.git
cd digital_video_introduction
./setup.sh
```
> **์๋ฆผ**: `./s/ffmpeg`๋ `./s/mediainfo` ๋ช
๋ น์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ,ํ์๋ก ํ๋ ๋ชจ๋ ์๊ตฌ์ฌํญ์ด ํฌํจ๋ **๋์ปค ์ฑ**์ ์คํํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
**๋ชจ๋ ์ค์ต ๋ด์ฉ์ ์ฌ๋ฌ๋ถ์ด ํด๋ก ํ ๋ ํฌ์งํ ๋ฆฌ ํด๋์์ ์คํ๋์ด์ผ ํฉ๋๋ค**.
**์ฃผํผํฐ ์์ **์ ๊ฒฝ์ฐ, `./s/start_jupyter.sh`๋ก ์๋ฒ๋ฅผ ๋ฐ๋์ ์คํํด์ผํ๋ฉฐ URL์ ๋ณต์ฌํด ๋ธ๋ผ์ฐ์ ์์ ์ฌ์ฉํ์๋ฉด ๋ฉ๋๋ค.
# ๋ณ๊ฒฝ๋ก๊ทธ
* DRM ์์คํ
์ด ์ถ๊ฐ๋์์ต๋๋ค.
* 1.0.0 ๋ฒ์ ์ด ๋ฆด๋ฆฌ์ฆ ๋์์ต๋๋ค.
* ์์ฝ ๋ฒ์ ์ ์ค๊ตญ์ด ๋ฒ์ญ์ด ์ถ๊ฐ๋์์ต๋๋ค.
# ์์ธ
- [Intro](#intro)
- [๋ณ๊ฒฝ๋ก๊ทธ](#%EB%B3%80%EA%B2%BD%EB%A1%9C%EA%B7%B8)
- [์์ธ](#%EC%83%89%EC%9D%B8)
- [๊ธฐ์ด ์ฉ์ด](#%EA%B8%B0%EC%B4%88-%EC%9A%A9%EC%96%B4)
- [์ค๋ณต ์ ๊ฑฐ](#%EC%A4%91%EB%B3%B5-%EC%A0%9C%EA%B1%B0)
- [์์, ํ๋, ์๊ฐ](#%EC%83%89%EC%83%81-%ED%9C%98%EB%8F%84-%EC%8B%9C%EA%B0%81)
- [์์ ๋ชจ๋ธ](#%EC%83%89%EC%83%81-%EB%AA%A8%EB%8D%B8)
- [YCbCr <-> RGB ๋ณํ](#ycbcr---rgb-%EB%B3%80%ED%99%98)
- [ํฌ๋ก๋ง ์๋ธ์ํ๋ง](#%ED%81%AC%EB%A1%9C%EB%A7%88-%EC%84%9C%EB%B8%8C%EC%83%98%ED%94%8C%EB%A7%81)
- [ํ๋ ์ ์ ํ](#%ED%94%84%EB%A0%88%EC%9E%84-%EC%9C%A0%ED%98%95)
- [I Frame (์ธํธ๋ผ, ํคํ๋ ์)](#i-frame-%EC%9D%B8%ED%8A%B8%EB%9D%BC-%ED%82%A4%ED%94%84%EB%A0%88%EC%9E%84)
- [P Frame (predicted)](#p-frame-predicted)
- [B Frame (bi-predictive)](#b-frame-bi-predictive)
- [์์ฝ](#%EC%9A%94%EC%95%BD)
- [์๊ฐ์ ์ค๋ณต (์ธํฐ ํ๋ฆฌ๋์
)](#%EC%8B%9C%EA%B0%84%EC%A0%81-%EC%A4%91%EB%B3%B5-%EC%9D%B8%ED%84%B0-%ED%94%84%EB%A6%AC%EB%94%95%EC%85%98)
- [๊ณต๊ฐ์ ์ค๋ณต (์ธํธ๋ผ ํ๋ฆฌ๋์
)](#%EA%B3%B5%EA%B0%84%EC%A0%81-%EC%A4%91%EB%B3%B5-%EC%9D%B8%ED%8A%B8%EB%9D%BC-%ED%94%84%EB%A6%AC%EB%94%95%EC%85%98)
- [์ฝ๋ฑ์ ์ด๋ป๊ฒ ๋์ํ ๊น์?](#%EC%BD%94%EB%8D%B1%EC%9D%80-%EC%96%B4%EB%96%BB%EA%B2%8C-%EB%8F%99%EC%9E%91%ED%95%A0%EA%B9%8C%EC%9A%94)
- [๋ฌด์์? ์? ์ด๋ป๊ฒ?](#%EB%AC%B4%EC%97%87%EC%9D%84-%EC%99%9C-%EC%96%B4%EB%96%BB%EA%B2%8C)
- [์ญ์ฌ](#%EC%97%AD%EC%82%AC)
- [์ผ๋ฐ ์ฝ๋ฑ](#%EC%9D%BC%EB%B0%98-%EC%BD%94%EB%8D%B1)
- [์ฒซ ๋ฒ์งธ ์คํ
- ์ฌ์ง ํํฐ์
๋](#%EC%B2%AB-%EB%B2%88%EC%A7%B8-%EC%8A%A4%ED%85%9D---%EC%82%AC%EC%A7%84-%ED%8C%8C%ED%8B%B0%EC%85%94%EB%8B%9D)
- [๋ ๋ฒ์งธ ์คํ
- ํ๋ฆฌ๋์
](#%EB%91%90-%EB%B2%88%EC%A7%B8-%EC%8A%A4%ED%85%9D---%ED%94%84%EB%A6%AC%EB%94%95%EC%85%98)
- [์ธ ๋ฒ์งธ ์คํญ - ๋ณํ](#%EC%84%B8-%EB%B2%88%EC%A7%B8-%EC%8A%A4%ED%83%AD---%EB%B3%80%ED%99%98)
- [๋ค ๋ฒ์งธ ๋จ๊ณ - ์์ํ](#%EB%84%A4-%EB%B2%88%EC%A7%B8-%EB%8B%A8%EA%B3%84---%EC%96%91%EC%9E%90%ED%99%94)
- [๋ค์ฏ๋ฒ์งธ ๋จ๊ณ - ์ํธ๋กํผ ์ธ์ฝ๋ฉ](#%EB%8B%A4%EC%84%AF%EB%B2%88%EC%A7%B8-%EB%8B%A8%EA%B3%84---%EC%97%94%ED%8A%B8%EB%A1%9C%ED%94%BC-%EC%9D%B8%EC%BD%94%EB%94%A9)
- [VLC coding:](#vlc-coding)
- [์ฐ์ ์ ์ฝ๋ฉ:](#%EC%82%B0%EC%88%A0%EC%A0%81-%EC%BD%94%EB%94%A9)
- [์ฌ์ฏ๋ฒ์งธ ๋จ๊ณ - ๋นํธ ์คํธ๋ฆผ ํฌ๋งท](#%EC%97%AC%EC%84%AF%EB%B2%88%EC%A7%B8-%EB%8B%A8%EA%B3%84---%EB%B9%84%ED%8A%B8-%EC%8A%A4%ED%8A%B8%EB%A6%BC-%ED%8F%AC%EB%A7%B7)
- [H.264 ๋นํธ์คํธ๋ฆผ](#h264-%EB%B9%84%ED%8A%B8%EC%8A%A4%ED%8A%B8%EB%A6%BC)
- [๋ฆฌ๋ทฐ](#%EB%A6%AC%EB%B7%B0)
- [์ด๋ป๊ฒ H.265๋ H.264๋ณด๋ค ๋ ๋์ ์์ถ๋ฅ ์ ๋ฌ์ฑํ๋๊ฐ](#%EC%96%B4%EB%96%BB%EA%B2%8C-h265%EB%8A%94-h264%EB%B3%B4%EB%8B%A4-%EB%8D%94-%EB%86%92%EC%9D%80-%EC%95%95%EC%B6%95%EB%A5%A0%EC%9D%84-%EB%8B%AC%EC%84%B1%ED%96%88%EB%8A%94%EA%B0%80)
- [์จ๋ผ์ธ ์คํธ๋ฆฌ๋ฐ](#%EC%98%A8%EB%9D%BC%EC%9D%B8-%EC%8A%A4%ED%8A%B8%EB%A6%AC%EB%B0%8D)
- [์ผ๋ฐ์ ์ธ ์ํคํ
์ณ](#%EC%9D%BC%EB%B0%98%EC%A0%81%EC%9D%B8-%EC%95%84%ED%82%A4%ED%85%8D%EC%B3%90)
- [์ ์ง์ ๋ค์ด๋ก๋์ ์ ์ํ ์คํธ๋ฆฌ๋ฐ](#%EC%A0%90%EC%A7%84%EC%A0%81-%EB%8B%A4%EC%9A%B4%EB%A1%9C%EB%93%9C%EC%99%80-%EC%A0%81%EC%9D%91%ED%98%95-%EC%8A%A4%ED%8A%B8%EB%A6%AC%EB%B0%8D)
- [์ปจํ
์ธ ๋ณดํธ](#%EC%BB%A8%ED%85%90%EC%B8%A0-%EB%B3%B4%ED%98%B8)
- [DRM](#drm)
- [Main systems](#main-systems)
- [๋ฌด์์ธ๊ฐ?](#%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80)
- [์?](#%EC%99%9C)
- [์ด๋ป๊ฒ?](#%EC%96%B4%EB%96%BB%EA%B2%8C)
- [How to use jupyter](#how-to-use-jupyter)
- [Conferences](#conferences)
- [References](#references)
# ๊ธฐ์ด ์ฉ์ด
**์ด๋ฏธ์ง**๋ 2์ฐจ์ ๋งคํธ๋ฆญ์ค๋ก ์๊ฐํ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์ **์์**์ ๊ณ ๋ คํ๋ค๋ฉด, **์์ ๋ฐ์ดํฐ** ์ ๊ณต์ ์ฌ์ฉ๋๋ **์ถ๊ฐ์ ์ธ ์ฐจ์**์ด ์๋ **3์ฐจ์ ๋งคํธ๋ฆญ์ค**๋ก ์ฌ๊ธธ ์ ์์ต๋๋ค.
[์ผ์์(๋นจ๊ฐ์, ์ด๋ก์, ํ๋์)](https://en.wikipedia.org/wiki/Primary_color)์ ์ฌ์ฉํด ์์๋ค์ ํํํ๋ ๊ฒฝ์ฐ, **๋นจ๊ฐ์**, **์ด๋ก์**, **ํ๋์** ์์ ์ธ ๊ฐ์ง ํ๋ฉด์ ์ ์ํ ์ ์์ต๋๋ค.

์ด ๋งคํธ๋ฆญ์ค์ ๊ฐ๊ฐ์ ์ ์ **ํฝ์
**(ํ์)๋ผ ๋ถ๋ฅผ ๊ฒ์
๋๋ค. ํ๋์ ํฝ์
์ ์ฃผ์ด์ง ์์์ **๊ฐ๋**(๋ณดํต ์ซ์ ๊ฐ)๋ฅผ ํํํฉ๋๋ค. ์๋ฅผ๋ค์ด, **๋นจ๊ฐ ํฝ์
**์ ์ด๋ก์์ด 0, ํ๋์์ด 0์ด๊ณ ๋นจ๊ฐ์์ด ์ต๋์ธ ๊ฒ์ ์๋ฏธํ์ง์. **ํํฌ ์์ ํฝ์
**์ ์ธ ๊ฐ์ง ์์์ ์กฐํฉ์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค. ๋ํ์ ์ธ 0๋ถํฐ 255๊น์ง์ ์ซ์ ๋ฒ์๋ฅผ ์ฌ์ฉํ๋ฉด ํํฌ์ ํฝ์
์ **๋นจ๊ฐ์=255, ์ด๋ก์=192, ํ๋์=203**์ผ๋ก ์ ์๋ฉ๋๋ค.
> #### ์์ ์ด๋ฏธ์ง๋ฅผ ์ธ์ฝ๋ฉํ๋ ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ
> ์ด๋ฏธ์ง๋ฅผ ๊ตฌ์ฑํ๋ ์์๋ค์ ํํํ๋๋ฐ์๋ ๋ค์ํ ๋ชจ๋ธ๋ค์ด ์กด์ฌํฉ๋๋ค. ์๋ฅผ๋ค๋ฉด RGB ๋ชจ๋ธ์ ์ฌ์ฉํ ๋ 3๋ฐ์ดํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ๋์ , ๊ฐ ํฝ์
์ ํํํ๋๋ฐ ํ ๋ฐ์ดํธ๋ง ํ์ํ ์ธ๋ฑ์ค ํ๋ ํธ๋ฅผ ์ฌ์ฉํ ์ ์์ง์. ์ด๋ฌํ ๋ชจ๋ธ์์๋ 3์ฐจ์ ๋งคํธ๋ฆญ์ค ๋์ 2์ฐจ์ ๋งคํธ๋ฆญ์ค๋ฅผ ์ฌ์ฉํ์ฌ ์์์ ํํํ ์ ์์ผ๋ฉฐ, ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋ ์ ์์ง๋ง ์์์ ๋ํ ๋ช ๊ฐ์ง ์ต์
๋ค์ ํฌ๊ธฐํด์ผํ์ฃ .
>
> 
์๋ฅผ๋ค์ด ์๋์ ์ฌ์ง์ ํ ๋ฒ ๋ณด์ธ์. ์ฒซ ๋ฒ์งธ ์ผ๊ตด์ ๋ชจ๋ ์์์ด ํํ๋์ด์์ง์. ๋ค๋ฅธ ๊ฒ๋ค์ ๋นจ๊ฐ์, ์ด๋ก์, ํ๋์ ํ๋ฉด์
๋๋ค. (ํ์ ํค์ผ๋ก ๋์ด)

์ฌ๊ธฐ์ **๋นจ๊ฐ์**(๋ ๋ฒ์งธ ์ผ๊ตด์ ๋ฐ์ ๋ถ๋ถ๋ค)์ด ์์์ ๋ง์ด ๋ํ๋๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. ๋ฐ๋ฉด **ํ๋์**(๋ง์ง๋ง ์ผ๊ตด)์ ๋๋ถ๋ถ **๋ง๋ฆฌ์ค์ ๋**๊ณผ ์ท์ ์ผ๋ถ์๋ง ๋ํ๋ฉ๋๋ค. **๋ชจ๋ ์์**์ ์ํฅ๋ ฅ์ด ๋ฎ์ ๋ถ๋ถ์ **๋ง๋ฆฌ์ค์ ์์ผ**(๊ฐ์ฅ ์ด๋์ด ๋ถ๋ถ)์
๋๋ค.
๊ฐ๊ฐ์ ์์ ๊ฐ๋๋ ํน์ ํ ์์ ๋นํธ๋ฅผ ํ์๋ก ํฉ๋๋ค. ์ฌ๊ธฐ์ ์์ด๋ **๋นํธ ๊น์ด** ์
๋๋ค. ๊ฐ ์์ ํ๋ฉด๋น 8๋นํธ(0๋ถํฐ 255 ์ฌ์ด์ ๊ฐ์ ๊ฐ์ง๋)๋ฅผ ํ ์ ํ๋ค๊ณ ๊ฐ์ ํ๋ฉด **24๋นํธ**์ **์ ๊น์ด**(8 ๋นํธ * R/G/B์ 3๊ฐ์ง ํ๋ฉด)๋ฅผ ๊ฐ์ง๊ฒ ๋๋ฉฐ, 2์ 24์น ๊ฐ์ง์ ์๋ก ๋ค๋ฅธ ์์์ ์ฌ์ฉํ ์ ์์์ ์๋ฏธํฉ๋๋ค.
> [์ธ์์์ ๋นํธ๋ก ์ด๋ฏธ์ง๊ฐ ์บก์ณ๋๋ ์๋ฆฌ](http://www.cambridgeincolour.com/tutorials/camera-sensors.htm)์ ๋ํด ๋ฐฐ์ธ ์ ์๋ **ํ๋ฅญํ ๊ธ** ์
๋๋ค.
์ด๋ฏธ์ง์ ๋ ๋ค๋ฅธ ์์ฑ์ **ํด์๋**์
๋๋ค. ํด์๋๋ ์ฐจ์ ํ๋์ ํฌํจ๋ ์ ์๋ ํฝ์
์ ์๋ฅผ ์๋ฏธํฉ๋๋ค. ์ด๋ ๋ณดํต width x height๋ก ํํ๋ฉ๋๋ค. ๊ทธ ์๋ก ์๋์๋ **4x4** ์ด๋ฏธ์ง๊ฐ ์์ต๋๋ค.

> #### ์ค์ต: ์ด๋ฏธ์ง์ ์์ ๊ฐ์ง๊ณ ๋๊ธฐ
> [์ฃผํผํฐ](#how-to-use-jupyter)๋ฅผ ์ฌ์ฉํ์ฌ [์ด๋ฏธ์ง์ ์ ๊ฐ์ง๊ณ ๋๊ธฐ](/image_as_3d_array.ipynb)๋ฅผ ํด๋ณผ ์ ์์ด์.
>
>
> [์ด๋ฏธ์ง ํํฐ(์ธ๊ณฝ์ ๊ฒ์ถ, ๊ฐ์กฐ, ๋ธ๋ฌ)](/filters_are_easy.ipynb)์ ๋ํด ํ์ตํ ์ ์์ต๋๋ค.
์ด๋ฏธ์ง๋ ๋น๋์ค๋ฅผ ๋ค๋ฃจ๋ค๋ณด๋ฉด ๋ณผ ์ ์๋ ๋ ๋ค๋ฅธ ์์ฑ์ธ **์ข
ํก๋น(aspect ratio)** ๊ฐ ์์ต๋๋ค. ์ด๋ ์ด๋ฏธ์ง๋ ํฝ์
์ ํญ๊ณผ ๋์ด์ ๋น๋ก ๊ด๊ณ๋ฅผ ๊ฐ๋จํ๊ฒ ํํํ๋ ๋ฐฉ๋ฒ์
๋๋ค.
์ฌ๋๋ค์ด ์ด ์์ ํน์ ์ฌ์ง์ **16x9**์ผ๋ผ๊ณ ํ๋ค๋ฉด ์ด๋ ์ผ๋ฐ์ ์ผ๋ก **ํ๋ฉด ์ข
ํก๋น(DAR)** ์ ๋ํ ์ด์ผ๊ธฐ๋ฅผ ํ๋ ๊ฒ์
๋๋ค. ๋ฐ๋ฉด์ ๊ฐ๊ฐ์ ํฝ์
์ ์๋ก ๋ค๋ฅธ ํํ์ ๋ํ ๊ฒ์ **ํฝ์
์ข
ํก๋น(PAR)** ๋ผ๊ณ ๋ถ๋ฆ
๋๋ค.


> #### DVD๋ DAR 4:3์ด๋ค.
> DVD์ ์ค์ ํด์๋๋ 704x480์ด์ง๋ง 10:11(704x10/480x11)์ PAR๋ก ์ธํด 4:3์ ์ข
ํก๋น๋ฅผ ์ ์งํฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก **๋น๋์ค**๋ ๋๋ค๋ฅธ ์ฐจ์์ผ๋ก ๋ณผ ์ ์๋ ์๊ฐ์ ์ถ์ ๋์ด๋ **n๊ฐ์ ํ๋ ์์ ์ฐ์**์ผ๋ก ์ ์ํ ์ ์์ต๋๋ค.
์ฌ๊ธฐ์ n์ ํ๋ ์๋ ์ดํธ ํน์ ์ด๋น ํ๋ ์ ์ ์
๋๋ค.

๋น๋์ค์ **๋นํธ ๋ ์ดํธ**๋ ๋์์์ ํ์ํ๋๋ฐ ์ด๋น ํ์ํ ๋นํธ์ ์์
๋๋ค.
> ๋นํธ๋ ์ดํธ = ํญ * ๋์ด * ๋นํธ ๊น์ด * ์ด๋น ํ๋ ์ ์
์๋ฅผ๋ค์ด ์ด๋ค ์์์ด 30fps, 24๋นํธ ํฝ์
๊น์ด, 480x240์ ํด์๋์ ์์ถ์ ํ์ง ์์ ๊ฒฝ์ฐ๋ผ๋ฉด **์ด๋น 82,944,000๋นํธ** ํน์ 82.944 Mbps (30x480x240x24)๊ฐ ํ์๋ก ํฉ๋๋ค.
**๋นํธ ๋ ์ดํธ**๊ฐ ๊ฑฐ์ ์ผ์ ํ ๊ฒฝ์ฐ ์ด๋ฅผ ๊ณ ์ ๋นํธ๋ ์ดํธ(**CBR**)๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ ๊ฐ๋ณ์ ๊ฒฝ์ฐ์๋ ๊ฐ๋ณ ๋นํธ๋ ์ดํธ(**VBR**)๋ผ ๋ถ๋ฆ
๋๋ค.
> ์ด ๊ทธ๋ํ๋ ํ๋ ์์ด ๊ฒ์์์ธ ๋์์๋ ๊ทธ๋ฆฌ ๋ง์ ๋นํธ๋ฅผ ์๋นํ์ง ์๋ ์ ํ๋ VBR์ ๋ณด์ฌ์ค๋๋ค.
>
> 
์ด๊ธฐ์๋ ์์ง๋์ด๋ค์ด **์ฌ๋ถ์ ๋์ญํญ ์๋ชจ ์์ด** ๋ ๋ฐฐ์ ์ธ์ง ๊ฐ๋ฅํ ํ๋ ์ ๋ ์ดํธ๋ก ๋น๋์ค๋ฅผ ํ์ํ๋ ๊ธฐ์ ์ ๊ฐ๋ฐํ์ต๋๋ค. ์ด ๊ธฐ์ ์ **์ธํฐ๋ ์ด์ฑ ๋น๋์ค**๋ผ๊ณ ๋ถ๋ฆ
๋๋ค. ์ด๋ 1ํ๋ ์์์ ํ๋ฉด์ ์ ๋ฐ์ ๋ณด๋ด๊ณ ๋๋จธ์ง ์ ๋ฐ์ ๊ทธ ๋ค์ ํ๋ ์์ ๋ณด๋
๋๋ค.
์ค๋๋ ์ ํ๋ฉด์ ๋๋ถ๋ถ **ํ๋ก๊ทธ๋ ์๋ธ ์ค์บ ๊ธฐ์ **์ ์ฌ์ฉํฉ๋๋ค. ํ๋ก๊ทธ๋ ์๋ธ๋ ๊ฐ ํ๋ ์์ ๋ชจ๋ ๋ผ์ธ์ ์์๋๋ก ๊ทธ๋ฆฌ๋ ์์์ ์ถ๋ ฅ, ์ ์ฅ, ์ ์กํ๋ ๊ธฐ์ ์
๋๋ค.

์ด์ ์ด๋ป๊ฒ **์ด๋ฏธ์ง**๊ฐ ๋์งํธ๋ก ํํ๋๋์ง, **์์**์ด ์ด๋ป๊ฒ ๋ฐฐ์น๋์ด ์์ ํํ์ ์ด๋ ์ ๋์ **์ด๋น ๋นํธ ์**๊ฐ ํ์ํ์ง, ๊ทธ๊ฒ ๊ณ ์ (CBR)์ธ์ง ๊ฐ๋ณ(VBR)์ธ์ง์ ๋ํ ๊ฒ๊ณผ **ํด์๋**์ **ํ๋ ์ ๋ ์ดํธ**์ ์ธํฐ๋ ์ด์ค๋, PAR์ ๊ฐ์ ๋ง์ ์ฉ์ด๋ค์ ๋ฐฐ์ ์ต๋๋ค.
> #### ์ฐ์ต: ๋น๋์ค ์์ฑ ํ์ธ
> [ffmpeg์ด๋ mediainfo๋ก ์์ฑ ์ดํด๋ณด๊ธฐ](https://github.com/leandromoreira/introduction_video_technology/blob/master/encoding_pratical_examples.md#inspect-stream)
# ์ค๋ณต ์ ๊ฑฐ
์์ถ ์์ด๋ ๋น๋์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ ๋ฐฐ์ ์ต๋๋ค. 30fps์ธ 720p ํด์๋์ **ํ ์๊ฐ ์ง๋ฆฌ ์์**์ **278GB***๋ฅผ ํ์๋กํฉ๋๋ค. DEFLATE(PKZIP, Gzip, PNG์ ์ฌ์ฉ๋๋)์ ๊ฐ์ **๋ฌด์์ค ๋ฐ์ดํฐ ์์ถ ์๊ณ ๋ฆฌ์ฆ**์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋์ญํญ์ ์ถฉ๋ถํ ์ค์ผ ์ ์์ผ๋ฏ๋ก ๋น๋์ค๋ฅผ ์์ถํ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฐพ์์ผํฉ๋๋ค.
> * 1280 x 720 x 24 x 30 x 3600 (ํญ, ๋์ด, ํฝ์
๋น ๋นํธ ์, fps, ์์ ์๊ฐ)
์ด๋ฅผ ์ํด์๋, **์ฐ๋ฆฌ์ ๋์ ์์ฌ์ผํฉ๋๋ค**. ๋์ ์์๋ณด๋ค ๋ช
์ ๊ตฌ๋ถ์ ๋ ์ํฉ๋๋ค. ์์์ ๋ณํ๊ฐ ๊ฑฐ์ ์๋ ๋ง์ ์ด๋ฏธ์ง๋ค๋ก ์ด๋ฃจ์ด์ ธ์์ผ๋ฉฐ, ๊ฐ ํ๋ ์๋ค์ ๊ฐ๊ฑฐ๋ ์ ์ฌํ ์์์ ์ฌ์ฉํ๋ ๋ง์ ์์ญ๋ค์ด ํฌํจ๋์ด ์์ต๋๋ค.
## ์์, ํ๋, ์๊ฐ
์๊ฐ์ [์์๋ณด๋ค ๋ช
์์ ๋ ๋ฏผ๊ฐํ๋ฉฐ](http://vanseodesign.com/web-design/color-luminance/), ์ด๋ฅผ ํ
์คํธ ํด๋ณผ ์ ์์ต๋๋ค. ์ด ์ฌ์ง์ ๋ณด์ธ์.

๋ง์ผ ์ผ์ชฝ์ ์ด๋ฏธ์ง์์ ์ฌ๊ฐํ **A์ B๊ฐ ๋์ผํ ์์**์ด๋ผ๋ ์ฌ์ค์ ๋์น์ฑ์ง ๋ชปํ์
จ๋ค๋ฉด ์ ์์
๋๋ค. ์ฐ๋ฆฌ์ ๋๋ **์์๋ณด๋ค๋ ๋ช
์์ ๋ ์ ๊ฒฝ์ฐ๋๋ก** ๋ง๋ค๊ธฐ ๋๋ฌธ์ด์ง์. ์ค๋ฅธ์ชฝ์ ์ฌ์ง์์๋ ๊ฐ์ ์์์ ์ฐ๊ฒฐํด์ฃผ๋ ์ปค๋ฅํฐ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ์ ๋๋ ๋ ์ฌ๊ฐํ์ด ๋์ผํ ์์์ด๋ผ๋ ์ฌ์ค์ ์ฝ๊ฒ ํ์
ํ ์ ์์ต๋๋ค.
> **์๊ฐ์ ์ด๋ป๊ฒ ๋์ํ๋๊ฐ์ ๋ํ ๊ฐ๋จํ ์ค๋ช
**
>
> [๋์ ๋ณต์กํ ์ฅ๊ธฐ์ด๋ฉฐ](http://www.biologymad.com/nervoussystem/eyenotes.htm), ๋ง์ ๊ฒ๋ค๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ ์ฌ๊ธฐ์๋ ๋๋ถ๋ถ์ ์์ถ์ธํฌ์ ๊ฐ์์ธํฌ์ ์ง์คํฉ๋๋ค. ๋์ [์ฝ 1์ต 2์ฒ๊ฐ์ ๊ฐ์์ธํฌ์ 6๋ฐฑ๋ง๊ฐ์ ์์ถ์ธํฌ๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค](https://en.wikipedia.org/wiki/Photoreceptor_cell).
> **๋ ๊ฐ๋จํ๊ฒ ์ค๋ช
ํ๊ธฐ ์ํด**, ์์๊ณผ ๋ช
์์ ๋์ ๊ฐ ๊ธฐ๋ฅ๋ค์ ์
๋ ฅํ๋ค๊ณ ๊ฐ์ ํด๋ด
์๋ค.
> **[๊ฐ์์ธํฌ](https://en.wikipedia.org/wiki/Rod_cell) ๋ ๋๋ถ๋ถ ๋น์ ๋ฐ์ํ๋ ๋ฐ๋ฉด์**, **[์์ถ์ธํฌ](https://en.wikipedia.org/wiki/Cone_cell)๋ ์์์ ๋ฐ์ํฉ๋๋ค**. ์๋ก ๋ค๋ฅธ ์์๋ฅผ ์ง๋ ์ธ ๊ฐ์ง ํ์
์ ์์ถ ์ธํฌ๊ฐ ์กด์ฌํฉ๋๋ค: [S-cones (ํ๋์), M-cones (์ด๋ก์) and L-cones (๋นจ๊ฐ์)](https://upload.wikimedia.org/wikipedia/commons/1/1e/Cones_SMJ2_E.svg).
>
> ๊ฐ์ ์ธํฌ(๋ช
์)๊ฐ ์์ถ ์ธํฌ(์์)๋ณด๋ค ๋ง๊ธฐ ๋๋ฌธ์, ์์๋ณด๋ค ๋ช
์์ ๋ ์ ๊ตฌ๋ถํ ๊ฒ์ด๋ผ๋ ์ฌ์ค์ ์ง์ํ ์ ์์ ๊ฒ์
๋๋ค.
>
> 
>
> **๋๋น ์ธ์ ๋ฅ๋ ฅ**
>
> ์คํ ์ฌ๋ฆฌํ ๋ฐ ๋ค๋ฅธ ๋ถ์ผ๋ค์ ์ฐ๊ตฌ์๋ค์ ์ฌ๋์ ์๊ฐ์ ๋ํ ๋ง์ ์ด๋ก ์ ๊ฐ๋ฐํ์ต๋๋ค. ๊ทธ ์ค ํ๋๋ฅผ ๋๋น ์ธ์ ๋ฅ๋ ฅ์ด๋ผ๊ณ ๋ถ๋ฆ
๋๋ค. ์ด๊ฒ๋ค์ ๋น์ ๊ณต๊ฐ๊ณผ ์๊ฐ๊ณผ ๊ด๋ จ ์์ผ๋ฉฐ, ์ฃผ์ด์ง ์ด๊ธฐ์ ๊ด์ธกํ ๋น์ด ๋ํ๋ด๋ ๊ฐ์ด, ๊ด์ธก์๊ฐ ๋ณํ๊ฐ ์๋ค๋ ์ฌ์ค์ ๋งํ๊ธฐ๊น์ง ์ผ๋ง๋ ๋ง์ ๋ณํ๊ฐ ํ์ํ์ง์ ๋ํ ๊ฒ์
๋๋ค. `function`์ด ๋ณต์ํ์ผ๋ก ๋์ด ์๋๋ฐ, ๊ทธ ์ด์ ๋ ๋ฐ๋ก ๋๋น ์ธ์ ๋ฅ๋ ฅ์ ๋ช
์ ๋ฟ๋ง ์๋๋ผ ์์๋ ๊ด๊ณ๋์ด ์๊ธฐ ๋๋ฌธ์
๋๋ค. ์ด ์คํ์ ๊ฒฐ๊ณผ๋ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ์ ์ฐ๋ฆฌ์ ๋์ด ์์๋ณด๋ค ๋ช
์์ ๋ ๋ฏผ๊ฐํ๋ค๋ ์ฌ์ค์ ๋งํด์ค๋๋ค.
์ด์ **๋ฃจ๋ง**(์ด๋ฏธ์ง์ ๋ช
๋)์ ๋ ๋ฏผ๊ฐํ๋ค๋ ์ฌ์ค์ ์๊ฒ๋์์ผ๋ฏ๋ก ์ด๋ฅผ ์ด์ฉํด๋ณผ ์ ์์ต๋๋ค.
### ์์ ๋ชจ๋ธ
์ด๋ฐ์ ๋ฐฐ์ ๋ **RGB ๋ชจ๋ธ**์ ์ด์ฉํ [์ด๋ฏธ์ง์ ์์ ์ง์ ํ๋ ๋ฐฉ๋ฒ](#basic-terminology)์ธ์๋ ๋ค๋ฅธ ๋ชจ๋ธ๋ค๋ ์๋ค๋ ๊ฒ์ ๋ฐฐ์ ์ต๋๋ค. ์ฌ์ค ๋ชจ๋ธ ์ค ํฌ๋ก๋ฏธ๋์ค(์์)๋ก๋ถํฐ ๋ฃจ๋ง(๋ช
๋)๋ฅผ ๋ถ๋ฆฌํ๋ ๋ชจ๋ธ์ด ์์ต๋๋ค. ์ด๋ **YCbCr***์ด๋ผ๊ณ ๋ ์๋ ค์ ธ์์ต๋๋ค.
> * ์ด์ ๊ฐ์ ๋ฐฉ์์ ์ฌ์ฉํ๋ ๋ค๋ฅธ ๋ชจ๋ธ๋ค๋ ์กด์ฌํฉ๋๋ค.
์ด ์์ ๋ชจ๋ธ์ ๋ช
๋๋ฅผ ํํํ๋ **Y**์ ๋ ๊ฐ์ง ์์ ์ฑ๋์ธ **Cb**(ํฌ๋ก๋ง ๋ธ๋ฃจ)์ **Cr**(ํฌ๋ก๋ง ๋ ๋)๋ฅผ ์ฌ์ฉํฉ๋๋ค. [YCbCr](https://en.wikipedia.org/wiki/YCbCr)์ RGB๋ก๋ถํฐ ์ ๋ ๊ฐ๋ฅํ๋ฉฐ, ๋ํ ๋ฐ๋๋ก RGB๋ก ์ญ๋ณํ๋ ๊ฐ๋ฅํฉ๋๋ค. ์ด ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ์๋์ ๋ณด์ด๋ ์ด๋ฏธ์ง์ ๊ฐ์ ์์ ํ ์์์ ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.

### 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)๊ณผ ๊ฐ์ ๊ฒ๋ค์
๋๋ค.
์ผ๋ฐ์ ์ผ๋ก **๋์คํ๋ ์ด**(๋ชจ๋ํฐ, TV, ์คํฌ๋ฆฐ ๋ฑ)๋ **์ค์ง RGB ๋ชจ๋ธ**๋ง ํ์ฉํ๋ฉฐ ์ด๋ฅผ ๊ฐ์ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ๋ฐฐ์ดํฉ๋๋ค. ํ๋๋ ๋ชจ์ต์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:

### ํฌ๋ก๋ง ์๋ธ์ํ๋ง
๋ฃจ๋ง์ ํฌ๋ก๋ง๋ก ํํ๋๋ ์ด๋ฏธ์ง๋ฅผ ์ธ๊ฐ์ ์๊ฐ์ด ํฌ๋ก๋ง๋ณด๋ค ๋ฃจ๋ง ํด์๋์ ๋ฏผ๊ฐํ๋ค๋ ์ฌ์ค์ ์ด์ฉํ์ฌ ์ ํ์ ์ผ๋ก ์ ๋ณด๋ฅผ ์ ๊ฑฐํ๋๋ฐ์ ์์ด ์ด์ ์ ์ทจํ ์ ์์ต๋๋ค. **ํฌ๋ก๋ง ์๋ธ์ํ๋ง**์ **๋ฃจ๋ง ๋๋น ํฌ๋ก๋ง ์ ๋ณด๋ฅผ ์ค์ฌ** ์ด๋ฏธ์ง๋ฅผ ์ธ์ฝ๋ฉํ๋ ๊ธฐ์ ์
๋๋ค.

์ผ๋ง๋งํผ์ ํฌ๋ก๋ง ํด์๋๋ฅผ ์ค์ฌ์ผ ํ๋ ๊ฒ์ผ๊น์?! ์ด๋ฏธ ๋ต์ ๋์ ์์ต๋๋ค. ํด์๋์ ๋ณํฉ(`final color = Y + Cb + Cr`)์ ๋ค๋ฃจ๋ ์คํค๋ง๊ฐ ์ด๋ฏธ ์กด์ฌํฉ๋๋ค.
์ด๋ฌํ ์คํค๋ง๋ ์๋ธ ์ํ๋ง ์์คํ
์ผ๋ก ์๋ ค์ ธ์์ผ๋ฉฐ ๋ฃจ๋ง ํฝ์
์ `a x 2` ๋ธ๋ก์ ๋ํ ํฌ๋ก๋ง ํด์๋๋ฅผ ์ ์ํ๋ 3 ๋ถ๋ถ์ ๋น์จ `a:x:y`๋ก ์ ์๋ฉ๋๋ค.
* `a`๋ ์ํ ์ํ๋ง ๋ ํผ๋ฐ์ค์
๋๋ค. (์ผ๋ฐ์ ์ผ๋ก 4)
* `x`๋ `a` ํฝ์
์ ํ(row)์ ํฌ๋ก๋ง ์ํ ์์
๋๋ค. (`a`์ ๋ํ ์ํํด์๋)
* `y`๋ `a` ํฝ์
์ ์ฒซ ๋ฒ์งธ์ ๋ ๋ฒ์งธ ํ ์ฌ์ด์ ํฌ๋ก๋ง ์ํ์ ๋ณํ์ ๋ํ ๊ฐ์์
๋๋ค.
> ์์ธ์ ์ผ๋ก 4:1:0์ ๊ฐ๊ฐ์ ๋ฃจ๋ง ํด์๋์ `4 x 4`๋ธ๋ก ๋ด์ ๋จ์ผ ํฌ๋ก๋ง ์ํ์ ์ ๊ณตํฉ๋๋ค.
ํ๋ ์ฝ๋ฑ์ ์ฌ์ฉ๋๋ ๋ณดํธ์ ์ธ ๊ธฐ๋ฒ์ **4:4:4(์๋ธ ์ํ๋ง ์์)**, **4:2:2, 4:1:1, 4:2:0, 4:1:0 and 3:1:1**์
๋๋ค.
> **YCbCr 4:2:0 ๋ณํฉ**
>
> ์ฌ๊ธฐ์ YCbCr 4:2:0์ ์ฌ์ฉํ ์ด๋ฏธ์ง์ ๋ณํฉ๋ ์กฐ๊ฐ์
๋๋ค. ํฝ์
๋น 12 ๋นํธ๋ง ์๋ชจํ์ ๋ฟ์ด๋ผ๋ ์ฌ์ค์ ๊ธฐ์ตํ์ธ์.
>
> 
๋์ผํ ์ด๋ฏธ์ง์ ๋ํด ์ฃผ์ํ ํฌ๋ก๋ง ์๋ธ์ํ๋ง ํ์
๋ค๋ก ์ธ์ฝ๋ฉํ ์ด๋ฏธ์ง๋ฅผ ๋ณด์ค ์ ์์๊ฒ๋๋ค. ์ฒซ ๋ฒ์งธ ํ์ ์ด๋ฏธ์ง๋ค์ ์ต์ข
YCbCr ์ด๋ฏธ์ง์ด๋ฉฐ ๋ ๋ฒ์งธ ์ด์ ์ด๋ฏธ์ง๋ค์ ํฌ๋ก๋ง ํด์๋๋ฅผ ๋ํ๋
๋๋ค. ์ ์ ์์ค๋ก ํ๋ฅญํ ๊ฒฐ๊ณผ๋ฅผ ์ป์์ต๋๋ค.

์์ ์ฐ๋ฆฌ๋ [ํ ์๊ฐ ๋ถ๋์ 720p ํด์๋์ 30fps์ธ ์์์ ์ ์ฅํ๊ธฐ ์ํด 278GB๊ฐ ํ์ํ๋ค๊ณ ๊ณ์ฐ](#redundancy-removal)ํ์์ต๋๋ค. **YCbCr 4:2:0**์ ์ฌ์ฉํ๋ฉด ์ด๋ฅผ **์ ๋ฐ(139GB)์ ํฌ๊ธฐ***๋ก ์ค์ผ ์ ์์ต๋๋ค. ํ์ง๋ง ์์ง ๊ทธ๋ฆฌ ์ด์์ ์ด์ง ์๋ค์.
> * ์ด ๊ฐ์ width, height, ํฝ์
๋น ๋นํธ ์ ๊ทธ๋ฆฌ๊ณ fps๋ฅผ ๊ณฑํ์ฌ ์ป์์ต๋๋ค. ์ด์ ์๋ 24๋นํธ๊ฐ ํ์ํ์ง๋ง ์ด์ 12๋นํธ๋ฉด ๋ฉ๋๋ค.
> ### ์ค์ต: YCbCr ํ์คํ ๊ทธ๋จ ํ์ธํ๊ธฐ
> [ffmpeg๋ก YCbCr ํ์คํ ๊ทธ๋จ์ ํ์ธํ ์ ์์ต๋๋ค.](/encoding_pratical_examples.md#generates-yuv-histogram) ์ด ์ฅ๋ฉด์ [ํ์คํ ๊ทธ๋จ](https://en.wikipedia.org/wiki/Histogram)์ ๋ณด์ฌ์ง๋ ๋ฐ์ ๊ฐ์ด ํ๋์ ๋น์จ์ด ๋์ต๋๋ค.
>
> 
## ํ๋ ์ ์ ํ
์ด์ ๊ณ์ํด์ **์๊ฐ ์์์์ ์ค๋ณต ์ ๊ฑฐ**๋ฅผ ํ ์๋ ์์ง๋ง ๊ทธ ์ ์ ๋ช ๊ฐ์ง ๊ธฐ๋ณธ์ ์ธ ์ฉ์ด๋ฅผ ์ ๋ฆฝํด๋ณด๊ฒ ์ต๋๋ค. 30fps์ ์ํ๊ฐ ์๋ค๊ณ ๊ฐ์ ํด๋ด
์๋ค. ์ฌ๊ธฐ์ ์ด ์ํ์ ์ฒซ ๋ฒ์งธ๋ถ๋ถ์ 4์ฅ์ ํ๋ ์์ด ์์ต๋๋ค.
  

**ํ๋์ ๋ฐฐ๊ฒฝ**๊ณผ ๊ฐ์ด ํ๋ ์ ๋ด์ **๋ง์ ์ค๋ณต**์ ๋ณผ ์ ์์๊ฒ๋๋ค. ํ๋ ์ 0๋ถํฐ 3๊น์ง ๋ณํ๊ฒ ์์ง์. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ํ๋ ์์ ์ธ ๊ฐ์ง ์ ํ์ผ๋ก **์ถ์์ ์ผ๋ก ๋ถ๋ฅ**ํ ์ ์์ต๋๋ค.
### I Frame (์ธํธ๋ผ, ํคํ๋ ์)
`I-frame(๋ ํผ๋ฐ์ค, ํคํ๋ ์, ์ธํธ๋ผ)`์ **๋
๋ฆฝ์ ์ธ ํ๋ ์**์
๋๋ค. ๋ ๋๋ง ํ๊ธฐ ์ํด ์ด๋ค ๊ฒ์๋ ์์กด์ ์ด์ง ์์ง์. I-frame์ ๋ง์น ์ ์ ์ธ ์ฌ์ง๊ฐ์ต๋๋ค. ์ฒซ ๋ฒ์งธ ํ๋ ์์ ๋ณดํต I-frame์
๋๋ค. ํ์ง๋ง I-frame์ ์ผ๋ฐ์ ์ผ๋ก ๋ค๋ฅธ ์ ํ์ ํ๋ ์์ ์ฌ์ด์ฌ์ด์ ์ฝ์
๋๋ค๋ ์ฌ์ค์ ๋ณผ ์ ์์ ๊ฒ๋๋ค.

### P Frame (predicted)
`P-frame`์ ํญ์ **์ด์ ์ ํ๋ ์์ ์ด์ฉํ์ฌ ๋ ๋๋ง ๋ ์ ์๋ค๋ ์ **์ ์ด์ ์ผ๋ก ์ทจํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ ๋ฒ์งธ ํ๋ ์์์ ๋ณํ๋ผ๊ณค ๊ณต์ด ์์ผ๋ก ์์ง์ธ ๊ฒ ๋ฟ์
๋๋ค. **๋ณ๊ฒฝ๋ ๋ถ๋ถ์ ์ฌ์ฉํด์ ์ด ์ ์ ํ๋ ์์ ์ฐธ๊ณ ํ์ฌ ํ๋ ์ 1๋ฒ์ ๋ค์ ๋ง๋ค ์ ์์ง์.**
 <- 
> #### ์ค์ต: I-frame์ด ํ์ฅ ๋ฟ์ธ ๋์์
> P-frame์ด ๋ฐ์ดํฐ๋ฅผ ์ ๊ฒ ์ฌ์ฉํ๋๋ฐ ์ ์ ์ฒด๋ฅผ [I-frame ํ์ฅ์ ๋๋จธ์ง ์ ๋ถ๊ฐ p-frame์ธ ์์](/encoding_pratical_examples.md#1-i-frame-and-the-rest-p-frames)์ผ๋ก ์ธ์ฝ๋ฉํ์ง ์์๊น์?
>
> ์ด ๋น๋์ค๋ฅผ ์ธ์ฝ๋ฉ ํ ์์์ ์ฌ์ํด ๋น๋์ค์ **์๋ถ๋ถ์ผ๋ก ์ด๋**ํด๋ณด๋ฉด, ์ด๋ํ๋๋ฐ **์๊ฐ์ด ์ข ๊ฑธ๋ฆผ**์ ๋ฐ๊ฒฌํ๊ฒ ๋ ๊ฒ์
๋๋ค. ์๋ํ๋ฉด **P-frame์ ๋ ๋๋งํ๊ธฐ ์ํด ๋ ํผ๋ฐ์ค ํ๋ ์(๊ฐ๋ น I-frame)์ด ํ์ํ๊ธฐ ๋๋ฌธ**์
๋๋ค.
>
> ๋นจ๋ฆฌ ํ
์คํธ ํด๋ณผ ์ ์๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ I-frame ํ ์ฅ์ผ๋ก ๋น๋์ค๋ฅผ ์ธ์ฝ๋ฉํ ๋ค, [2์ด ๊ฐ๊ฒฉ์ผ๋ก I-frame์ ์ฝ์
ํ์ฌ ์ธ์ฝ๋ฉํ ๋ค](/encoding_pratical_examples.md#1-i-frames-per-second-vs-05-i-frames-per-second) **๊ฐ ๋ ๋์
์ ์ฌ์ด์ฆ๋ฅผ ํ์ธํด๋ณด์ธ์.**
### B Frame (bi-predictive)
์ด์ ๊ณผ ์์ ํ๋ ์์ ์ฐธ์กฐํ์ฌ ๋ ๋์ ์์ถ๋ฅ ์ ์ ๊ณตํ ์ ์๋ค๋ฉด?! ๊ทธ๊ฒ์ด ๋ฐ๋ก B-Frame์ด๋ผ๋ ๊ฒ์
๋๋ค.
 <-  -> 
> #### ์ค์ต: B-frame์ผ๋ก ๋น๋์ค ๋น๊ตํ๊ธฐ
> ๋ ๊ฐ์ ๋ ๋์
์ ์์ฑํด, ์ฒซ ๋ฒ์งธ์๋ B-frame์ ์ฃผ๊ณ ๋ค๋ฅธ ๊ฒ์๋ [B-frame์ ์ฃผ์ง ์๊ณ ](/encoding_pratical_examples.md#no-b-frames-at-all) ํ๋ฆฌํฐ๋ฅผ ๋น๋กฏํ์ฌ ํ์ผ ์ฌ์ด์ฆ๋ ํ์ธ์ ํด๋ณด์ธ์.
### ์์ฝ
์ด๋ฌํ ํ๋ ์๋ค์ **๋ ๋์ ์์ถ ์ฑ๋ฅ์ ์ ๊ณต**ํ๋๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ป๊ฒ ์ด๋ฐ ์ผ์ด ๊ฐ๋ฅํ์ง ๋ค์ ์น์
์์ ์์๋ณผ ๊ฑฐ์์. ํ์ง๋ง ์ฌ๋ฌ๋ถ์ ์ด์ **I-frame์ ์ฝ์คํธ๊ฐ ๋๊ณ P-frame์ ์ข ๋ ๋ฎ๊ณ B-frame์ด ์ ์ผ ๋ฎ๋ค๋ ์ฌ์ค**์ ๋ํด ์๊ฐํ ์ ์๊ฒ ๋์์ต๋๋ค.

## ์๊ฐ์ ์ค๋ณต (์ธํฐ ํ๋ฆฌ๋์
)
๋ฐ๋์ ์ค์ฌ์ผ ํ๋ **์๊ฐ ์์์์ ๋ฐ๋ณต**์ ๋ํด ์์๋ด
์๋ค. ์ด๋ฌํ ์ค๋ณต์ ์ ํ์ **์ธํฐ ํ๋ฆฌ๋์
**์ด๋ผ๋ ๊ธฐ๋ฒ์ ํ์ฉํด ํด๊ฒฐํ ์ ์์ต๋๋ค.
ํ๋ ์ 0๊ณผ 1์ ์ํ์ค๋ฅผ **๋ ์ ์ ๋นํธ๋ฅผ ํ์ฉํด** ์ธ์ฝ๋ฉ ํด๋ณผ ๊ฒ ์
๋๋ค.

์๋ํด ๋ณผ ์ ์๋ ํ ๊ฐ์ง๋ ๋ฐ๋ก ์ ๊ฑฐ์
๋๋ค. ๋จ์ํ **ํ๋ ์ 0์์ ํ๋ ์ 1์ ๋นผ๋ฉด** ์ค๋ก์ง **๋จ์ ๋ถ๋ถ๋ง ์ธ์ฝ๋ฉ**ํ๋ฉด ๋ฉ๋๋ค.

ํ์ง๋ง ์ด๋ณด๋ค ๋ ์ ์ ๋นํธ๋ฅผ ์ฌ์ฉํ๋ **๋ ๋์ ๋ฐฉ๋ฒ**์ด ์๋ค๋ฉด ์ด๋ ์๊ฒ ๋์? ์ฐ์ , `frame 0`์ ์ ์ ์๋ ํํฐ์
์ ์งํฉ์ผ๋ก ์ฌ๊ธฐ๊ณ , `frame 0`์ `frame 1`์ ๋งค์นญ์์ผ๋ณด์ธ์. ์ด๋ฅผ **๋ชจ์
์ถ์ **์ผ๋ก ์๊ฐํ ์ ์์ง์.
> ### ์ํคํ๋์ - ๋ธ๋ก ๋ชจ์
๋ณด์
> "**๋ธ๋ก ๋ชจ์
๋ณด์ **์ ํ์ฌ ํ๋ ์์ ๊ฒน์น์ง ์์ ๋ธ๋ก์ผ๋ก ๋ถํ ํ๊ณ , ๋ชจ์
๋ณด์ ๋ฒกํฐ๊ฐ **๋ธ๋ก์ด ์ด๋์์ ์๋์ง ์๋ ค์ค๋๋ค.** (์ผ๋ฐ์ ์ธ ์ค๊ฐ๋
์ผ๋ก ์ด์ ์ ํ๋ ์์ด ๊ฒน์น์ง ์์ ๋ธ๋ก์ผ๋ก ๋ถํ ๋์ด ์๊ณ , ๋ชจ์
๋ณด์ ๋ฒกํฐ๊ฐ ์ด ๋ธ๋ก๋ค์ด ์ด๋๋ก ์ด๋ํ ์ง ์๋ ค์ฃผ๋ ์ ๋ณด๋ผ๊ณ ์ฌ๊ธฐ๋ ๊ฒ์ด ์์ต๋๋ค.) ์๋ณธ ๋ธ๋ก์ ์ผ๋ฐ์ ์ผ๋ก ์๋ณธ ํ๋ ์์ ๊ฒน์นฉ๋๋ค. ๋ช๋ช์ ๋น๋์ค ์์ถ ์๊ณ ๋ฆฌ์ฆ์ ์๋ก ๋ค๋ฅธ ์ด์ ์ ์ ์ก๋ ํ๋ ์์ ์ผ๋ถ ์กฐ๊ฐ์ ํ์ฌ ํ๋ ์๊ณผ ํฉ์นฉ๋๋ค."

์ฌ๊ธฐ์ `x=0, y=25`์์ `x=7, y=26`์ผ๋ก ๊ณต์ด ์์ง์๋ค๊ณ ์ถ์ ํ ์ ์์ต๋๋ค. **x**์ **y**์ ๊ฐ๋ค์ด **๋ชจ์
๋ฒกํฐ**์
๋๋ค. ๋นํธ๋ฅผ ์ ์ฝํ ์ ์๋ **์ถ๊ฐ์ ์ธ ๋จ๊ณ**๋ก๋ ์ต์ข
๋ธ๋ก์ ์์น์ ์์ธก๋๋ ๋ฒกํฐ์ **๋ชจ์
๋ฒกํฐ์ ์ฐจ์ด๋ง ์ธ์ฝ๋ฉ ํ๋ ๊ฒ**์
๋๋ค. ๋ฐ๋ผ์ ์ต์ข
์ ์ธ ๋ชจ์
๋ฒกํฐ๋ `x=7 (7-0), y=1 (26-25)`๊ฐ ๋ ๊ฒ์
๋๋ค.
> ํ์ค ์ธ๊ณ์์๋ ์ด **๊ณต์ด n๊ฐ์ ํํฐ์
์ผ๋ก ์กฐ๊ฐ**๋์ง๋ง ๊ณผ์ ์ ๋์ผํฉ๋๋ค.
ํ๋ ์ ์์ ๊ฐ์ฒด๋ **3์ฐจ์ ์์ผ๋ก ์์ง์ด๋ฉฐ**, ์ด ๊ณต์ด ๋ฐฐ๊ฒฝ์ผ๋ก ์ด๋ํ๋ ๊ฒฝ์ฐ์ ๋ ์์์ง ์๋ ์์ต๋๋ค. ์ผ์น์ ์ ์ฐพ์ผ๋ ค ํ๋ ๋ธ๋ก๊ณผ **์์ ํ ์ผ์นํ๋ ๊ฒ์ ์ฐพ์ ์ ์๋ ์ผ์** ์ผ๋ฐ์ ์ด์ง์.

๊ทธ๋ผ์๋ **๋ชจ์
์ถ์ **์ ์ ์ฉํ๋ ๊ฒ์ด ๋จ์ํ ๋ธํ ํ๋ ์ ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ ๊ฒ ๋ณด๋ค **์ธ์ฝ๋ฉ ํ ๋ฐ์ดํฐ๊ฐ ๋ ์ ๋ค๋** ์ฌ์ค์
๋๋ค.

> ### ๋ชจ์
๋ณด์ ์ ์ค์ ๋ก ์ด๋ป๊ฒ ๋ณด์ด๋๊ฐ
> ์ด ๊ธฐ๋ฒ์ ๋ชจ๋ ๋ธ๋ก์ ๋ํด ์ ์ฉ๋๋ฉฐ, ๊ณต์ด ๋งค์ฐ ๋น๋ฒํ๊ฒ ํ๋ ์ด์์ ๋ธ๋ก์์ ๋ถํ ๋ฉ๋๋ค.
> 
> Source: https://web.stanford.edu/class/ee398a/handouts/lectures/EE398a_MotionEstimation_2012.pdf
[์ฃผํผํฐ๋ฅผ ํ์ฉํ์ฌ ์ด๋ฌํ ๊ธฐ๋ฒ๋ค์ ์คํํด๋ณผ ์ ์์ต๋๋ค](/frame_difference_vs_motion_estimation_plus_residual.ipynb).
> #### Hands-on: See the motion vectors
> We can [generate a video with the inter prediction (motion vectors) with ffmpeg.](/encoding_pratical_examples.md#generate-debug-video)
>
>  with ffmpeg")
>
> Or we can use the [Intel Video Pro Analyzer](https://software.intel.com/en-us/intel-video-pro-analyzer) (which is paid but there is a free trial version which limits you to only the first 10 frames).
>
> 
## ๊ณต๊ฐ์ ์ค๋ณต (์ธํธ๋ผ ํ๋ฆฌ๋์
)
์์์ **๊ฐ๊ฐ์ ํ๋ ์์** ๋ถ์ํด๋ณด๋ฉด **๋ง์ ์์ญ์ด ์ฐ๊ด๋์ด ์๋ค๋ ์ฌ์ค**์ ๋ฐ๊ฒฌํ ์ ์์๊ฒ๋๋ค.

์์ ๋ฅผ ์ดํด๋ณด์ฃ . ์ด ์ฅ๋ฉด์ ๋๋ถ๋ถ ํ๋์๊ณผ ํ์์์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.

์ด๋ `I-frame`์ด๋ฉฐ **์ด์ ์ ํ๋ ์์ ์ฌ์ฉํ์ฌ** ์์ธกํ ์๋ ์์ง๋ง, ์ฌ์ ํ ์์ถํ ์ฌ์ง๋ ๋จ์ ์์ง์. **๋นจ๊ฐ ๋ธ๋ก ๋ถ๋ถ์** ์ธ์ฝ๋ฉํด๋ณผ๊ฑฐ์์. **์ธ์ ํ ๋ถ๋ถ์ ์ดํด๋ณด๋ฉด**, **๋ธ๋ก ์ฃผ๋ณ์ ์์์ ๊ฒฝํฅ์ ์ถ์ฐ**ํ ์ ์์ต๋๋ค.

ํ๋ ์์ด ๊ณ์ํ์ฌ **์์ง์ผ๋ก ์์์ด ํ์ฐ๋ ๊ฒ**์ด๋ผ๊ณ ์์ธกํ ๊ฒ์
๋๋ค. ์ด ์๋ฏธ๋ **๋ธ๋ก์ ์ธ์ ํ ๊ฐ์ ์ ์ ์๋ ํฝ์
์** ์์์ด ์ง๋๊ณ ์๋ค๋ ๊ฒ์ด์ง์.

**์์ธก์ด ํ๋ ธ์ ์๋ ์์ต๋๋ค.** ๊ทธ ์ด์ ๋ ๋ฐ๋ก ์ด ๊ธฐ๋ฒ(**์ธํธ๋ผ ํ๋ฆฌ๋์
**)์ ์ ์ฉํ ๋ค ์์ฌ ๋ธ๋ก์ ๋ฐํํ๋ **์ค์ ๊ฐ์ ๋นผ์ผํ ** ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์, ์๋ณธ๊ณผ ๋น๊ตํ์ ๋ ํจ์ฌ ๋ ์์ถ๋ฅ ์ด ๋์ ํ๋ ฌ์ด ์์ฑ๋ฉ๋๋ค.

> #### ์ค์ต: ์ธํธ๋ผ ํ๋ฆฌ๋์
ํ์ธํด๋ณด๊ธฐ
> [๋งคํฌ๋ก ๋ธ๋ก๊ณผ ํ๋ฆฌ๋์
์ ์ฌ์ฉํด ffmpeg๋ก ์์์ ์์ฑํ ์ ์์ต๋๋ค.](/encoding_pratical_examples.md#generate-debug-video) [๊ฐ ๋ธ๋ก์ ์์์ ์๋ฏธ](https://trac.ffmpeg.org/wiki/Debug/MacroblocksAndMotionVectors?version=7#AnalyzingMacroblockTypes)๋ฅผ ffmpeg ๋ฌธ์๋ฅผ ํ์ธํด ์ดํดํด๋ณด์ธ์.
>
>  with ffmpeg")
>
> ํน์ [Intel Video Pro Analyzer](https://software.intel.com/en-us/intel-video-pro-analyzer)(์ ๋ฃ์ง๋ง ์ฒ์ 10 ํ๋ ์ ์ ํ์ด ๊ฑธ๋ ค ์๋ ๋ฌด๋ฃ ํธ๋ผ์ด์ผ ๋ฒ์ ๋ ์์ต๋๋ค)๋ฅผ ์ฌ์ฉํด๋ณด์ธ์.
>
> 
# ์ฝ๋ฑ์ ์ด๋ป๊ฒ ๋์ํ ๊น์?
## ๋ฌด์์? ์? ์ด๋ป๊ฒ?
**๋ฌด์์?** ์ฝ๋ฑ์ ๋์งํธ ๋น๋์ค๋ฅผ ์์ถ ํน์ ํด์ ํ๋ ์ํํธ์จ์ด/ํ๋์จ์ด ์
๋๋ค. **์?** ์์ฅ๊ณผ ์ฌํ๋ ์ ํ์ ์ธ ๋์ญํญ๊ณผ ์คํ ๋ฆฌ์ง๋ฅผ ํ์ฉํ ๋์ ํ๋ฆฌํฐ์ ์์์ ํ์๋ก ํฉ๋๋ค. 30fps, ํฝ์
๋น 24๋นํธ, 480x240 ํด์๋์ ๋น๋์ค์ [ํ์ํ ๋์ญํญ ๊ณ์ฐ](#%EA%B8%B0%EC%B4%88-%EC%9A%A9%EC%96%B4)์ ๋ ์ฌ๋ ค๋ณด์ธ์. ์์ถ์ ํ์ง ์์ ๊ฒฝ์ฐ **82.944 Mbps**์์ง์. TV์ ์ธํฐ๋ท์์ HD/FullHD/4K๋ฅผ ์ ์กํ ์ ์ผํ ๋ฐฉ๋ฒ์
๋๋ค. **์ด๋ป๊ฒ?** ์ฌ๊ธฐ์๋ ์ฃผ์ ๊ธฐ๋ฒ๋ค์ ๋ํด ๊ฐ๋ตํ ์ดํด๋ณผ ๊ฒ์
๋๋ค.
> **์ฝ๋ฑ vs ์ปจํ
์ด๋**
>
> ์ด์ฌ์๋ค์ด ํํ ๋ฒํ๋ ์ค์ ์ค ํ๋๋ก ๋์งํธ ๋์์ ์ฝ๋ฑ๊ณผ [๋์งํธ ๋น๋์ค ์ปจํ
์ด๋](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๋
)์ ํ์ํ์์ผ๋ฉฐ **64 kibt/s์ ๋ฐ์ดํฐ ์ ์ก๋น**๋ก ๋์ํ๊ธฐ ์ํด ์ค๊ณ๋์์ต๋๋ค. ์ด ์ฝ๋ฑ์์ ์ด๋ฏธ ํฌ๋ก๋ง ์๋ธ์ํ๋ง, ๋งคํฌ๋ก ๋ธ๋ก ๋ฑ์ ์์ด๋์ด๋ฅผ ์ฌ์ฉํ์ต๋๋ค. 1995๋
, **H.263** ๋น๋์ค ์ฝ๋ฑ ํ์ค์ด ํ์ํ์์ผ๋ฉฐ 2001๋
๊น์ง ์ง์์ ์ผ๋ก ํ์ฅ๋์์ต๋๋ค.
**H.264/AVC**์ ์ฒซ ๋ฒ์ ์ 2003๋
์ ์์ฑ๋์์ต๋๋ค. ๊ฐ์ ํด์, **TrueMotion**์ด๋ผ๋ ํ์ฌ๊ฐ **๋ก์ํฐ๊ฐ ์๋** **VP3**์ด๋ผ ๋ถ๋ฅด๋ ์์ ์์ถ ์ฝ๋ฑ์ ๊ณต๊ฐํ์์ต๋๋ค. 2008๋
, **๊ตฌ๊ธ์ด ์ด ํ์ฌ๋ฅผ ์ธ์ํ๊ณ ** ๊ฐ์ ํด์ **VP8**์ ๊ณต๊ฐํ์์ต๋๋ค. 2012๋
12์, ๊ตฌ๊ธ์ **VP9**์ ์ถ์ํ์์ผ๋ฉฐ VP9์ **๋ธ๋ผ์ฐ์ ์์ฅ์ ์ฝ ยพ(๋ชจ๋ฐ์ผ ํฌํจ)์์ ์ง์๋ฉ๋๋ค.**
**[AV1](https://en.wikipedia.org/wiki/AOMedia_Video_1)** ์ **๊ตฌ๊ธ, ๋ชจ์ง๋ผ, ๋ง์ดํฌ๋ก์ํํธ, ์๋ง์กด, ๋ทํ๋ฆญ์ค, AMD, ARM, ์๋น๋์, ์ธํ
๊ทธ๋ฆฌ๊ณ ์์ค์ฝ**๋ฅผ ๋น๋กฏํ ์ฌ๋ฌ ํ์ฌ๋ก ๊ตฌ์ฑ๋ [์คํ ๋ฏธ๋์ด ์ฐํฉ (AOMedia)](http://aomedia.org/)์ด ์ค๊ณ๋ฅผ ์ฃผ๋ํ๋ **๋ก์ํฐ ์๋** ์๋ก์ด ์คํ ์์ค ๋์์ ์ฝ๋ฑ์
๋๋ค.

> #### AV1์ ํ์
>
> 2015๋
์ด, ๊ตฌ๊ธ์ [VP10](https://en.wikipedia.org/wiki/VP9#Successor:_from_VP10_to_AV1)๋ฅผ, Xiph(๋ชจ์ง๋ผ)๋ [Daala](https://xiph.org/daala/) ๊ทธ๋ฆฌ๊ณ ์์ค์ฝ๋ [Thor](https://tools.ietf.org/html/draft-fuldseth-netvc-thor-03)๋ผ๋ ๋ก์ํฐ ํ๋ฆฌ ๋น๋์ค ์ฝ๋ฑ์ ๋ง๋ค์์ต๋๋ค.
>
> MPEG LA๋ HEVC(H.265)์ ๋ํ ์ ๋ด์ผ ์บก์ ๋ฐํํ๊ณ , H.264๋ณด๋ค 8๋ฐฐ ๋์ ์์๋ฃ๋ฅผ ๋ฐํํ์ผ๋ ํ์ธ์ ํ์ ํ๊ณ ๊ท์น์ ๋ณ๊ฒฝํ์ต๋๋ค:
> * **์ ๋ด์ผ ์บก ์์**,
> * **์ปจํ
์ธ ์์๋ฃ** (์์ต์ 0.5%) ๊ทธ๋ฆฌ๊ณ
> * **๋จ์๋น ์์๋ฃ๋ H.264๋ณด๋ค ์ฝ 10๋ฐฐ ๋์**.
>
> [์คํ ๋ฏธ๋์ด ์ฐํฉ](http://aomedia.org/about/)์ ํ๋์จ์ด ์ ์กฐ์ฌ(์ธํ
, AMD, ARM, ์๋น๋์, ์์ค์ฝ), ์ปจํ
์ธ ๋๋ฆฌ๋ฒ๋ฆฌ(๊ตฌ๊ธ, ๋ทํ๋ฆญ์ค, ์๋ง์กด), ๋ธ๋ผ์ฐ์ ๋ฉ์ธํ
์ด๋(๊ตฌ๊ธ, ๋ชจ์ง๋ผ)๋ฅผ ๋น๋กฏํ ๋ค๋ฅธ ์ฌ๋ฌ ํ์ฌ๋ค์ ์ํด ์ค๋ฆฝ๋์์ต๋๋ค.
>
> ์ด ํ์ฌ๋ค์ ๋์ผํ ๋ชฉํ๋ฅผ ๊ฐ์ง๊ณ ์์์ผ๋ฉฐ, ๋ก์ํฐ ํ๋ฆฌ์ ๋์์ ์ฝ๋ฑ๊ณผ ํจ์ฌ [๋จ์ํ ํนํ ๋ผ์ด์ผ์ค](http://aomedia.org/license/patent/)๋ก ๋ฌด์ฅํ AV1์ ํ์์ด์์ฃ . **ํฐ๋ชจ์ B. ํ
๋ฆฌ๋ฒ ๋ฆฌ**๋ [AV1 ์ปจ์
, ๋ผ์ด์ผ์ค ๋ชจ๋ธ, ํํฉ](https://www.youtube.com/watch?v=lzPaldsmJbk)์ ๋ํ ๋ฉ์ง ํ๋ฆฌ์ ํ
์ด์
์ ์งํํ์ต๋๋ค. ์ด ์น์
์ ์ถ์ฒ์ด๊ธฐ๋ ํ์ง์.
>
> **๋ธ๋ผ์ฐ์ ๋ก AV1 ์ฝ๋ฑ์ ๋ถ์** ๊ฐ๋ฅํ๋ค๋ ์ฌ์ค์ ์๊ฒ๋๋ฉด ์์ฃผ ๋๋ผ์ค๊ฑฐ์์. https://arewecompressedyet.com/analyzer/ ์ ๋ฐฉ๋ฌธํด๋ณด์ธ์.
> 
>
> ์ถ์ : ์ฝ๋ฑ์ ์ญ์ฌ์ ๋ํด ๋ ์์ธํ ์๊ณ ์ถ์ผ๋ฉด [๋์์ ์์ถ ํนํ](https://www.vcodex.com/video-compression-patents/)์ ๋ํ ๊ธฐ์ด๋ฅผ ๊ณต๋ถํ์
์ผํฉ๋๋ค.
## ์ผ๋ฐ ์ฝ๋ฑ
**์ผ๋ฐ ์ฝ๋ฑ์ ๋ฐํ์ด ๋๋ ์ฃผ์ ๋ฉ์ปค๋์ฆ์** ์๊ฐํ ๊ฒ์ด๋ฉฐ, ์ด๋ฌํ ์ปจ์
๋ค์ ๋๋ถ๋ถ์ ์ ์ฉํ๊ณ VP9, AV1, HEVC์ ๊ฐ์ ํ๋ ์ฝ๋ฑ๋ค์์ ์ฌ์ฉ๋ฉ๋๋ค. ์ค๋ช
์ ์์ฃผ ๊ต์ฅํ ๋จ์ํํ๋ค๋ ์ ์ํด ๋ถํ๋๋ฆฝ๋๋ค. ๊ธ์ ๊ฐ๊ฐํ ํ์
์์ (๋๋ถ๋ถ H.264)๋ฅผ ์์ฐํด๋ณผ ๊ฒ์
๋๋ค.
## ์ฒซ ๋ฒ์งธ ์คํ
- ์ฌ์ง ํํฐ์
๋
์ฒซ ๋ฒ์งธ ๋จ๊ณ๋ **ํ๋ ์์ ์ฌ๋ฌ๊ฐ์ ํํฐ์
, ์๋ธ ํํฐ์
** ๊ทธ ์ด์์ผ๋ก **๋ถํ **ํ๋ ๊ฒ์
๋๋ค.

**๊ทธ๋ฐ๋ฐ ์?** ๋ง์ ์ด์ ๊ฐ ์์ด์. ์๋ก, ์ฌ์ง์ ๋ถํ ํ๊ฒ ๋๋ฉด ์ ์ ์ธ ๋ฐฐ๊ฒฝ์ ์ปค๋ค๋ ํํฐ์
์ ์ฌ์ฉํ๊ณ , ์ ์ ์์ง์๋ค์ ๋ํด์๋ ์์ ํํฐ์
์ ์ฌ์ฉํ๋ฉด ํ๋ฆฌ๋์
์ ๋ณด๋ค ๋ ์ ํํ๊ฒ ์ํํ ์ ์๋ต๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ฝ๋ฑ์ **์ด๋ฌํ ํํฐ์
๋ค์ ์ฌ๋ผ์ด์ค(ํน์ ํ์ผ), ๋งคํฌ๋ก(ํน์ ์ฝ๋ฉ ํธ๋ฆฌ ์ ๋) ๊ทธ๋ฆฌ๊ณ ์ ๋ง์ ์๋ธ ํํฐ์
**์ผ๋ก ์ ๋ฆฌ๋ฅผ ํฉ๋๋ค. ์ด๋ฌํ ํํฐ์
์ ์ต๋ ํฌ๊ธฐ๋ ๋ค์ํ๋ฐ, AVC๋ 16x16์ ์ฌ์ฉํ๋ ๋ฐ๋ฉด HEVC๋ 64x64๋ฅผ ์ค์ ํ์ง๋ง ์๋ธ ํํฐ์
๋ค์ 4x4์ ์ฌ์ด์ฆ๊น์ง๋ ์ฌ์ฉํฉ๋๋ค.
์์ ๊ณต๋ถํ **ํ๋ ์ ์ ํ**์ ๋ ์ฌ๋ ค๋ด
์๋ค. **์ด๋ฌํ ์์ด๋์ด๋ค์ ๋ธ๋ก๋ค์๋** ์ ์ฉํด๋ณผ ์ ์์ง์. ๊ทธ๋ฌ๋ฏ๋ก I-Slice, B-Slice, I-Macroblock๋ฑ์ ์ด์ฉํ ์ ์์ต๋๋ค.
> ### ์ค์ต: ํํฐ์
ํ์ธํด๋ณด๊ธฐ
> ์ฌ๊ธฐ์๋ [Intel Video Pro Analyzer](https://software.intel.com/en-us/intel-video-pro-analyzer)(์ ๋ฃ๋ ์์ง๋ง ์ฒซ 10ํ๋ ์ ์ ์ฝ์ ๋ฌด๋ฃ ํธ๋ผ์ด์ผ ๋ฒ์ ๋ ์์)๋ฅผ ์ฌ์ฉํ ๊ฒ์
๋๋ค. [VP9 ํํฐ์
](/encoding_pratical_examples.md#transcoding) ๋ถ์๋ณธ์
๋๋ค.
>
> 
## ๋ ๋ฒ์งธ ์คํ
- ํ๋ฆฌ๋์
ํํฐ์
์ ํ๋ณดํ๊ณ ๋๋ฉด, ์ด์ ์ด์ ๋ํ ํ๋ฆฌ๋์
์ ์ํํ ์ ์์ต๋๋ค. [์ธํฐ ํ๋ฆฌ๋์
](#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์ผ, ์ ํธ๋ผ R.J. ์ ๋ฐ์ด์ F.M์ [14๊ฐ์ ๋ง์
๋ง ํ์๋กํ๋ ์ด๋ฏธ์ง ์์ถ์ ๋ํ DCT ์ ์ฌ ๋ณํ](https://arxiv.org/abs/1702.00817)์ ๋
ผ๋ฌธ์ผ๋ก ๋ฐํํ์์ต๋๋ค. (์ญ์: 8-ํฌ์ธํธ ์ง๊ต ๊ทผ์ฌ ์ด์ฐ ์ฝ์ฌ์ธ ๋ณํ์ผ๋ก, ๊ณฑ์
์ด๋ ๋นํธ ์ํํธ๊ฐ ํ์๊ฐ ์์)
๋ชจ๋ ๋ถ๋ ์ ์๊ฐ๋ ์ด์ ๋ค์ ๋ํด ์ดํดํ์ง ๋ชปํ๋ค๊ณ ํด์ ๊ฑฑ์ ํ ํ์๋ ์์ต๋๋ค. ์ค์ ๊ฐ์ ํ์ธํ๊ธฐ ์ํด ๋ช ๊ฐ์ง ์คํ์ ํด๋ณผ๊ฑฐ์์.
๋ค์ **ํฝ์
์ ๋ธ๋ก** (8x8)์ ์ฌ์ฉํด๋ณผ ๊ฒ์
๋๋ค:

๋ ๋๋ง๋ ๋ธ๋ก ์ด๋ฏธ์ง๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค(8x8):

ํฝ์
์ ๋ธ๋ก์ ๋ํ์ฌ **์ด์ฐ ์ฝ์ฌ์ธ ๋ณํ์ ์ํํ๋ฉด** **๊ณ์์ ๋ธ๋ก**(8x8)์ ์ป๊ฒ๋ฉ๋๋ค:

๊ทธ๋ฆฌ๊ณ ์ด ๊ณ์์ ๋ธ๋ก์ ๋ ๋๋งํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ด๋ฏธ์ง๋ฅผ ์ป๊ฒ ๋ฉ๋๋ค:

๋ณด์๋ ๋ฐ์ ๊ฐ์ด ์๋ณธ ์ด๋ฏธ์ง๊ฐ์ด ์๊ธฐ์ง ์์ฃ . ๋์น ์ฑ์
จ์์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง **์ฒซ ๋ฒ์งธ ๊ณ์**๋ ๋ค๋ฅธ ๋ชจ๋ ๊ฒ๋ค๊ณผ ์์ฃผ ๋ค๋ฆ
๋๋ค. ์ฒซ ๋ฒ์งธ ๊ณ์๋ DC ๊ณ์๋ก, ์
๋ ฅ ๋ฐฐ์ด์์ **์ํ์ ๋ชจ๋ ๊ฒ**์ ํํํ๋ฉฐ **ํ๊ท ๊ณผ ์ ์ฌํฉ๋๋ค.**
์ด ๊ณ์ ๋ธ๋ก์ ํฅ๋ฏธ๋ก์ด ์ฑ์ง์ ๊ฐ์ง๊ณ ์๋๋ฐ, ๋์ ์ฃผํ์ ์ฑ๋ถ์ ๋ฎ์ ์ฃผํ์ ์ฑ๋ถ๊ณผ ๋ถ๋ฆฌํ๋ค๋ ์ ์ด์ง์.

์ด๋ฏธ์ง ์์์, **์๋์ง์ ๋๋ถ๋ถ์** [**๋ฎ์ ์ฃผํ์**](https://web.archive.org/web/20150129171151/https://www.iem.thm.de/telekom-labor/zinke/mk/mpeg2beg/whatisit.htm)์ ์ง์ค๋๊ธฐ ๋๋ฌธ์, ์ด๋ฏธ์ง๋ฅผ ์ฃผํ์ ์ฑ๋ถ์ผ๋ก ๋ณํํ๊ณ **๋์ ์ฃผํ์ ๊ณ์๋ฅผ ๋ ๋ ค๋ฒ๋ฆฌ๋ฉด**, ์ด๋ฏธ์ง ํ์ง์ ๊ทธ๋ฆฌ ๋ง์ด ํฌ์ํ์ง ์๊ณ ๋ ์ด๋ฏธ์ง๋ฅผ ํํํ๋๋ฐ ํ์ํ **๋ฐ์ดํฐ์ ์์ ์ค์ผ ์ ์์ต๋๋ค.**
> ์ฃผํ์๋ ์ ํธ๊ฐ ์ผ๋ง๋ ๋น ๋ฅด๊ฒ ๋ณํํ๋๊ฐ๋ฅผ ์๋ฏธํฉ๋๋ค.
ํ
์คํธ์์ ์ป์ ์ง์์ ํ์ฉํ์ฌ DCT๋ฅผ ์ฌ์ฉํด ์๋ณธ ์ด๋ฏธ์ง๋ฅผ ์ฃผํ์(๊ณ์ ๋ธ๋ก)๋ฅผ ๋ณํ ํ ์ค์ํ์ง ์์ ๊ณ์๋ค์ ๋ ๋ ค๋ด
์๋ค.
์ฐ์ , ์ด๋ฅผ **์ฃผํ์ ์์ญ**์ผ๋ก ๋ณํํฉ๋๋ค.

๋ค์์ผ๋ก, ์ค๋ฅธ์ชฝ ํ๋จ์ ๋๋ถ๋ถ์ ํด๋น๋๋ ๊ณ์์ ๋ถ๋ถ(67%)๋ฅผ ๋ฒ๋ฆฝ๋๋ค.

๋ง์นจ๋ด, ํ๊ธฐํ ๊ณ์ ๋ธ๋ก์ผ๋ก๋ถํฐ ์ด๋ฏธ์ง๋ฅผ ์ฌ๊ตฌ์ฑํด๋ณด๊ณ ์ด๋ฅผ ์๋ณธ๊ณผ ๋น๊ตํด๋ด
์๋ค. (๋ช
์ฌํ์ธ์. ์ด๋ ๊ฐ์ญ์ ์ด์ฌ์ผ ํฉ๋๋ค.)

์ฌ๋ฌ๋ถ์ด ๋ณด์๋ ๋ฐ์ ๊ฐ์ด ์๋ณธ ์ด๋ฏธ์ง์ ๋ฎ๊ธด ํ์ง๋ง ์๋ณธ๊ณผ ๋น๊ตํ๋ฉด ๋ค๋ฅธ ๋ถ๋ถ์ด ๋ง์ด ๋ณด์
๋๋ค. **67.1875%๋ฅผ ๋ ๋ ค๋ฒ๋ฆฌ๊ณ ๋** ์๋ณธ๊ณผ ์ ์ฌํ ๋ฌด์ธ๊ฐ๋ฅผ ์ป์ ์ ์์์ง์. ๋ ๋์ ์ด๋ฏธ์ง ํ์ง์ ์ํด ๋ ๋๋ํ ๋ฐฉ๋ฒ์ผ๋ก ๊ณ์๋ฅผ ํ๊ธฐํ๋ ๋ฐฉ๋ฒ๋ ์์ง๋ง ์ด๋ ๋ค์์ ์ฃผ์ ์
๋๋ค.
> **๊ฐ ๊ณ์๋ ๋ชจ๋ ํฝ์
์ ์ฌ์ฉํ์ฌ ๋ง๋ญ๋๋ค**
>
> ์ฌ๊ธฐ์ ๊ธฐ์ตํ์
์ผ ํ ์ค์ํ ์ ์ ๊ฐ ๊ณ์๊ฐ ๊ฐ๊ฐ์ ํฝ์
๊ณผ ์ง์ ์ ์ผ๋ก ๋งคํ๋์ง๋ ์์ผ๋ ๊ณ์๋ ๋ชจ๋ ํฝ์
์ ๊ฐ์ค์น ํฉ์ด๋ผ๋ ์ ์
๋๋ค. ๋ค์ ์ด ๋๋ผ์ด ๋์์ ์ด๋ป๊ฒ ์ฒซ ๋ฒ์งธ์ ๋ ๋ฒ์งธ ๊ณ์๊ฐ ๊ฐ ์ธ๋ฑ์ค์ ๋ํ ๊ณ ์ ํ ๊ฐ์ค์น๋ฅผ ์ฌ์ฉํ์ฌ ๊ณ์ฐ๋๋์ง ๋ณด์ฌ์ค๋๋ค.
>
> 
>
> ์ถ์ฒ: https://web.archive.org/web/20150129171151/https://www.iem.thm.de/telekom-labor/zinke/mk/mpeg2beg/whatisit.htm
>
> ๋ํ DCT๋ฅผ ๊ธฐ๋ฐ์ผ๋ก [๊ฐ๋จํ ์ด๋ฏธ์ง ํ์ฑ์ ๋ณด๋ฉฐ DCT๋ฅผ ์๊ฐํ](/dct_better_explained.ipynb)ํด๋ณผ ์๋ ์์ต๋๋ค. ๊ทธ ์๋ก ๊ฐ ๊ณ์ ๊ฐ์ค์น๋ฅผ ์ฌ์ฉํ์ฌ [์ํ๋ฒณ A๊ฐ ํ์ฑ๋๋ ๋ชจ์ต์
๋๋ค.](https://en.wikipedia.org/wiki/Discrete_cosine_transform#Example_of_IDCT)
>
> 
> ### ์ค์ต: ๋ค๋ฅธ ๊ณ์ ๋ ๋ฆฌ๊ธฐ
> [DCT ๋ณํ](/uniform_quantization_experience.ipynb)
## ๋ค ๋ฒ์งธ ๋จ๊ณ - ์์ํ
๋ช๋ช ๊ณ์๋ฅผ ๋ฒ๋ฆด ๋ ๋ง์ง๋ง ๋จ๊ณ(๋ณํ)์์ ์ผ์ข
์ ์์ํ๋ฅผ ์ํํ์์ต๋๋ค. ์ด ๋จ๊ณ์์๋ ์์ ์ ๋ณด(๊ฐ๋จํ ์ฉ์ด๋ก **์์ค๋ถ**)๋ฅผ ์ ํํ๊ณ , **๊ณ์๋ฅผ ์์ํ ํ์ฌ ์์ถ์ ํฉ๋๋ค.**
์ด๋ป๊ฒ ๊ณ์ ๋ธ๋ก์ ์์ํ ์ํฌ๊น์? ๊ฐ๋จํ ๋ฐฉ๋ฒ์ผ๋ก๋ ๊ท ์ผ ์์ํ๊ฐ ์์ต๋๋ค. ๊ท ์ผ ์์ํ๋ ๋ธ๋ก์ ๊ฐ์ง๊ณ **๋จ์ผ ๊ฐ(10)์ผ๋ก ์ด๋ฅผ ๋๋์ด** ์ด ๊ฐ์ ๋ด๋ฆผํฉ๋๋ค.

์ด ๊ณ์ ๋ธ๋ก์ ์ด๋ป๊ฒ **๋ณํ**(์ฌ์์ํ) ํ ๊น์? ์ฒ์์ ๋๋์๋ ๊ฐ๊ณผ **๋์ผํ ๊ฐ์ ๊ณฑํ์ฌ** ์ํํ ์ ์์ต๋๋ค.

**์ด ๋ฐฉ๋ฒ์ด ์ต์ ์ ์๋๋๋ค.** ์๋ํ๋ฉด ๊ฐ ๊ณ์์ ์ค์์ฑ์ ๊ณ ๋ คํ์ง ์์๊ธฐ ๋๋ฌธ์
๋๋ค. ๋จ์ผ ๊ฐ ๋์ **์์ํ ํ๋ ฌ**์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด ํ๋ ฌ์ 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)๋ฅผ ์ค์ตํด๋ณด์ค ์ ์์ต๋๋ค.
## ๋ค์ฏ๋ฒ์งธ ๋จ๊ณ - ์ํธ๋กํผ ์ธ์ฝ๋ฉ
๋ฐ์ดํฐ(์ด๋ฏธ์ง ๋ธ๋ก/์ฌ๋ผ์ด์ค/ํ๋ ์)๋ฅผ ์์ํ ํ๊ณ ๋๋ฉด ์์ค ์์ด ์์ถํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์ฌ์ ํ ๋จ์ ์์ต๋๋ค. ๋ฐ์ดํฐ๋ฅผ ์์ถํ๋ ๋ง์ ๋ฐฉ๋ฒ(์๊ณ ๋ฆฌ์ฆ)์ด ์กด์ฌํฉ๋๋ค. ์ฌ๊ธฐ์๋ ๊ทธ ์ค ์ผ๋ถ๋ฅผ ๊ฐ๋ตํ ์์๋ณผ ๊ฒ์
๋๋ค. ๋ ๊น์ ์ดํด๋ฅผ ๋ฐ๋๋ค๋ฉด [์์ถ์ ๋ํ ์ดํด: ํ๋ ๊ฐ๋ฐ์๋ฅผ ์ํ ๋ฐ์ดํฐ ์์ถ](https://www.amazon.com/Understanding-Compression-Data-Modern-Developers/dp/1491961538/)์ด๋ผ๋ ๋๋ผ์ด ์ฑ
์ ์ฝ์ด๋ณด์ธ์.
### VLC coding:
์ฌ๋ณผ ์คํธ๋ฆผ์ด ์๋ค๊ณ ๊ฐ์ ํด๋ด
์๋ค: **a**, **e**, **r**, **t**์ด๋ฉฐ ์ด ์ฌ๋ณผ๋ค์ ๋ํ ํ๋ฅ (0๊ณผ 1์ฌ์ด)์ ๋ค์ ํ
์ด๋ธ์ ํํ๋ฉ๋๋ค.
| | a | e | r | t |
|-------------|-----|-----|------|-----|
| ํ๋ฅ | 0.3 | 0.3 | 0.2 | 0.2 |
๊ฐ์ฅ ๊ฐ๋ฅ์ฑ์ด ํฌ๊ณ ํฐ ์ฝ๋๋ถํฐ ๋ฎ์ ๊ฒ๊น์ง ๊ณ ์ ํ ์ด์ง ์ฝ๋(์์ ๊ฐ ์ถ์ฒ)๋ฅผ ํ ๋นํ ์ ์์ต๋๋ค.
| | a | e | r | t |
|-------------|-----|-----|------|-----|
| ํ๋ฅ | 0.3 | 0.3 | 0.2 | 0.2 |
| ์ด์ง ์ฝ๋ | 0 | 10 | 110 | 1110 |
์คํธ๋ฆผ **eat**๋ฅผ ์์ถํด๋ด
์๋ค. ๊ฐ ์ฌ๋ณผ๋น 8๋นํธ๋ฅผ ์๋นํ๋ค๊ณ ๊ฐ์ ํ๋ฉด ์์ถํ์ง ์์ ๊ฒฝ์ฐ์ 24๋นํธ๋ฅผ ์๋นํ๊ฒ ๋ฉ๋๋ค. ํ์ง๋ง ๊ฐ๊ฐ์ ์ฌ๋ณผ์ ์ฝ๋๋ก ๋์ฒดํ๋ฉด ๊ณต๊ฐ์ ์ ์ฝํ ์ ์์ต๋๋ค.
์ฒซ ๋ฒ์งธ ๋จ๊ณ๋ `10`์ ํด๋นํ๋ ์ฌ๋ณผ **e**๋ฅผ ์ธ์ฝ๋ฉํ๊ณ ๋ ๋ฒ์งธ ์ฌ๋ณผ **a**๋ฅผ ๋ํ๊ณ (์ฐ์ ์ฐ์ฐ ์๋) `[10][0]` ๋ง์ง๋ง์ผ๋ก ์ต์ข
์์ถ๋ ๋นํธ์คํธ๋ฆผ์ `[10][0][1110]` ํน์ `1001110`์ผ๋ก ๋ง๋๋ ์ฌ๋ณผ **t**๋ฅผ ๋ถ์ฌ์ฃผ๋ฉด ์ค์ง **7๋นํธ**๋ง ํ์๋ก ํฉ๋๋ค. (์๋ณธ๋ณด๋ค 3.4๋ฐฐ ์ ์ ๊ณต๊ฐ)
๊ฐ๊ฐ์ ์ฝ๋๋ ๋ฐ๋์ ๊ณ ์ ํ ์ ๋์ฌ ์ฝ๋์ฌ์ผ ํ๋ฉฐ [ํํ๋ง์ด ์ด๋ฌํ ์ซ์๋ค์ ์ฐพ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.](https://en.wikipedia.org/wiki/Huffman_coding) ๋ช ๊ฐ์ง ๋ฌธ์ ๊ฐ ์์์๋ **๋น๋์ค ์ฝ๋ฑ๋ค์ ์ฌ์ ํ ์ด ๋ฐฉ๋ฒ์ ์ ๊ณต**ํ๋ฉฐ ์์ถ์ ํ์๋กํ๋ ๋ง์ ์ ํ๋ฆฌ์ผ์ด์
๋ค์ ์ํ ์๊ณ ๋ฆฌ์ฆ์ด๊ธฐ๋ ํฉ๋๋ค.
์์ฝ๋์ ๋์ฝ๋ ๋ชจ๋ **๋ฐ๋์ ์ด ์ฝ๋๊ฐ ์๋ ์ฌ๋ณผ ํ
์ด๋ธ์ ์๊ณ ์์ด์ผ ํฉ๋๋ค.** ๊ทธ๋ฌ๋ฏ๋ก ํ
์ด๋ธ๋ ํจ๊ป ๋ณด๋ด์ผํ์ฃ .
### ์ฐ์ ์ ์ฝ๋ฉ:
์ฌ๋ณผ ์คํธ๋ฆผ์ด ์๋ค๊ณ ๊ฐ์ ํด๋ด
์๋ค: **a**, **e**, **r**, **s**, **t**์ด๋ฉฐ ์ด ๋ค์ ํ๋ฅ ์ ๋ค์ ํ
์ด๋ธ๊ณผ ๊ฐ์ด ํํ๋ฉ๋๋ค.
| | a | e | r | s | t |
|-------------|-----|-----|------|------|-----|
| ํ๋ฅ | 0.3 | 0.3 | 0.15 | 0.05 | 0.2 |
์ด ํ
์ด๋ธ์ ์ฐธ๊ณ ํ์ฌ ๋น๋์์ผ๋ก ์ ๋ ฌ๋ ๋ชจ๋ ์ฌ๋ณผ์ ํฌํจํ๋ ๋ฒ์๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.

์ด์ ์คํธ๋ฆผ **eat**๋ฅผ ์ธ์ฝ๋ฉํด๋ณด์ฃ . ํ์ ๋ฒ์ **0.3๋ถํฐ 0.6** ์์ ์๋ (๊ทธ๋ฌ๋ ํฌํจ๋์ง ์์) ์ฒซ ๋ฒ์งธ ์ฌ๋ณผ **e**๋ฅผ ์ ํํ๊ณ ์ด ํ์ ๋ฒ์๋ฅผ ๊ฐ์ง๊ณ ์ด์ ์ ์ฌ์ฉํ ๊ฒ๊ณผ ๋์ผํ ๋น์จ๋ก ๋ถํ ํด ์๋ก์ด ๋ฒ์ ๋ด์์ ๋ค์ ๋ถํ ํฉ๋๋ค.

์คํธ๋ฆผ **eat**๋ฅผ ์ด์ด์ ์ธ์ฝ๋ฉ ํด๋ด
์๋ค. ์๋ก์ด ํ์ ๋ฒ์ **0.3๋ถํฐ 0.39**์ ํฌํจ๋ ๋ ๋ฒ์งธ ์ฌ๋ณผ **e**๋ฅผ ์ทจํ ๋ค ๋ง์ง๋ง ์ฌ๋ณผ **t**๋ก ๋์ผํ ๊ณผ์ ์ ๋ฐ๋ณตํ์ฌ ๋ง์ง๋ง ํ์ ๋ฒ์ฃผ์ธ **0.354๋ถํฐ 0.372**๋ฅผ ์ป๊ฒ๋ฉ๋๋ค.

๋ง์ง๋ง ํ์ ๋ฒ์์ธ **0.354๋ถํฐ 0.372**๋ด์ ์๋ ์ซ์๋ฅผ ์ ํํด๋ด
์๋ค. **0.36**์ ๊ณจ๋ผ๋ณด์ฃ . ์ด ํ์ ๋ฒ์ฃผ์ ๋ด์ ์๋ ์๋ผ๋ฉด ์ด๋ค ๊ฒ์ด๋ ์๊ด ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ **์ด ์ซ์๋ง ์์ผ๋ฉด** ์๋ณธ ์คํธ๋ฆผ์ธ **eat**๋ฅผ ๋ณต๊ตฌํ ์ ์์ต๋๋ค. ์ด๋ ์คํธ๋ฆผ์ ์ธ์ฝ๋ฉํ ๋ฒ์์ ๋ฒ์ ์์ ์ ์ ๊ธ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค.

**์ญ๊ณผ์ ** (์์ ๋งํ๋ ๋์ฝ๋ฉ)์ ์ธ์ฝ๋ฉ๊ณผ ๋์ผํ๊ฒ ๊ฐ๋จํฉ๋๋ค. ์ ํํ๋ ์ซ์์ธ **0.36**์ผ๋ก ๋์ผํ ๊ณผ์ ์ ํตํ์ฌ ์๋์ ๋ฒ์๋ฅผ ๊ตฌํ๋๋ฐ, ์ด๋ฒ์๋ ์ด ์ซ์๋ฅผ ์ธ์ฝ๋ฉ๋ ์คํธ๋ฆผ์ ๋ฐํ๋ด๋๋ฐ ์ฌ์ฉํฉ๋๋ค.
์ฒซ ๋ฒ์งธ ๋ฒ์์์ ์์ ์ ํํ ์ซ์(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 vs 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 ๋นํธ์คํธ๋ฆผ์ ์์ฑํ๋ฉฐ ํ๋ ์์ผ๋ก๋ ๋ค์ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ ๊ฑฐ์์.
> 
### H.264 ๋นํธ์คํธ๋ฆผ
AVC(H.264) ํ์ค์ **[NAL](https://en.wikipedia.org/wiki/Network_Abstraction_Layer)** (๋คํธ์ํฌ ์ถ์ ๊ณ์ธต)์ด๋ผ ๋ถ๋ฅด๋ **๋งคํฌ๋ก ํ๋ ์** (๋คํธ์ํฌ ์ฉ์ด)์ ์ ์กํ๋ ์ ๋ณด๋ฅผ ์ ์ํฉ๋๋ค. NAL์ ์ฃผ๋ ๋ชฉ์ ์ "๋คํธ์ํฌ ์นํ์ "์ธ ๋น๋์ค ํํ์ ํ๋ก๋น์ ์ผ๋ก, ์ด ํ์ค์ ๋ฐ๋์ TV(์คํธ๋ฆผ ๊ธฐ๋ฐ), ์ธํฐ๋ท(ํจํท ๊ธฐ๋ฐ) ๋ฑ์ ๋น๋กฏํ ๊ฒ๋ค์์ ๋ฐ๋์ ๋์ํด์ผํฉ๋๋ค.

NAL ์ ๋์ ๊ฒฝ๊ณ๋ฅผ ์ ์ํ๋ [๋๊ธฐํ ๋ง์ปค](https://en.wikipedia.org/wiki/Frame_synchronization)๋ผ๋ ๊ฒ์ด ์์ต๋๋ค. ๊ฐ ๋๊ธฐํ ๋ง์ปค๋ ๋งจ ์ฒซ ๋ฒ์งธ์ธ `0x00 0x00 0x00 0x01`๋ฅผ ์ ์ธํ๊ณ `0x00 0x00 0x01`์ ๊ฐ์ ๊ฐ์ง๋๋ค. ์์ ์์ฑํ h264 ๋นํธ์คํธ๋ฆผ์ **hexdump**๋ฅผ ๋ ๋ณด๋ฉด, ํ์ผ ์์ ๋ถ๋ถ์ ์ธ๊ณ์ `NAL`์ ํ์ธํ ์ ์์ต๋๋ค.

์์ ๋ง์๋๋ฆฐ ๋ฐ์ ๊ฐ์ด, ๋์ฝ๋๋ ์ฌ์ง ์ ๋ณด ๋ฟ๋ง ์๋๋ผ ๋น๋์ค์ ์ธ๋ถ์ฌํญ, ์, ์ฌ์ฉ๋ ํ๋ผ๋ฏธํฐ ๋ฑ์ ์ฌ๋ฌ ์ ๋ณด๋ฅผ ํ์๋ก ํฉ๋๋ค. ๊ฐ NAL์ **์ฒซ ๋ฒ์งธ ๋ฐ์ดํธ**๋ ์ด์ ๋ํ ์นดํ
๊ณ ๋ฆฌ์ **ํ์
**์ ์ ์ํฉ๋๋ค.
| NAL type id | Description |
|--- |---|
| 0 | ์ ์๋์ง ์์ |
| 1 | ์ธ์ฝ๋ฉ๋ non-IDR ์ฌ์ง ์ฌ๋ผ์ด์ค |
| 2 | ์ธ์ฝ๋ฉ๋ ์ฌ๋ผ์ด์ค ๋ฐ์ดํฐ ํํฐ์
A |
| 3 | ์ธ์ฝ๋ฉ๋ ์ฌ๋ผ์ด์ค ๋ฐ์ดํฐ ํํฐ์
B |
| 4 | ์ธ์ฝ๋ฉ๋ ์ฌ๋ผ์ด์ค ๋ฐ์ดํฐ ํํฐ์
C |
| 5 | **IDR** ์ธ์ฝ๋ฉ์ IDR ์ฌ์ง ์ฌ๋ผ์ด์ค |
| 6 | **SEI** ์ถ๊ฐ ๋ณด์ ์ ๋ณด |
| 7 | **SPS** ์ํ์ค ํ๋ผ๋ฏธํฐ ์
|
| 8 | **PPS** ์ฌ์ง ํ๋ผ๋ฏธํฐ ์
|
| 9 | ์์ธ์ค ๋จ์ ๋ธ๋ฆฌ๋ฏธํฐ |
| 10 | ์ํ์ค์ ๋ |
| 11 | ์คํธ๋ฆผ์ ๋ |
| ... | ... |
๋ณดํธ์ ์ผ๋ก ๋นํธ์คํธ๋ฆผ์ ์ฒซ ๋ฒ์งธ NAL์ **SPS**์
๋๋ค. ์ด ํ์
์ **ํ๋กํ์ผ**, **๋ ๋ฒจ**, **ํด์๋** ๋ฑ๊ณผ ๊ฐ์ ์ผ๋ฐ์ ์ธ ์ธ์ฝ๋ฉ ๋ณ์๋ฅผ ์๋ ค์ฃผ๋ ์ญํ ์ ํฉ๋๋ค.
๋๊ธฐํ ๋ง์ปค๋ฅผ ๊ฑด๋ ๋ฐ๋ ๊ฒฝ์ฐ **์ฒซ ๋ฒ์งธ ๋ฐ์ดํธ**๋ฅผ ๋์ฝ๋ํ์ฌ **์ด๋ค ํ์
์ NAL**์ด ์ฒซ ๋ฒ์งธ ๋ฐ์ดํธ์ธ์ง ์์๋ผ ์ ์์ต๋๋ค.
๋๊ธฐํ ๋ง์ปค ๋ค์์ ์ฒซ ๋ฒ์งธ ๋ฐ์ดํธ๋ `01100111`์
๋๋ค. ์ด ์ฒซ ๋ฒ์งธ ๋นํธ(`0`)๋ **forbidden_zero_bit**์ ํด๋นํ๋ฉฐ, ๋ค์ 2๋นํธ(`11`)๋ ํด๋น ํ๋๊ฐ ์ด NAL์ด ๋ ํผ๋ฐ์ค ํ๋์ธ์ง ์๋์ง๋ฅผ ๊ฐ๋ฆฌํค๋ **nal_ref_idc**๋ฅผ ์๋ ค์ฃผ๋ฉฐ, ๋๋จธ์ง 5๋นํธ(`00111`)์ `nal_unit_type` ํ๋๋ฅผ ์๋ ค์ค๋๋ค. ์ด ๊ฒฝ์ฐ์๋ **SPS** (7) NAL ์ ๋์
๋๋ค.
SPS NAL์ ๋ ๋ฒ์งธ ๋ฐ์ดํธ(`binary=01100100, hex=0x64, dec=100`)๋ ์ธ์ฝ๋๊ฐ ์ฌ์ฉํ ํ๋กํ์ผ์ ๋ณด์ฌ์ฃผ๋ **profile_idc** ํ๋๋ก, ์ด ๊ฒฝ์ฐ์๋ **[constrained high-profile](https://en.wikipedia.org/wiki/H.264/MPEG-4_AVC#Profiles)** ๋ฅผ ์ฌ์ฉํ์ต๋๋ค. ์ด๋ B(bi-predictive) ์ฌ๋ผ์ด์ค์ ์ง์์ด ์๋ ํ์ดํ๋กํ์ผ์
๋๋ค.

SPS NAL์ ๋ํ H.264 ๋นํธ์คํธ๋ฆผ ์คํ์ ์ฝ๋ ๊ฒฝ์ฐ, **ํ๋ผ๋ฏธํฐ ์ด๋ฆ**, **์นดํ
๊ณ ๋ฆฌ** ๊ทธ๋ฆฌ๊ณ **๋์คํฌ๋ฆฝ์
**์ ๋ํ ๋ง์ ๊ฐ์ ์ฐธ๊ณ ํ ๊ฒ์
๋๋ค. ์๋ฅผ๋ค์ด `pic_width_in_mbs_minus_1`์ `pic_height_in_map_units_minus_1`ํ๋๋ฅผ ๋ด
์๋ค.
| Parameter name | Category | Description |
|--- |---|---|
| pic_width_in_mbs_minus_1 | 0 | ue(v) |
| pic_height_in_map_units_minus_1 | 0 | ue(v) |
> **ue(v)**: unsigned integer [Exp-Golomb-coded](https://pythonhosted.org/bitstring/exp-golomb.html)
์ด ํ๋๋ค์ ๊ฐ์ผ๋ก ๊ณ์ฐ์ ๋๋ ค๋ณด๋ฉด, **ํด์๋**์ ์ด๋ฅด๊ฒ ๋ฉ๋๋ค. `119 ( (119 + 1) * macroblock_size = 120 * 16 = 1920) `์ ๊ฐ๊ณผ `pic_width_in_mbs_minus_1`๋ฅผ ์ฌ์ฉํ์ฌ `1920 x 1080`๋ฅผ ํํํ ์ ์์ต๋๋ค. `1920`์ ์ธ์ฝ๋ฉํ๋ ๋์ `119`๋ฅผ ์ฌ์ฉํ์ฌ ๋ ๊ณต๊ฐ์ ์ ์ฝํ๊ฒ์ด์ง์.
๋ฐ์ด๋๋ฆฌ ๋ทฐ(ex: `xxd -b -c 11 v/minimal_yuv420.h264`)๋ก ์์ ์์ฑํ ๋น๋์ค๋ฅผ ๊ณ์ํ์ฌ ๊ฒ์ฌํ๋ ๊ฒฝ์ฐ, frame ์์ฒด๋ฅผ ์๋ฏธํ๋ ๋ง์ง๋ง NAL์ ์๋ตํ ์ ์์ต๋๋ค.

์์ ์์ฑํ ๋น๋์ค์ ์ฒซ ๋ฒ์งธ 6๋ฐ์ดํธ์ ๊ฐ์ ๋ณผ ์ ์์ต๋๋ค: `01100101 10001000 10000100 00000000 00100001 11111111`. ์ด๋ฏธ ์๋ ๋ฐ์ ๊ฐ์ด ์ฒซ ๋ฒ์งธ ๋ฐ์ดํธ๋ NAL์ ํ์
์ ์๋ฏธํ๋ฉฐ, ์ด ๊ฒฝ์ฐ์๋ (`00101`)์ด๋ฉฐ ์ด๋ **IDR Slice (5)** ์ด๊ณ ๋ ์์ธํ ํ์ธํด๋ณด๋ฉด:

์คํ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ์ฌ๋ผ์ค์ ํ์
(**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 slice)๊ณผ 0 (์ฒซ ๋ฒ์งธ ํ๋ ์)์
๋๋ค.
**๋นํธ์คํธ๋ฆผ์ ํ๋กํ ์ฝ**๋ก ๋ณผ ์ ์์ผ๋ฉฐ ์ด ๋นํธ์คํธ๋ฆผ์ ๋ํ์ฌ ๋ ๊ณต๋ถํ๊ณ ์ถ์ผ์๋ค๋ฉด [ITU H.264 spec.](http://www.itu.int/rec/T-REC-H.264-201610-I)๋ฅผ ์ดํด๋ณด์ธ์. ๋ค์์ ์ฌ์ง ๋ฐ์ดํฐ(์์ถ๋ YUV)๊ฐ ์ด๋์ ์์นํ๋์ง ๋ํ๋ด๋ ๋งคํฌ๋ก ๋ค์ด์ด๊ทธ๋จ์
๋๋ค.

[VP9 bitstream](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** bitstream](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)๋ ๋ณผ ์ ์์ง์.
>
> 
>
> [Intel Video Pro Analyzer](https://software.intel.com/en-us/intel-video-pro-analyzer)๋ ์ ๋ฃ์ด๊ธด ํ์ง๋ง ํธ๋ผ์ด์ผ ๋ฒ์ ์์๋ ์ด๋ฐ์ 10ํ๋ ์ ์ ํ์ผ๋ก ์ฌ์ฉํด๋ณด์ค ์ ์์ต๋๋ค. ํ์ต ์ฉ๋๋ก๋ ์ถฉ๋ถํฉ๋๋ค.
>
> 
## ๋ฆฌ๋ทฐ
**ํ๋ ์ฝ๋ฑ์ ๋๋ถ๋ถ์ ์ง๊ธ๊น์ง ํ์ตํ ๊ฒ๊ณผ ๋์ผํ ๋ชจ๋ธ์ ์ฌ์ฉํ๋ค๋ ์ฌ์ค**์ ๋ช
์ฌํด์ฃผ์ธ์. ์ค์ ๋ก Thor ๋น๋์ค ์ฝ๋ฑ์ ๋ธ๋ก ๋ค์ด์ด ๊ทธ๋จ์ ์ดํด๋ด
์๋ค. ์ฌ๊ธฐ์๋ ์์ ํ์ตํ ๋ชจ๋ ๋จ๊ณ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. ์ด ์์ด๋์ด๋ ์ด ๋ถ์ผ์ ๋ํ ํ์ ๊ณผ ๋
ผ๋ฌธ๋ค์ ๋ํด ์ต์ํ์ ์ดํด๋ฅผ ํ์๋ก ํฉ๋๋ค.

์ด์ ์ ๊ณ์ฐํ๋ [ํ ์๊ฐ ๋ถ๋์ 720p ํด์๋๋ฅผ ๊ฐ์ง 30fps ๋น๋์ค๋ฅผ ์ ์ฅํ๊ธฐ ์ํด 139GB์ ์ฉ๋](#%ED%81%AC%EB%A1%9C%EB%A7%88-%EC%84%9C%EB%B8%8C%EC%83%98%ED%94%8C%EB%A7%81)์ด ํ์ํ์์ต๋๋ค. ์ฌ๊ธฐ์ ๋ฐฐ์ด **์ธํฐ ํ๋ฆฌ๋์
, ์ธํธ๋ผ ํ๋ฆฌ๋์
, ๋ณํ, ์์ํ, ์ํธ๋กํผ ์ฝ๋ฉ ๋ฑ**์ ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ฉด, ๋๋ต **ํฝ์
๋น 0.031๋นํธ**๋ฅผ ์๋นํ๋ฉฐ, ๋ณผ ์ ์์๋งํ ์์ค์ ํ์ง์ ๋น๋์ค์ **139GB์ ๋ฌ๋ฆฌ 367.82MB์ ์ฉ๋๋ง์ ํ์๋ก** ํฉ๋๋ค.
> ์ฌ๊ธฐ์ ์ ๊ณต๋ ์์ ๋น๋์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก **ํฝ์
๋น 0.031๋นํธ**๋ฅผ ์ฌ์ฉํ๋๋ก ์ ํํ์์ต๋๋ค.
## ์ด๋ป๊ฒ H.265๋ H.264๋ณด๋ค ๋ ๋์ ์์ถ๋ฅ ์ ๋ฌ์ฑํ๋๊ฐ
์ด์ ์ฝ๋ฑ์ด ์ด๋ป๊ฒ ๋์ํ๋์ง์ ๋ํด ๋ง์ด ๋ฐฐ์ ์ผ๋, ์๋ก์ด ์ฝ๋ฑ๋ค์ด ์ ์ ๋นํธ๋ฅผ ๊ฐ์ง๊ณ ๋ ๋์ ํด์๋๋ฅผ ์ ๊ณตํ๋ ๋ฐฉ๋ฒ๋ค์ ๋ํด ์ฝ๊ฒ ์ดํดํ์ค ์ ์์๊ฑฐ์์.
AVC์ HEVC๋ฅผ ๋น๊ตํด๋ณผํ
๋ฐ์, CPU ์ธ์ดํด(๋ณต์ก๋)์ ์์ถ๋ฅ ๊ฐ์๋ ํญ์ ํธ๋ ์ด๋ ์คํ๊ฐ ์กด์ฌํ๋ค๋ ์ฌ์ค์ ๋ช
์ฌํ์ธ์.
HEVC๋ AVC์ ๋นํด ๋ ํฌ๊ณ ๋ ๋ง์ **ํํฐ์
(๊ทธ๋ฆฌ๊ณ ์๋ธ ํํฐ์
)** ์ต์
, **์ธํธ๋ผ ํ๋ฆฌ๋์
๋ฐฉํฅ**, **ํฅ์๋ ์ํธ๋กํผ ์ฝ๋ฉ** ๋ฑ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ด๋ฌํ ๋ชจ๋ ํฅ์์ H.265๊ฐ H.264๋ณด๋ค 50% ๋์ ์์ถ ์ฑ๋ฅ์ ๋ฐํํ ์ ์๊ฒ ํด์ฃผ์์ฃ .

# ์จ๋ผ์ธ ์คํธ๋ฆฌ๋ฐ
## ์ผ๋ฐ์ ์ธ ์ํคํ
์ณ

[TODO]
## ์ ์ง์ ๋ค์ด๋ก๋์ ์ ์ํ ์คํธ๋ฆฌ๋ฐ


[TODO]
## ์ปจํ
์ธ ๋ณดํธ
**๊ฐ๋จํ ํ ํฐ ์์คํ
**์ ์ฌ์ฉํ์ฌ ์ปจํ
์ธ ๋ฅผ ๋ณดํธํ ์ ์์ต๋๋ค. ํ ํฐ์ด ์๋ ์ฌ์ฉ์๊ฐ ๋น๋์ค๋ฅผ ์์ฒญํ๋ฉด CDN์ ์ฌ์ฉ์๋ฅผ ๋ง๊ณ , ์ ํจํ ํ ํฐ์ ์ง๋ ์ฌ์ฉ์๋ผ๋ฉด ์ปจํ
์ธ ๋ฅผ ์ฌ์ํ ์ ์๋๋ก ๋ง์ด์ฃ . ์ด๋ ๋๋ถ๋ถ์ ์น ์ธ์ฆ ์์คํ
๊ณผ ๊ต์ฅํ ์ ์ฌํฉ๋๋ค.

์ด ํ ํฐ ์์คํ
๋ง ์ฌ์ฉํ๋ฉด ์ฌ์ฉ์๊ฐ ๋น๋์ค๋ฅผ ๋ค์ด๋ก๋ ๋ฐ์ ๋ฐฐํฌ๊ฐ ๊ฐ๋ฅํฉ๋๋ค. ๊ทธ๋ฌ๋ **DRM(๋์งํธ ์ ์๊ถ ๊ด๋ฆฌ)** ์์คํ
์ ์ด๋ฅผ ๋ง์ ์ ์์ต๋๋ค.

์ค์ ํ์
์ ์์คํ
๊ณผ ์ค๋ฌด์๋ค์ ๋ ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ฌ ์ธ์ฆ๊ณผ ์ธ๊ฐ๋ฅผ ์ ๊ณตํฉ๋๋ค.
### DRM
#### Main systems
* 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 ๋น๋์ค ์คํธ๋ฆฌ๋ฐ)์ **DRM ์์คํ
DRM1**(์์ด๋๋ฐ์ธ, ํ๋ ์ด๋ ๋, ํ์ดํ๋ ์ด)์ ์ฌ์ฉํ๋ **๋๋ฐ์ด์ค D1**(์๋ฅผ๋ค์ด ์ค๋งํธํฐ, TV, ํ๋ธ๋ฆฟ, ๋ฐ์คํฌํ, ๋
ธํธ๋ถ)์์ **ํ๋ ์ด์ด P1**(์๋ฅผ๋ค์ด ์ค์นด ํด๋ํผ, ์์ ํ๋ ์ด์ด, ios)๋ก ๋ณธ๋ค๊ณ ํด๋ด
์๋ค.
์ปจํ
์ธ C1์ ์์คํ
DRM1์ **๋์นญํค K1**์ผ๋ก ์ํธํ๋์ด **์ํธํ๋ ์ปจํ
์ธ C'1**์ ์์ฑํฉ๋๋ค.

๋๋ฐ์ด์ค D1์ ํ๋ ์ด์ด P1์ **๊ฐ์ธํค PRK1**(์ด ํค๋ ๋ณดํธ๋์ด ์์ผ๋ฉฐ1 **D1**๋ง ์๊ณ ์์)์ **๊ณต๊ฐํค PUK1**๋ผ๋ ๋ ๊ฐ์ ํค(๋น๋์นญ)๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
> **1๋ณดํธ๋จ**: [๋ธ๋๋ฐ์ค](https://en.wikipedia.org/wiki/Black_box)์ฒ๋ผ ๋์ํ๋ ๋ด๋ถ์ ํน๋ณํ(์ฝ๊ธฐ ์ ์ฉ) ์นฉ์ ์ ์ฅ๋ ํค๋ก ํด๋
์ ์ ๊ณตํ๋ **ํ๋์จ์ด๋ฅผ ํตํ** ๋ฐฉ๋ฒ์ด ์๊ณ , ํน์ DRM ์์คํ
์ด ์ ๊ณตํ๋ **์ํํธ์จ์ด๋ฅผ ํตํ**(๋ ์์ ํจ) ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ์ด ๋ณดํธ๋ ํด๋น ๋๋ฐ์ด์ค๊ฐ ์ด๋ค ๋ฐฉ๋ฒ(ํ๋์จ์ด์ , ์ํํธ์จ์ด์ )์ ๊ฐ์ง๊ณ ์๋์ง ์ ์ ์์ต๋๋ค.
**ํ๋ ์ด์ด P1์ด ์ปจํ
์ธ C'1์ ๋ณด๊ณ ์ถ์ ๊ฒฝ์ฐ**, ๊ณต๊ฐํค **PUK1**๋ฅผ ๋ถ์ฌํ **DRM ์์คํ
DRM1**๋ฅผ ํตํด ์ฒ๋ฆฌํด์ผํฉ๋๋ค. 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))
```

# How to use jupyter
Make sure you have **docker installed** and just run `./s/start_jupyter.sh` and follow the instructions on the terminal.
# Conferences
* [DEMUXED](https://demuxed.com/) - you can [check the last 2 events presentations.](https://www.youtube.com/channel/UCIc_DkRxo9UgUSTvWVNCmpA).
# References
The richest content is here, it's where all the info we saw in this text was extracted, based or inspired by. You can deepen your knowledge with these amazing links, books, videos and etc.
Online Courses and Tutorials:
* 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
Books:
* 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
Bitstream Specifications:
* 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
Software:
* 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
Non-ITU Codecs:
* 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/
Encoding Concepts:
* 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/
Video Sequences for Testing:
* http://bbb3d.renderfarming.net/download.html
* https://www.its.bldrdoc.gov/vqeg/video-datasets-and-organizations.aspx
Miscellaneous:
* 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