๐ ๋ชฉ์ฐจ
ffmpeg์ ๊ธฐ๋ฅ - ํธ๋์ค์ฝ๋ฉ๊ณผ ํํฐ๋ง
1. ํธ๋์ค์ฝ๋ฉ (Transcoding)
์ธํ์ ๋ค๋ฅธ ํฌ๋ฉง์ผ๋ก ๋ณ๊ฒฝํ๋ ๊ฒ
input -> Demux(Unpack) -> Decode(Uncompress) -> Encode(Compress) -> Mux(Pack) -> output
2. ํํฐ๋ง (Filtering)
๋ฏธ๋์ด์ ์ค๋์ค์ ๋น๋์ค์ ์ผ๋ถ ๋ณํ๋ฅผ ์ฃผ๋ ๊ฒ
input -> Demux(Unpack) -> Decode(Uncompress) -> filter1 -> filter2 -> filter2 -> ... -> Encode(Compress) -> Mux(Pack) -> output
ffmpeg์ ๊ธฐ๋ณธ ๋ฌธ๋ฒ
ffmpeg
-f <input device or format> // ๋ฐ๋ก ๋ช ์ํ์ง ์์ ๊ฒฝ์ฐ ffmpeg๊ฐ ์์์ ์ถ์ ํจ
-i <input-protocol>:<input-identifier>
.. <filters and other options>
-f <output device or format>
<output-protocol>:<output-identifier>
์ง์ํ๋ devices, format, protocol ํ์ธ
ffmpeg -devices
ffmpeg -formats
ffmpeg -protocols
์คํฌ๋ฆฐ ์บก์ณ๋ฅผ ๋ฐ๋ก ์ธํ์ผ๋ก ๋ฃ๋ ๊ฒ๋ ๊ฐ๋ฅํจ
windows | ffmpeg -f gdigrab -i desktop ... |
macOS | ffmpeg -f avfoundation -i "1" |
Linux | ffmpeg -f x11grab -i $DISPLAY |
ํ์ดํ๋ผ์ธ์ ์ธํ,์์ํ์ผ๋ก๋ ๊ฐ๋ฅํจ
ffmpeg -f mov -i - ... -f mxf -
ffmpeg -f mov -i pipe:0 ... -f mxf pipe:1
์ธํ์ ์์ฑํด์ ๋ฃ๋๊ฒ๋ ๊ฐ๋ฅํจ
ffmpeg -f lavfi -i testsrc=duration=1:size=1920x1080
ffmpeg -f lavfi -i color=color=red
์คํธ๋ฆผ ์ ํ
ํํฐ์ ์์ํ์์๋ -map ์ต์ ์ ํตํด ์คํธ๋ฆผ์ ์ง์ ํด ์ฃผ์ดํ ํจ
<input-index>:<stream-type>:<stream-index>
ex) 0:v:1 (์ฒซ๋ฒ์งธ ์ธํ์ ๋น๋์ค ์คํธ๋ฆผ ์ค ๋๋ฒ์งธ), 0:v (์ฒซ๋ฒ์งธ ์ธํ์ ๋น๋์ค ์คํธ๋ฆผ ์ ์ฒด)
๋ฐ๋ก ์ง์ ํ์ง ์์ผ๋ฉด ์ค๋์ค ์ฑ๋ 1๊ฐ ๋น๋์ค ์ฑ๋ 1๊ฐ๋ง ์์ํ์ ํฌํจ๋จ
ํํฐ
filter=key1=value1:key2=value2 ...
ex) scale=width=1920:height=1080
์ฌ๋ฌ ํํฐ๋ฅผ ์ ์ฉํ ๋๋ ;๋ก ์ด์ด๋ถ์
filter=key1=value1:key2=value2 ...;filter2=key3=value3:key4=value4 ...;
input output ๋ ์ด๋ธ๋ง
๋น์ ํ ํํฐ ๊ทธ๋ํ ๊ตฌ์ฑํ ๋ ์ ์ฉํจ
[a_label] ํ์
์คํธ๋ฆผ ์ ํ์๋ ์ธํ ๋ ์ด๋ธ๋ก ์ฐ์ผ ์ ์์ [0:v], [1:a:2]
ex) [in_1][in_2] ... filter_name=<options...>[out_1][out_2] ...
ํํฐ ๊ทธ๋ํ
Filter Graph : ์ฌ๋ฌ ํํฐ๋ฅผ ์ฒด์ด๋ ํ๋ ๊ฒ
-vf : ๋น๋์ค ํํฐ ๊ทธ๋ํ. 1๊ฐ์ ์ธํ, ์์ํ
-af : ์ค๋์ค ํํฐ ๊ทธ๋ํ. 1๊ฐ์ ์ธํ, ์์ํ
-filter_complex: ์ค๋์ค์ ๋น๋์ค, ์ฌ๋ฌ๊ฐ์ ์ธํ ์์ํ
๋น๋์ค ํํฐ ์์)
ffmpeg -v error -y -i bullfinch.mp4 -vf "split[bg][ol];[bg]scale=width=1920:height=1080,format=gray[bg_out];[ol]scale=-1:480,hflip[ol_out];[bg_out][ol_out]overlay=x=W-w:y=(H-h)/2" ol.mp4
split[bg][ol];
[bg]scale=width=1920:height=1080,format=gray[bg_out];
[ol]scale=-1:480,hflip[ol_out];
[bg_out][ol_out]overlay=x=W-w:y=(H-h)/2
์ค๋์ค ํํฐ ์์)
ffmpeg -y -i four_channel_stream.wav -af "asplit=2[voice][bg];[voice]volume=volume=2,pan=mono|c0=c0+c1[voice_out];[bg]volume=volume=0.5,pan=mono|c0=c2+c3[bg_out];[voice_out][bg_out]amerge=inputs=2" audio_out.wav
asplit=2[voice][bg];
[voice]volume=volume=2,pan=mono|c0=c0+c1[voice_out];
[bg]volume=volume=0.5,pan=mono|c0=c2+c3[bg_out];
[voice_out][bg_out]amerge=inputs=2
complex filter ์์)
ffmpeg -v error -y -i bullfinch.mp4 -i ffmpeg-logo.png -filter_complex "[1:v]scale=-1:200[small_logo];[0:v][small_logo]overlay=x=W-w-50:y=H-h-50,split=2[sd_in][hd_in];[sd_in]scale=-2:480[sd];[hd_in]scale=-2:1080[hd];[0:1]pan=stereo|FL=c0+c2|FR=c1+c3[streo_mix]" -map [sd] sd.mp4 -map [hd] hd.mp4 -map [stero_mix] streo_mix.mp3
[1:v]scale=-1:200[small_logo];
[0:v][small_logo]overlay=x=W-w-50:y=H-h-50,split=2[sd_in][hd_in];
[sd_in]scale=-2:480[sd];
[hd_in]scale=-2:1080[hd];
[0:1]pan=stereo|FL=c0+c2|FR=c1+c3[streo_mix]
'๊ฐ๋ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[FFMPEG] ์ค๋์ค์ ๊ธฐ๋ณธ, ์ค๋์ค ์ํ, ์ปจํ ์ด๋, ์ธ์ฝ๋ฉ, ํธ๋์ค์ฝ๋ฉ (0) | 2023.03.26 |
---|---|
ํ์ด์ฌ ์ฝ๋๋ก ๋ฉ๋ก ๋ ธ๋ ํฌ๋กค๋ง (0) | 2017.07.17 |