[ffmpeg] ๊ธฐ๋ณธ
ffmpeg์ ์์ํ์ผ์ ์ธ์ฝ๋ฉ/๋์ฝ๋ฉ์ ์ง์ํ๋ ๋๊ท๋ชจ ์คํ์์ค๋ค.
๋ฏธ๋์ด ๊ด๋ จ ํ๊ฒฝ์ ์ง๋ฐฐํ๊ณ ์์ผ๋ฉฐ, ์ฌ์ค์์ ํ์ค์ด๋ผ๊ณ ๋ด๋ ๋๋ค. ์ผ๋ฐ์ ์ธ ๋ฏธ๋์ด ํ๋ ์ด์ด ์ํํธ์จ์ด๋. ์์ํธ์ง์ ์ง์ํ๋ ์ํํธ์จ์ด ์ ๋ฐ์ด ffmpeg์ ์์กดํ๋ค.
์๋ณธ ์์ค์ฝ๋๋ C ์ฝ๋๋ก ์์ฑ๋์๊ณ , ๋ค๋ฅธ ์ธ์ด์์ ์ฌ์ฉํ๋๋ผ๋ FFI wrapper๋ ํ๋ก์ธ์ค ํธ์ถ์ ํตํด ๊ฐ๋ค์ฐ๋ ํํ๊ฐ ๋๋ค.
์ค์น
์ผ๋ฐ์ ์ธ ๋ฆฌ๋ ์ค ์์คํ ์์๋ ํจํค์ง๋งค๋์ ๋ฅผ ํตํด ๋ฐ๋ก ์ค์น ๊ฐ๋ฅํ๋ค.
sudo apt-get install ffmpeg

๊ทธ๋์ ์คํ์ด ๋๋ฉด, ์ค์น๋ ์ ๋ ๊ฒ์ด๋ค.

์ง์ ํจํค์ง๋ฅผ ๋ฐ๊ฑฐ๋, ์ธ์คํจ๋ฌ๋ฅผ ํตํด ์ค์นํ๊ณ ์ถ๋ค๋ฉด ๊ณต์ ํ์ด์ง์์ ๋ฐ์ผ๋ฉด ๋๋ค.
https://www.ffmpeg.org/download.html
๊ธฐ๋ณธ ๊ฐ๋
์์์ฒ๋ฆฌ๋ฅผ ๋ค๋ฃจ๋ ค๋ฉด ์ผ๋ฐ ๋ฏธ๋์ด์์ ์ถ๊ฐ๋๋ ์์๋ค์ด ์ข ์๋ค. ๊ทธ๊ฑฐ์ ๋ํด์ ํ๋ฒ ์ง๊ณ ๊ฐ๋ฉด ์ข์๊ฑฐ๊ฐ๋ค.
๋ฉํฐํ๋ ์ฑ
์ผ๋ฐ์ ์ผ๋ก ์ฌ์ง ๊ฐ์ ๋ฏธ๋์ด ํ์ผ์์๋ "์ธ์ฝ๋ฉ"๊ณผ "๋์ฝ๋ฉ"์ ํตํด์ ํ์ผ์ด ์ ์ฅ๋๊ณ ํํ๋๋ค. ์ด๋ฏธ์ง๋ฅผ ํน์ ์ด๋ฏธ์ง ํ์ผ ํฌ๋งท์ผ๋ก ๋ณํํด์ ์ ์ฅํ๋ ๊ฒ์ "์ธ์ฝ๋ฉ"์ด๋ผ๊ณ ํ๊ณ , ๊ทธ๊ฑธ ์ค์ ๋ก ์ธ ์ ์๊ฒ ํ์ด์ ์ฝ๋ ๊ฒ์ ๋์ฝ๋ฉ์ด๋ผ๊ณ ํ๋ค.
์์์ฒ๋ฆฌ์๋ ์ด๋ฐ ์ฉ์ด๊ฐ ์ฌ์ฉ๋๋๊ฑด ๋๊ฐ์ง๋ง, ๋ฏธ๋์ด ์์ค๊ฐ ์ฌ๋ฌ๊ฐ๋ผ์ ์๊ธฐ๋ ์ฐจ๋ณ์ ์ด ์๋ค.
๊ทธ๊ฒ์ด ๋ฐ๋ก "๋จน์ฑ(Muxing)"๊ณผ "๋๋จน์ฑ(Demuxing)"์ด๋ค. ๋จน์ฑ์ ์ค๋ง์ด๊ณ Multiplexing์ด๋ผ๊ณ ๋ ๋ถ๋ฅธ๋ค.
์๋ค์ํผ ์์์ ํ๋ฉด๊ณผ ์๋ฆฌ๊ฐ ํจ๊ป ๋์ค๋ ๋ฉํฐ๋ฏธ๋์ด๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์๋ฆฌ์ ์์์ ๋์์ ๋ญ์ณ์ ์ ์ฅํ๋๋ฐ, ์ด๊ฑธ ๋จน์ฑ์ด๋ผ๊ณ ํ๋ค. ๋ฐ๋๋ก ๋ญ์ณ๋์ ์์ ํ์ผ์์ ํ๋ฉด๊ณผ ์๋ฆฌ๋ฅผ ๋ถํดํด์ ํํํ๋ ๊ฒ์ ๋๋จน์ฑ์ด๋ผ๊ณ ํ๋ค.
https://wikidocs.net/78484
๊ทธ๋์ ์์ํ์ผ์ ์์ถํ ๋๋ ๋จผ์ ํ๋ฉด๊ณผ ์ค๋์ค๋ฅผ ๋ณ๋๋ก ์ธ์ฝ๋ฉํ ๋ค์์, ๊ฐ๊ฐ์ ์์ถ(๋ฉํฐํ๋ ์ฑ)ํด์ wmv ๊ฐ์ ์์ํ์ผ์ด ๋ง๋ค์ด์ง๊ฒ ๋๋ค.
์์ํ์ผ์ ์ฌ์ํ ๋๋ ๋ฐ๋๋ก demuxing์ ํตํด ํ๋ฉด ์์์ ์ค๋์ค ์์๋ฅผ ๋ถ๋ฆฌํ๋ค์์, ํ๋ฉด๊ณผ ์ค๋์ค๋ฅผ ๊ฐ๊ฐ ๋์ฝ๋ฉํด์ ์ฒ๋ฆฌ๋ฅผ ํ๋ค.
bitrate
bitrate๋ ๋จ์ ์๊ฐ๋น ์ ์ก๋๋ ๋นํธ์ ์๋ฅผ ๋งํ๋ค. ๋น์ฐํ ๋นํธ ์ ์ก๋์ด ๋ง์์ผ ์ค์ผ ๋น๋์ค ํ์ง์ด ์ข์์ง์ง๋ง, ๊ทธ๋งํผ ํ์ผ ํฌ๊ธฐ๋ ์ปค์ง๋ค.
๋ณดํต ์ด๋ฐ ์์ผ๋ก ํํ๋๋๋ฐ, ์ด๋ฌ๋ฉด 1์ด์ 644kb๋งํผ์ ๋ฐ์ดํฐ๋ฅผ ํํํ๋ค๋ ๋ป์ด๋ค.
ํ๋ฒ ์์ํ์ผ์ ํ๋ ๊น๋ณด์.
ffprobe -v error -select_streams v:0 -show_entries stream=codec_type,codec_name,bit_rate,avg_frame_rate -of default=noprint_wrappers=1 tetrio.mp4
์ด๋ฌ๋ฉด bitrate๊ฐ 476701. ์ด๋น 476kb์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ค๋ ๋ป์ด ๋๋ค.
๊ทผ๋ฐ bitrate๋ ํฌ๊ฒ 2๊ฐ์ง ์ค์ ๋ฐฉ์์ด ์๋๋ฐ, ํ๋๋ ๊ณ ์ ํ์ด๊ณ ํ๋๋ ๊ฐ๋ณํ์ด๋ค. ์ด๊ฑด ํ์ผ ์์ค์์ ์ด๋ฏธ ์ ์ฅ๋์ด์๋ ๋ฉํ๋ฐ์ดํฐ ๊ฐ์ด๋ค.
๊ณ ์ bitrate(CBR:constant bit rate)์ ๊ฒฝ์ฐ์๋ ๋ชจ๋ ํ๋ ์์ ๋์ผํ bitrait๋ฅผ ์ฒ๋ฆฌํ๋๋ก ํ๋ค. ์ด๊ฑด ์ ๋ฐ์ ์ธ ๋นํจ์จ์ฑ์ด ๋ง์์, ์ค๋์ค ํฌ๋งท์๋ ์์ง ์ง๋ฐฐ์ ์ผ๋ก ์ฌ์ฉ๋์ง๋ง ์์์ฒ๋ฆฌ์์๋ ๊ฑฐ์ ์ฌ์ฅ๋์๋ค.
๊ฐ๋ณํ bitrate(VBR:variable bit rait)์ ๊ฒฝ์ฐ์๋ ํ๋ ์๋ง๋ค ๋ค๋ฅธ bitrate๋ฅผ ์ ์ฉํ ์ ์๋ค. ๊ทธ๋ฌ๋๊น ๋จ์ํ ํ๋ฉด์๋ bitrate๋ฅผ ์ ๊ฒ๋ง ๋์ ธ์ ๋ฆฌ์์ค๋ฅผ ์๋ผ๊ณ , ๋ณต์กํ ํ๋ฉด์๋ bitrate๋ฅผ ๋์ฌ์ ์ ํํํ๋ค๋ ์ง ํ๋ ์ปดํฉํธํ ์ต์ ํ๊ฐ ๊ฐ๋ฅํ๋ค.
ํ์ผ ํฌ๊ธฐ๋ ํจ์ฌ ์๊ณ , ๋ฆฌ์์ค ์ฌ์ฉ๋ ์ ์ด์ ์ ๋ฐ์ ์ผ๋ก ๋ ์ข์ ์์ ํ์ง์ ๊ธฐ๋ํ ์ ์๋ค๋๊ฒ ์ฅ์ ์ด๋ค.
์ฐ๋ฆฌ๊ฐ ์ผ๋ฐ์ ์ผ๋ก ์ํ ํ์ผ์ mp4๋ก ๋ค์ด๋ฐ๊ฑฐ๋ ํ๋ฉด, ๊ทธ๊ฑด ๋ณดํต ๊ฐ๋ณํ bitrate๋ก ์ธ์ฝ๋ฉ๋ ํ์ผ์ด๋ค. ์ด๋ฐ ์ผ๋ฐ์ ์ธ ์ฌ์ฉ์ ์์ด์ ๊ณ ์ bitrate๋ ๊ฑฐ์ ์ฌ์ฅ๋์๋ค.
๊ทธ๋์ ์์ํ์ผ ํ๋๋ง ๊น๋ด๋, ํจํท ์ฌ์ด์ฆ๊ฐ ์๋ฆฌ๊ฐ๋ฆฌํ๋๊ฑธ ๋ณผ ์ ์๋ค.
ffprobe -v error -select_streams v:0 -show_entries frame=pkt_size,pkt_duration_time -of csv=p=0 tetrio.mp4

๊ทธ๋ ๋ค๊ณ ํด์ ๊ณ ์ ํ bitrate๊ฐ ์ฐ์ด์ง ์๋ ๊ฒ์ ์๋๋ค.
๋คํธ์ํฌ ์์ค์ ํ์ผ ์ ์ก ์ฒ๋ฆฌ์์๋ ๊ณ ์ bitrate๊ฐ ํจ์ฌ ์์ ์ ์ด๋ค. ํฌ๊ธฐ๊ฐ ํญ์ ์ผ์ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ผ๋ก๋ก, ๊ฐ๋ณํ bitrate์ ๊ฒฝ์ฐ์๋ ๋ณต์กํ ํ๋ฉด์์์ ๋ฐ์ดํฐ ํฌ๊ธฐ๊ฐ ๊ธ๊ฒฉํ๊ฒ ์ปค์ง ์ ์๋๋ฐ, ์ด๋ฐ๊ฑด ์ฌ์ฉ์์๊ฒ ๋ฒ๋ฒ
์์ผ๋ก ๋ํ๋ ์๋ ์๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ๊ฐ ์ข ์๋ค.
๊ฒ๋ค๊ฐ ์ค๋์ค์ ๋น๋์ค๊ฐ ๋ฐ๋ก ๋
ผ๋ค๊ฑฐ๋ ํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์๋ ์๊ณ , ๋ถ์์ ์ฑ์ด ๊ต์ฅํ ํฌ๊ธฐ ๋๋ฌธ์ ์คํธ๋ฆฌ๋ฐ์์ ๊ฐ๋ณํ bitrate๋ ์ผ๋ฐ์ ์ธ ์ ํ์ด ์๋์๋ค.
Adaptive bitrate (with HTTP)
๊ณ ์ ํ bitrate์ ๊ฐ๋ณํ bitrate์ ์ฝ๊ฐ ์ ์ถฉ์์ผ๋ก์ ๋์จ ์คํธ๋ฆฌ๋ฐ์ ์ํ ์ค๊ฐ ๊ฐ๋
์ด๋ค.
์์ฆ์ ์คํธ๋ฆฌ๋ฐ์ด๋ผ๊ณ ํ๋ฉด ์ด ์ ๊ทผ๋ฒ์ ๊ธฐ๋ฐ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ์ ํฌ๋ธ๋ ๋ทํ๋ฆญ์ค ๋ฑ ๋ง์ ์คํธ๋ฆฌ๋ฐ ํ๋ซํผ์ด ์ด ๊ธฐ์ ์ ์ฌ์ฉํ๋ค.
์ด๊ฑด ์์ํ์ผ์ ์ด๋จ์๋ก ์๊ฒ ์ชผ๊ฐ์ "์ธ๊ทธ๋จผํธ"๋ผ๋ ์์ ํ์ผ์ ๋ง๋ค์ด๋ ๋ค์์, ์ฌ์ฉ์๊ฐ ๋คํธ์ํฌ ์ฒ๋ฆฌ๋์ด ์ถฉ๋ถํ๋ค๋ฉด ๋ฏธ๋ฆฌ ์๋ฉ ๋ณด๋ด๊ณ , ์๋๋ฉด ์กฐ๊ธ์ฉ ๋ณด๋ด๊ณ ํ๋ ์์ผ๋ก ์ฒ๋ฆฌ๋ฅผ ํ๋ค.
์ธ๊ทธ๋จผํธ๋ ์ผ๋จ์ ํ์ผ์ด๊ธฐ ๋๋ฌธ์ ๊ฐ๋ณ bitrait์ ๊ณ ์ bitrate ๋์ค์ ๊ณจ๋ผ์ ์ธ์ฝ๋ฉํ ์ ์๋๋ฐ, ์ฌ๊ธฐ์๋ ๊ฐ๋ณ bitrate๊ฐ ์กฐ๊ธ ๋ ์ผ๋ฐ์ ์ด๋ค.
ffmpeg๋ ๋น์ฐํ ์ด๋ฌํ ๊ธฐ๋ฅ์ ์ง์ํ๋ค.
๊ฐ๋จํ๊ฒ ์ฌ์ฉํด๋ณด๊ธฐ
ffmpeg์ ์ ๋ง ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
์์ํ์ผ์ ๋จ์ํ ํฌ๋งท ๋ณํ๋ถํฐ ํด์, ํ๋ ์ ์กฐ์ , bitrate ์กฐ์ , ์๋ง ์ฒ๋ฆฌ ๋ฑ๋ฑ, ์์ ์ฒ๋ฆฌ์ ํ์ํ ๋๋ถ๋ถ์ ๊ธฐ๋ฅ ์์๊ฐ ํฌํจ๋์ด์๋ค. ์ด๊ฑฐ ํ๋๋ง ์ ๋ฐฐ์์ ์ธ ์ค ์์๋ ์์์ฒ๋ฆฌ๋ฅผ ์๋ค๊ณ ๋งํ ์ ์์ ๊ฒ์ด๋ค.
์ผ๋จ ์ฌ๊ธฐ์๋ ๊ธฐ๋ณธ์ ์ธ ์ฌ์ฉ๋ก๋ง ๋ช๊ฐ์ง ๋ค๋ค๋ณด๊ณ ๋์ด๊ฐ๊ฒ ๋ค.
mp4 ํ์ผ์ ํ๋ ์ค๋นํ์.
๊ทธ๋ฅ ํ
ํธ๋ฆฌ์ค ํ๋ ์ด ์์์ด๋ค.
ํ์ผ ํฌ๋งท ๋ณํ
ํ์ผ ํฌ๋งท์ ๋ฐ๊ฟ์ ์ ์ฅํ๋ ๊ฒ๋ ๊ฝค๋ ํ์ค์ ์ธ ์์ ํธ์ง ํจํด ์ค ํ๋๋ค.
์ฌ์ฉ ๋ฐฉ๋ฒ์ ๊ฐ๋จํ๋ค.
-i ์ธ์๋ก ์
๋ ฅ ํ์ผ์ ๋ฃ๊ณ , ์ถ๋ ฅ ํ์ผ๋ช
์ ํ์ฅ์๋ฅผ ๋ฃ์ด์ฃผ๋ฉด, ์์์ ํ์ฅ์๋ฅผ ์ธ์ํ๊ณ ๊ทธ ํฌ๋งท์ผ๋ก ๋ณํํด์ค๋ค.
ffmpeg -i tetrio.mp4 tetrio.avi


์๊ฐ์ด ์กฐ๊ธ ๊ฑธ๋ฆฌ๊ธด ํ๋๋ฐ, ์ ๋นํ ๋๋ค.
avi ํ์ผ์ด ์ ์์ฑ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ด๋ ๊ฒ ๋ง๋ค์ด์ง ๋ฏธ๋์ด ํ์ผ์ ๊ทธ๋ฅ ๋ฏธ๋์ด ํ๋ ์ด์ด ํ๋ ๊น์์ ๋๋ ค๋ ๋์ง๋ง, ffmpeg์ ๋ด์ฅ๋ ffplay๋ฅผ ์ฐ๋ ๊ฒ๋ ํธ๋ฆฌํ ํธ์ด๋ค.
์ ๋ง๋ค์ด์ก๋ค.
๋์์ ์๋ฅด๊ธฐ
๋์์์ ํน์ ๋ฒ์๋ก ์๋ฅด๋ ๊ฒ๋ ๋งค์ฐ ์์ฃผ ์ฌ์ฉ๋๋ ์์์ฒ๋ฆฌ ํจํด์ด๋ผ๊ณ ํ ์ ์๋ค.
๋จ์ ํธ์ง์ ์ํด์ ํ ์๋ ์๊ณ , ๋น ๋ฅธ ์คํธ๋ฆฌ๋ฐ ์ฒ๋ฆฌ๋ฅผ ์ํด์ ์์์ ์๊ฒ ์๋ผ์ ์ฒ๋ฆฌํ ์๋ ์๋ค.
์๋๋ mp4 ํ์ผ์ 5์ด-20์ด ๋ฒ์๋ก 15์ด๋ง ์๋ผ์ ์์ฑํ๋ ์์ ๋ค.
ffmpeg -i tetrio.mp4 -ss 00:00:05 -to 00:00:20 -c copy short.mp4

๊ทธ๋ผ ์์ํ์ผ ์์ฒด๊ฐ ์๊ฒ ๋ง๋ค์ด์ง ๊ฒ์ ๋ณผ ์ ์๊ณ
์์ํ๋๋ก ์ ์๋ ค์ ๋์๊ฐ ๊ฒ์ด๋ค.
์ด๋ฐ ์์ผ๋ก ์ธ ์ ์๋ค.
์ฐธ์กฐ
https://github.com/FFmpeg/FFmpeg
https://www.ffmpeg.org/ffmpeg.html
https://wikidocs.net/78484