๐ฝ ๋์์ ์์ถ๊ณผ ์ ์ฒด์ดํ

์ด ๊ธ์์๋ ๋์์ ์์ถ์ ์๋ฆฌ์ ๋ํด์ ์์๋ณด๊ณ ์์ ๊ฐ์ ํ์์ด ์ ์ผ์ด๋๋์ง์ ๋ํด ๋ค๋ค๋ณด๋ ค ํ๋ค.
๋์์์ ๋๋ฌด ํฌ๋ค
๋์์์ ์ฌ์ง๋ค์ ์งํฉ์ด๋ค. ๊ทธ๋ฌ๋ ๋์์์ ์ค์ ์ฌ์ง์ ์ฐ์์ผ๋ก ์ ์ํ ๊ฒฝ์ฐ ์ฉ๋์ด ๋๋๋๋ก ๋น๋ํด์ง๋ค. ์ฐ๋ฆฌ๊ฐ YouTube์์ ์์ฃผ ์์ฒญํ๋ 1920 x 1080 60FPS ๋์์์ ์ ํ ์์ถํ์ง ์์ผ๋ฉด ๊ทธ ํฌ๊ธฐ๊ฐ ๋ถ๋น 7GB์ ์ก๋ฐํ๋ค. ํ์ง๋ง ์ค์ YouTube์์ ๋๊ฐ์ ์ฌ์์ ๋์์์ ์์ฒญํ ๊ฒฝ์ฐ ๋ถ๋น ์ต๋ 40MB ๊ฐ๋ ์ฌ์ฉ๋๋ค. ๊ฑฐ์ 200๋ฐฐ ๊ฐ๊น์ด ์ฉ๋์ด ์ค์ด๋ ๊ฒ์ด๋ค. ๊ทธ๋ผ์๋ ์ฐ๋ฆฌ๋ ํฐ ์ฐจ์ด๋ฅผ ๋๋ผ์ง ๋ชปํ๋ค. ๋์ฒด ๋ฌด์จ ์ผ์ด ์ผ์ด๋ ๊ฒ์ผ๊น?
๊ทธ๋์ ์ธ์ฝ๋ฉ์ ํ๋ค
๋์์์ ๋น๋ํ ํฌ๊ธฐ ๋๋ฌธ์ ๋๋ถ๋ถ์ ๋์์์ ์ผ์ ์์ค ์์ถ์ ํ๋ค. ์ด๋ฅผ ๋์์ ์ธ์ฝ๋ฉ์ด๋ผ๊ณ ํ๋๋ฐ, ์ธ์ฝ๋ฉ ์๊ณ ๋ฆฌ์ฆ์ ์ธ๊ณ๋ ๋๋๋๋ก ์ ๊ตํ๊ณ ์๋ฆ๋ต๋ค.
๋์์ ์ธ์ฝ๋ฉ์ ์ฉ๋ ์ ๊ฐ์ ํต์ฌ์ ์ค๋ณต์ฑ์์ ์ฐพ๋๋ค. ์๋ฅผ ๋ค์ด ํ ๊ฐ์๊ฐ ๊ฐ๋งํ ์์ ๋ ธ๋๋ฅผ ๋ถ๋ฅด๊ณ ์๋ค๊ณ ์๊ฐํด๋ณด์. ๊ฐ์์ ์ ๋ง ์์ง์ด๋ฉฐ ๋ฐฐ๊ฒฝ๊ณผ ๊ฐ์์ ๋ชธ์ ์ ํ ์์ง์ด์ง ์๋๋ค. ๊ทธ๋ ๋ค๋ฉด ๋ฐฐ๊ฒฝ์ ๊ฒ์ ํฝ์ ๊ณผ ๊ฐ์์ ๋ชธ๋์์ ๋ํ ์ ๋ณด๋ฅผ ๋งค๋ฒ ์ ๊ณตํ ํ์๊ฐ ์์๊น? ์๋๋ค. ๊ทธ ๋ถ๋ถ๋ค์ ์ค๋ณต๋๊ธฐ ๋๋ฌธ์ด๋ค.
๋์์์ ๋ฐ์ดํฐ๋ ์๊ณต๊ฐ ์์ผ๋ก ์ค๋ณต๋๋ค. ๊ณต๊ฐ์์ ์ค๋ณต์ ์ ๊ฑฐํ๋ ๋ฐฉ๋ฒ์ ์ธํธ๋ผํ๋ ์ ์ฝ๋ฉ(Intra-frame coding, ํ๋ ์ ๋ด ์์ถ)์ด๋ผ๊ณ ํ๋ฉฐ ์๊ฐ์์ ์ค๋ณต์ ์ ๊ฑฐํ๋ ๋ฐฉ๋ฒ์ ์ธํฐํ๋ ์ ์ฝ๋ฉ(Inter-frame coding, ํ๋ ์ ๊ฐ ์์ถ)์ด๋ผ๊ณ ํ๋ค. ์ธ๋ถ์ ์ธ ๊ตฌํ๋ฒ์ผ๋ก ์ธ์ ํ ํฝ์ ๋ฐ์ดํฐ์ ์ ๊ฐ์ ์ํด ํ์ฉ๋๋ Discrete Cosine Transform, Motion Vector๋ฅผ ํ์ฉํ ์์ธก, ๊ทธ๋ฆฌ๊ณ In-loop Filtering ๊ธฐ๋ฒ ๋ฑ์ด ์กด์ฌํ๋ค.
Intra-frame coding
์ฌ์ง ์์ฒด์ ํฌ๊ธฐ๋ฅผ ์ค์ด์!
๋์์์ ์ฌ์ง์ ์งํฉ์ด๋ค. ์ฌ์ง์ ํฝ์ ์ ์งํฉ์ด๋ค. ๊ฐ์ ์ฌ์ง ๋ด์ ์ค๋ณต๋ ํฝ์ ์ ๋ํ ์ ๋ณด๋ฅผ ์ค์ผ ์ ์๋ค๋ฉด ๊ณต๊ฐ์์ ์ค๋ณต์ฑ(Spatial redundancy)์ ์ค์ผ ์ ์๋ค. ๊ฐ์ฅ ๊ฐ๋จํ ๊ตฌํ ์ค ํ๋๋ ํ๊ท ์น๋ฅผ ํ์ฉํ๋ ๊ฒ์ด๋ค. ํ ํฝ์ ์ ๋ฐ์ดํฐ๋ฅผ ๋น์๋๊ณ ์ฃผ๋ณ ํฝ์ ์ ๋ณด๋ฅผ ๋จ๊ฒจ๋๋ฉด ์ปดํจํฐ๋ ๋์์์ ์ฌ์ํ ๋ ์ธ์ ํ ํฝ์ ๋ค์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ ๊ทธ ๋ฐ์ดํฐ์ ํ๊ท ์ ํํํ๋ค.
์ฌ๊ธฐ์ ์ฌ๋ฐ๋ ์ ์ ์ธ์ ํ ํฝ์ ์ด ์ํ์ข์ฐ๊ฐ ์๋๋ผ๋ ์ ์ด๋ค. ๋์์ ๋ด ํฝ์ ๋ฐ์ดํฐ๋ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก, ๊ทธ๋ฆฌ๊ณ ์์์ ์๋์ ์์๋ก ์ ์ฅ๋์ด ์๋ค. ๋ง์ฝ ์ํ์ข์ฐ์ ํฝ์ ์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์์ ํ๊ท ์ ๊ตฌํ๊ฒ ๋๋ค๋ฉด ์ฐ์ธก๊ณผ ํ๋จ์ ํฝ์ ๋ฐ์ดํฐ๊ฐ ์ฝํ ๋๊น์ง ๊ธฐ๋ค๋ฆฐ ํ์ ๋ค์ ๋๋์์ ํฝ์ ๋ฐ์ดํฐ๋ฅผ ํํํด์ผ ํ๋ค. ๋น ๋ฅด๊ฒ ๋์์์ ํํํ ๋ ํจ์จ์ ์ด์ง ๋ชปํ๋ฏ๋ก Intra-frame coding์์๋ ์ผ์ชฝ ์, ์, ์ค๋ฅธ์ชฝ ์, ๊ทธ๋ฆฌ๊ณ ์ผ์ชฝ์ ๋ฐ์ดํฐ๋ฅผ ์์๋ก ์ ์ฅํด๋์๋ค๊ฐ ๊ณต๋ฐฑ ๋ฐ์ดํฐ๋ฅผ ๋ง๋๋ฉด ์์ ์ ์ฅ๋ ๊ฐ๋ค์ ์ฌ์ฉํ์ฌ ํ๊ท ๊ฐ์ ๊ณ์ฐํ๋ค.
Inter-frame coding
๊ณผ๊ฑฐ์ ์ด๋ฏธ ๋ณด๋ธ ์ ๋ณด๋ ๋ค์ ๋ณด๋ด์ง ๋ง๊ณ ์ฌํ์ฉํ์!
ํ๊ต ๋ฐฉํ์์์ ์์ ์ฃผ๋ ๊ฒ์ ๊ธฐ์ตํ๋๊ฐ? ๋ง์ฝ ๋์ผํ ์์ 30๋ช ์๊ฒ ์ค๋ค๊ณ ์๊ฐํด๋ณด์. ๊ต์ฅ ์ ์๋๊ป์ ์ผ์ผ์ด ๋ชจ๋ ์์ ๋ญ๋ ํ์ ๋ค๋ฉด ๋ฐฉํ์์ด ์ผ๋ง๋ ๊ธธ์ด์ง๊น? ์ผ๋ง๋ ์ง๋ฃจํ๊ณ ๊ดด๋ก์ธ๊น? ํ์ง๋ง ๊ต์ฅ ์ ์๋๊ป์๋ ๊ทธ๋ฌ์์ง ์๋๋ค. ๊ทธ์ ์์ ๋ด์ฉ์ ๊ฐ์ต๋๋ค, ํ๊ณ ๋์ด๊ฐ์ ๋ค. ๊ทธ๋ ๊ฒ ์ ์ฌ๋๊ณผ ๋์ผํ๋ค๋ ํํ๋ง์ผ๋ก ์ฐ๋ฆฌ๋ ์์คํ ๋ฐฉํ์ ์คํ๋ฅผ ๊ฐ์ง ์ ์๊ฒ ๋๋ค. ๊ต์ฅ ์ ์๋๊ป์ Inter-frame ์์ถ์ ํ์ ๊ฒ์ด๋ค.
๋์์๋ ๋ง์ฐฌ๊ฐ์ง์ด๋ค. ๋ง์ ๋์์์ ์๋ค ํ๋ ์์ด ๋น์ทํ๊ธฐ ๋๋ฌธ์ ๋์์๋ ํ๋ ์ ์ ํ์ ๊ด๊ณ๋ก ์ ๋ณด๋ฅผ ํํํ๊ฑฐ๋ ์์ ์๋ตํ ์ ์๋ค. ์ด๋ฅผ ํตํด ์๊ฐ์์ ์ค๋ณต์ฑ(Temporal Redundancy)์ ์ค์ผ ์ ์๋ค.

#1. ๊ธฐ์ค์ด ๋๋ I-Frame
I-Frame(Intra-coded picture)์ ์ฌ์ง์ด๋ผ๊ณ ๋ด๋ ๋ฌด๋ฐฉํ๋ค. I-Frame ๋ด์ ๋ชจ๋ ์ ๋ณด๋ ์๋ก์ด ์ ๋ณด์ด๋ค. I-Frame์ ์๋ค ํ๋ ์์ ํํํ๋ ๊ธฐ์ค์ด ๋๋ค.
#2. ๋ณํ๋๋ง ํํํ๋ P-Frame
๊ฐ๊ฐ์ I-Frame ์ฌ์ด์์๋ P-Frame(Predicted Pictures)์ ์ฝ์ ํ๋ค. P-Frame์๋ ์ด์ ํ๋ฉด๊ณผ์ ๋ณํ๋์ด ํํ๋์ด ์๋ค. ํ์ฌ ํ๋ ์์ด ์ ํ๋ ์๊ณผ ๊ณตํต์ ์ด ์์ ๊ฒฝ์ฐ ์ ํ๋ ์์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค. ๊ทธ๋ฆผ์ ๋ณด๋ฉด ์ดํด๊ฐ ์ข ํธํ๋ค.

ํ์ดํ๋ก ํํ๋ ๊ฒ์ด ๋ณํ๋์ ๋ํ๋ด๋ Motion Vector์ด๋ค. ์ด ์ธ์๋ P-Frame์๋ ์์ธก ๋ณด์ ์ ์ํ ๋ณํ๊ฐ๋ค์ด ํฌํจ๋์ด ์๋ค. P-Frame์๋ ์๋ก์ด ์ด๋ฏธ์ง ์ ๋ณด๊ฐ ํฌํจ๋๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. P-Frame์ I-Frame์ ์ ๋ฐ ์ ๋์ ํฌ๊ธฐ๋ง ์ฌ์ฉํ๋ค. ๋ฌผ๋ก ์ค์ ๋์์ ์ธ์ฝ๋ฉ์์๋ ๋ชจ๋ ํฝ์ ์ ๋ณด๋ฅผ ๋น๊ตํ๋ ๋์ ์ฌ๋ฌ ๋ธ๋ก ๋จ์๋ก ์ชผ๊ฐ์ ๋น๊ตํ๋ค. ์ด๋ฅผ ๋งคํฌ๋ก๋ธ๋ก(Macroblock)์ด๋ผ๊ณ ํ๋ฉฐ, ์ต์ ์์ ์ฝ๋ฑ์ธ HEVC์์๋ ์ฝ๋ฉ ํธ๋ฆฌ ์ ๋(Coding Tree Unit)์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
#3. ๋ฐ์ดํฐ๋ฅผ ์๋ผ๋ B-Frame
I-Frame๊ณผ P-Frame ์ฌ์ด์๋ B-Frame(Bidirectionally Predicted Pictures)์ ์ฝ์ ํ๋ค. B-Frame์ ์๋ค์ I-Frame ๋๋ P-Frame์ ์ด์ฉํด ํ๋ฉด์ ๊ณ์ฐํ๋ค. P-Frame์ด๋ ๋ค๋ฅผ ๊ฒ์ด ์์ด ๋ณด์ด๋๋ฐ ๊ตณ์ด B-Frame์ ์ฌ์ฉํ๋ ์ด์ ๋ ์ฉ๋ ๋๋ฌธ์ด๋ค. B-Frame์ ์๋ค ํ๋ ์์ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ํ์ฉํ๊ธฐ ๋๋ฌธ์ ๊ทธ๋งํผ ์ ๋ณด๋ฅผ ์๋ตํ ์ ์๋ค. ๊ทธ๋์ B-Frame์ P-Frame์ 25% ์ ๋์ ํฌ๊ธฐ๋ง ์ฌ์ฉํ๋ค.
B-Frame๋ P-Frame์ฒ๋ผ Motion Vector์ ์์ธก ๋ณด์ ์ ์ํ ๋ณํ๊ฐ๋ค์ ์ฌ์ฉํ๋ค. B-Frame์ I-Frame๊ณผ P-Frame์ ์ฐธ์กฐํ์ง๋ง HEVC ๋ฐ VVC ๋ฑ์ ์ต์ ์์ ์ฝ๋ฑ์์๋ B-Frame๋ ๋ค๋ฅธ B-Frame์ ์ฐธ์กฐํ ์ ์๋ค.

์ ์ฒด์ดํ์ ์์ธ
๋ฌธ์ ๋ I-Frame์ ๋ด์ ํต์ ํจํท์ด ์์ค๋ ๋ ๋ฐ์ํ๋ค. ์ฃผ์์ P-Frame, B-Frame์ ๊ณ์ฐํ ๊ธฐ์ค๊ฐ์ด ์ฌ๋ผ์ง ๊ฒ์ด๋ค. ๋ฌผ๋ก ์ข์ ๋์์ ์คํธ๋ฆฌ๋ฐ ํ๋ก๊ทธ๋จ์ผ ๊ฒฝ์ฐ ๋ฏธ๋ฆฌ ์ฌ๋ฌ ์๊ณ ๋ฆฌ์ฆ์ ํ์ฉํด ํต์ ํจํท ์์ค์ ๋ฏธ๋ฆฌ ๊ฐ์งํ๊ณ ํจํท์ ๋ค์ ์์ฒญํ๊ฒ ์ง๋ง ์๋ฒ๊ฐ ๋ถ์์ ํ๊ฑฐ๋ ์คํธ๋ฆฌ๋ฐ ํ๋ก๊ทธ๋จ์ด ๋ถ์คํ ๊ฒฝ์ฐ I-Frame์ด ์์ค๋ ๊ฒ์ ๊ฐ์งํ์ง ๋ชปํ๋ค.
์ด๋ I-Frame์ด ์ ์ค๋๊ณ ๊ทธ๋ค์์ P-Frame, B-Frame๋ง ๋์ฐฉํ๋ฉด ์๋ชป๋ I-Frame์ ๋ณํ๊ฐ์ ์ ์ฉํ๊ฒ ๋๋ ๊ฒ์ด๋ค. ๊ทธ๋ ๊ฒ ํ์์ ์ ์๋์ ์ค์ค๋ก๋ฅผ ์ธ์๋ถํด ํด๋ฒ๋ฆฌ์ ๊ฒ์ด๋ค.
๋ฐฑ๋ฌธ์ด ๋ถ์ฌ์ผ๊ฒฌ
์์ง๋ ์ ์ดํด๊ฐ ๋์ง ์๋๋ค๋ฉด ์ง์ ๋์ผ๋ก ํ์ธํด๋ณด์. FFmpeg ๋ฑ์ ์์ฉ ๋น๋์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํด ์๋์ ์ผ๋ก ๋์์ ํ์ผ์ ํ๋ ์ ์ ๋ณด๋ฅผ ๋ณ์ง์ํฌ ์ ์๋ค. ์ด๋ฐ ํ์์ ์์ ๋ถ์ผ๋ฅผ Datamoshing์ด๋ผ๊ณ ํ๋ค.
Python๊ณผ FFmpeg ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์ฉํด ๋ฎค์ง๋น๋์ค ๋ด I-Frame์ ์์์์ผ ์ธ์์ ์ผ๋ก ์ ์ฒด์ดํ ํ์์ ๋ฐ์์์ผฐ๋ค.
- ์์ ๋ด์ ๋ชจ๋ I-Frame๋ค์ ๋ฐ๋ก ์ด์ ์ ํ๋ ์ (์๋ง๋ P-Frame๊ณผ B-Frame) ๊ฐ์ผ๋ก ๋ฎ์ด์์ ๋ค. ๋๋ฌธ์ I-Frame์ผ๋ก ์ธํ ์ ๊ท ์ ๋ณด๋ ์กด์ฌํ์ง ์๋๋ค. ๊ทธ๋์ ํ๋ฉด์ ๋ณํ์ง ์์ง๋ง ์ธ๋ฌผ๋ค์ ๋์์ด ๋ํ๋๋ค. ์๋ชป๋ ๊ธฐ์ค์ (I-Frame)์ ๋ณํ๋(P-Frame๊ณผ B-Frame)์ด ์ ์ฉ๋์๊ธฐ ๋๋ฌธ์ด๋ค.
- ์ค๊ฐ ์ค๊ฐ ํ๋ฉด์ ์ผ๋ถ๊ฐ ์๊ฐ์ ์ผ๋ก ๊น๋ํ๊ฒ ๋ณด์ผ ๋๊ฐ ์๋ค. ์ด๋ P-Frame๋ ์ ๊ท ์ด๋ฏธ์ง ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์์ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ชจ๋ ๋ถ๋ถ์ด ์ ๊ท ์ ๋ณด์ธ I-Frame๋ค์ ์ญ์ ๋์๊ธฐ ๋๋ฌธ์, ์ผ์์ ์ผ๋ก ํ๋ฉด์ด ๊น๋ํ๊ฒ ๋ณด์ด๋๋ผ๋ ํ๋ฉด ์ ์ฒด๊ฐ ๊น๋ํ์ง๋ ์์ ๊ฒ์ด๋ค.
- ์์์ด ๊นจ์ง ๋ ์์ ๋ชจ๋์ฒ๋ผ ํฉ์ด์ง๋ ๊ฒ์ด ์๋๋ผ ๋์ ์ ๋ณด์ด๋ ์ปค๋ค๋ ์ ์ฌ๊ฐํ ๋จ์๋ก ๊นจ์ง๋ ๊ฒ์ ์ ์ ์์ ๊ฒ์ด๋ค. ์ด๋ ์์ ๋ฐ์ดํฐ ์์ถ์ด ๊ฐ ํฝ์ ๋ง๋ค ๊ณ์ฐ๋๋ ๊ฒ์ด ์๋๋ผ ์ฌ๋ฌ ํฝ์ ์ ๋ฌถ์ ๋งคํฌ๋ก๋ธ๋ก (์ฝ๋ฉ ํธ๋ฆฌ ์ ๋) ๋จ์๋ก ๊ณ์ฐ๋๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๋ฐ ํ์์ด ๋ฐฉ์ก ๋์ค ์ผ์ด๋๋ฉด ํํ "๊น๋๊ธฐ ํ์"์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
I-Frame์ด ์๋ค๋ ๊ฒ์ ๊ฐ์ํ๊ณ ์์์ ๋ณด๊ณ ๋๋ฉด I-Frame, P-Frame, B-Frame ๊ฐ์ ๊ด๊ณ๊ฐ ์กฐ๊ธ ๋ ๋ช
ํํ๊ฒ ์ดํด๊ฐ ๋ ๊ฒ์ด๋ค. FFmpeg๋ฅผ ์ด์ฉํด์ ๋์์์ ์์์ํค๋ ๋ฐฉ๋ฒ์ ๋์ค์ ๊ธฐํ๊ฐ ๋๋ฉด ๋ค๋ค๋ณด๋๋ก ํ๊ฒ ๋ค.
- ๊ธ์ ์ค๋ฅ๊ฐ ์๋ค๋ฉด mail@chosunghyun.com์ผ๋ก ์ ๋ณด ๋ถํ๋๋ฆฝ๋๋ค.
- "๋ค๋ง ์ค์ฐจ๊ฐ ์ ์ ์ปค์ง์ง ์๋๋ก B-Frame์ ๋ค๋ฅธ B-Frame์ ์ฐธ์กฐํ์ง ์๋๋ค. I-Frame ๋๋ P-Frame๋ง ์ฐธ์กฐํ๋ค"๋ ๋ฌธ์ฅ์ด ์๋ชป๋์์ต๋๋ค. HEVC ๋ฐ VVC ๋ฑ์ ์์ ์ฝ๋ฑ์์ B-Frame์ ๋ค๋ฅธ B-Frame์ ์ฐธ์กฐํ ์ ์์ต๋๋ค. ์ ๋ณด ์ ๋ง ๊ฐ์ฌ๋๋ฆฝ๋๋ค. Credit: (์ต๋ช ์์ฒญ)