# 비디오 필터 적용

#### 비디오 필터란?

비디오 필터는 영상의 품질, 색상, 해상도, 자막 삽입 등 다양한 효과를 처리하기 위해 사용된다. FFMPEG에서 비디오 필터는 `-vf` 옵션을 사용하여 적용하며, 여러 필터를 체인으로 연결해 사용 가능하며 각 필터는 특정한 목적에 맞는 기능을 수행한다.

#### 기본 구조

FFMPEG에서 비디오 필터를 사용하는 명령어의 기본 구조는 다음과 같다:

```
ffmpeg -i 입력파일 -vf 필터명=설정값 출력파일
```

여기서 `-vf`는 비디오 필터를 지정하는 옵션이고, `필터명`에는 사용할 필터를, `설정값`에는 필터에 필요한 매개변수를 입력한다.

#### 비디오 필터 체인

FFMPEG에서는 여러 필터를 동시에 적용할 수 있으며, 필터들을 `,`로 구분하여 체인으로 연결할 수 있다. 필터 체인은 아래와 같은 형식으로 작성한다:

```
ffmpeg -i 입력파일 -vf 필터1,필터2,필터3 출력파일
```

예를 들어, 해상도 변경과 노이즈 제거 필터를 동시에 적용하는 명령은 다음과 같다:

```
ffmpeg -i input.mp4 -vf scale=1280:720,denoise=mcdenoise output.mp4
```

#### 흔히 사용되는 비디오 필터

**1. scale 필터**

`scale` 필터는 비디오의 해상도를 조정하는 필터이다. 이는 주어진 해상도(너비와 높이)로 비디오를 변환하는 데 사용된다. 다음 명령은 비디오를 1920x1080 해상도로 변환한다:

```
ffmpeg -i input.mp4 -vf scale=1920:1080 output.mp4
```

또한 비율을 유지하면서 해상도를 변경할 수도 있다. 예를 들어, 너비를 1280으로 설정하고 높이를 자동으로 계산하려면 아래와 같이 작성할 수 있다:

```
ffmpeg -i input.mp4 -vf scale=1280:-1 output.mp4
```

**2. crop 필터**

`crop` 필터는 비디오의 일부분만 자를 때 사용된다. 이 필터는 주로 비디오의 특정 영역만 사용하거나 불필요한 부분을 제거할 때 유용하다. 명령어 형식은 다음과 같다:

```
ffmpeg -i input.mp4 -vf crop=너비:높이:x:y output.mp4
```

여기서 `너비`와 `높이`는 자를 비디오의 크기이고, `x`와 `y`는 시작 좌표를 나타낸다. 예를 들어, 비디오의 가운데에서 640x480의 영역을 자르려면 다음과 같이 작성할 수 있다:

```
ffmpeg -i input.mp4 -vf crop=640:480 output.mp4
```

**3. rotate 필터**

`rotate` 필터는 비디오를 회전시킬 때 사용된다. 회전 각도는 라디안 단위로 지정되며, 예를 들어 비디오를 90도(π/2 라디안) 회전시키려면 다음과 같이 명령어를 작성한다:

```
ffmpeg -i input.mp4 -vf rotate=PI/2 output.mp4
```

회전은 수식을 사용하여 표현할 수 있으며, 시간에 따라 동적으로 회전시키는 것도 가능한다. 예를 들어, 시간에 따라 비디오를 회전시키려면 다음과 같이 할 수 있다:

```
ffmpeg -i input.mp4 -vf "rotate=t*PI/4" output.mp4
```

이 명령은 비디오가 재생될 때마다 초당 π/4 라디안씩 회전하도록 설정한다.

**4. fps 필터**

`fps` 필터는 비디오의 프레임 레이트를 변경할 때 사용된다. 예를 들어, 프레임 레이트를 30fps로 설정하려면 아래와 같이 입력한다:

```
ffmpeg -i input.mp4 -vf fps=30 output.mp4
```

**5. overlay 필터**

`overlay` 필터는 두 개의 비디오를 겹쳐서 하나의 비디오로 만들 때 사용된다. 예를 들어, 배경 비디오 위에 다른 비디오를 겹치려면 다음 명령어를 사용할 수 있다:

```
ffmpeg -i 배경.mp4 -i 겹칠영상.mp4 -filter_complex "[1][0]overlay=10:10" output.mp4
```

위 명령은 두 번째 입력 파일(겹칠 영상)을 첫 번째 입력 파일(배경 비디오) 위에 `(10,10)` 좌표로 배치한다.

#### 6. **hue 필터**

`hue` 필터는 비디오의 색조와 채도를 조정하는 필터이다. 비디오의 색상을 조정할 때 사용되며, 색조(`h`), 채도(`s`), 밝기(`b`) 등의 값을 변경할 수 있다. 예를 들어, 비디오의 색조를 90도로 변경하고, 채도를 0.5로 설정하는 명령은 다음과 같다:

```
ffmpeg -i input.mp4 -vf hue=h=90:s=0.5 output.mp4
```

이 필터는 색상 표현을 조정하여 특정 효과를 줄 수 있으며, 다양한 비디오 처리 작업에서 유용하게 사용된다.

#### 7. **fade 필터**

`fade` 필터는 비디오의 특정 구간에서 점차적으로 화면을 밝게 하거나 어둡게 전환하는 효과를 적용할 수 있다. 이는 주로 시작 부분에서 화면을 점차 밝게 하거나, 끝부분에서 화면을 어둡게 할 때 사용된다. `fade` 필터의 일반적인 형식은 다음과 같다:

```
ffmpeg -i input.mp4 -vf "fade=t=in:st=0:d=5" output.mp4
```

위 명령은 비디오의 시작 부분에서 5초 동안 점차 밝아지도록 설정한다. 반대로 비디오의 끝부분에서 어두워지게 하려면 `t=out` 옵션을 사용한다:

```
ffmpeg -i input.mp4 -vf "fade=t=out:st=55:d=5" output.mp4
```

여기서 `st=55`는 55초부터 페이드 효과를 시작하고, `d=5`는 5초 동안 페이드 아웃이 진행됨을 나타낸다.

#### 8. **lut 필터**

`lut`(Lookup Table) 필터는 비디오의 색상을 조정하는 고급 필터로, 각각의 픽셀 값을 다른 값으로 변환하는 테이블을 사용하여 다양한 색상 변환 효과를 제공한다. 예를 들어, 그레이스케일 변환을 적용하려면 다음과 같이 작성한다:

```
ffmpeg -i input.mp4 -vf "lut=y='val*0.3+u*0.59+v*0.11'" output.mp4
```

이 명령은 그레이스케일 변환을 위해 픽셀의 YUV 값을 변경하는 예이다. `lut` 필터는 색 보정 작업에서 자주 사용되며, 매우 세밀한 색상 조정이 가능한다.

#### 9. **zoompan 필터**

`zoompan` 필터는 비디오의 줌인 및 줌아웃 효과를 적용하는 필터이다. 이 필터를 사용하여 특정 구간에서 화면을 확대하거나 축소하는 동적인 효과를 만들 수 있다. 예를 들어, 다음과 같은 명령을 통해 5초간 비디오를 확대하는 효과를 적용할 수 있다:

```
ffmpeg -i input.mp4 -vf "zoompan=z='min(zoom+0.0015,1.5)':d=125" output.mp4
```

이 명령은 줌을 1.5배까지 증가시키며, `d=125`는 효과의 지속 시간을 나타낸다.

#### 10. **drawtext 필터**

`drawtext` 필터는 비디오 위에 텍스트를 삽입하는 필터로, 다양한 텍스트를 비디오 위에 표현할 수 있다. 예를 들어, 비디오의 좌측 상단에 'Hello, World!'라는 문구를 삽입하려면 다음과 같이 작성할 수 있다:

```
ffmpeg -i input.mp4 -vf "drawtext=text='Hello, World!':fontcolor=white:fontsize=24:x=10:y=10" output.mp4
```

이 명령은 비디오 좌측 상단 `(10,10)` 좌표에 흰색 폰트로 크기 24의 텍스트를 표시한다. `drawtext` 필터는 동적인 텍스트 효과를 위해 다양한 변수도 지원하며, 시간에 따라 변하는 텍스트나 다른 조건에 맞는 텍스트를 적용할 수 있다.

#### 11. **deshake 필터**

`deshake` 필터는 비디오의 흔들림을 제거하는 데 사용된다. 흔들린 영상을 안정화하여 시청할 때 불편함을 줄일 수 있다. 특히, 손으로 촬영한 비디오나 움직임이 많은 영상에서 효과적으로 사용할 수 있다. 명령어는 다음과 같다:

```
ffmpeg -i input.mp4 -vf deshake output.mp4
```

이 필터는 기본적으로 흔들림을 제거하는 기능을 제공하지만, 필요에 따라 흔들림 제거의 강도와 방향을 설정할 수 있다. 예를 들어, 수평 방향의 흔들림만 제거하려면 아래와 같이 옵션을 사용할 수 있다:

```
ffmpeg -i input.mp4 -vf "deshake=x=10" output.mp4
```

이 명령어는 수평 축에서의 흔들림만 제거하도록 설정한 예이다.

#### 12. **split 필터**

`split` 필터는 하나의 입력 비디오를 여러 개의 출력 스트림으로 분리할 때 사용된다. 이는 여러 필터를 동시에 적용하거나 다양한 변환을 한 번에 적용할 때 유용하다. `split` 필터는 단독으로 사용되기보다 다른 필터와 함께 사용되는 경우가 많다. 기본적으로 `split` 필터는 두 개의 출력을 생성하며, 예를 들어 하나의 비디오에 서로 다른 필터를 적용하는 경우에 사용된다:

```
ffmpeg -i input.mp4 -vf "split[main][copy];[main]필터명1[output1];[copy]필터명2[output2]" output.mp4
```

이 예제에서 `split`은 비디오를 두 개의 스트림으로 복사한 후, 각각 `필터명1`과 `필터명2`를 적용한다.

#### 13. **drawbox 필터**

`drawbox` 필터는 비디오 위에 사각형 박스를 그리는 데 사용된다. 이 박스는 텍스트 강조나 특정 영역을 시각적으로 구분하는 데 유용하다. 명령어 형식은 다음과 같다:

```
ffmpeg -i input.mp4 -vf "drawbox=x=100:y=100:w=200:h=150:color=red@0.5:t=5" output.mp4
```

여기서 `x`와 `y`는 박스의 시작 좌표, `w`와 `h`는 박스의 너비와 높이, `color`는 박스의 색상(빨강), `t`는 박스의 두께를 의미한다. `@0.5`는 투명도를 설정하는 것으로, 50% 투명하게 설정된 박스를 표시한다.

#### 14. **setsar 필터**

`setsar` 필터는 비디오의 SAR(Sample Aspect Ratio)를 설정하는 필터이다. SAR은 비디오의 각 픽셀의 비율을 정의하며, SAR을 변경하여 영상의 표시 비율을 조정할 수 있다. 예를 들어, SAR을 1:1로 설정하는 명령어는 다음과 같다:

```
ffmpeg -i input.mp4 -vf "setsar=1:1" output.mp4
```

SAR 값은 픽셀의 가로 세로 비율을 조정하는 데 사용되며, 잘못 설정된 SAR 값을 수정할 때 유용하다.

#### 15. **tblend 필터**

`tblend` 필터는 두 개의 비디오 프레임을 시간적으로 혼합하여 시각적인 효과를 만든다. 이 필터는 비디오의 프레임 간 전환을 부드럽게 하거나, 모션 블러 효과를 적용할 때 사용된다. 예를 들어, 두 프레임을 `multiply` 모드로 혼합하는 명령어는 다음과 같다:

```
ffmpeg -i input.mp4 -vf "tblend=all_mode=multiply" output.mp4
```

여기서 `multiply`는 두 프레임의 값을 곱하여 혼합하는 방식이다. 이 외에도 `tblend` 필터는 다양한 혼합 모드를 지원하며, 각 모드는 다른 시각적 효과를 제공한다.

#### 16. **transpose 필터**

`transpose` 필터는 비디오를 90도씩 회전시키는 필터이다. 이 필터는 주로 비디오의 방향을 수정하거나 특정 각도로 회전시킬 때 사용된다. 예를 들어, 비디오를 시계 방향으로 90도 회전하려면 다음 명령을 사용할 수 있다:

```
ffmpeg -i input.mp4 -vf "transpose=1" output.mp4
```

`transpose=1`은 시계 방향 90도 회전을 의미하며, `transpose=2`는 반시계 방향 90도 회전을 의미한다. 회전 후 필요한 경우 추가적인 회전 옵션을 적용할 수 있다.

#### 17. **vignette 필터**

`vignette` 필터는 비디오의 테두리를 어둡게 하여 중간 부분을 강조하는 효과를 제공한다. 이 필터는 영상의 테두리를 점진적으로 어둡게 하여 중앙 부분에 집중할 수 있도록 만들어 준다. 기본 사용 예시는 다음과 같다:

```
ffmpeg -i input.mp4 -vf "vignette" output.mp4
```

위 명령어는 기본적인 비네팅 효과를 적용하며, 필요에 따라 강도와 중심 위치를 설정할 수 있다. 예를 들어, 중심을 `(x=200, y=150)`으로 설정하고 강도를 조절하려면 다음과 같은 명령어를 사용할 수 있다:

```
ffmpeg -i input.mp4 -vf "vignette=x0=200:y0=150:radius=2:angle=PI/4" output.mp4
```

여기서 `x0`와 `y0`는 비네팅 효과의 중심 좌표를 의미하고, `radius`와 `angle`은 비네팅의 강도와 방향을 설정한다.

#### 18. **denoise 필터**

`denoise` 필터는 비디오의 노이즈를 제거하는 필터이다. 저조도에서 촬영된 비디오나 압축 과정에서 발생한 잡음을 줄이는 데 유용하다. 다양한 노이즈 제거 필터가 있으며, 그 중 하나는 `hqdn3d` 필터이다. 이 필터를 사용하여 노이즈를 줄이려면 다음과 같이 할 수 있다:

```
ffmpeg -i input.mp4 -vf "hqdn3d=3:3:6:6" output.mp4
```

이 명령어에서 `3:3:6:6`은 공간적 및 시간적 노이즈 제거 강도를 설정하는 값이다. `hqdn3d` 필터는 비디오 품질을 유지하면서 잡음을 효과적으로 제거한다.

#### 19. **gradfun 필터**

`gradfun` 필터는 비디오의 색상 밴딩 현상을 줄이는 데 사용된다. 색상 밴딩은 디지털 영상에서 색상 그라데이션이 부드럽지 않고 끊어지는 현상을 의미한다. 이 필터를 사용하면 그라데이션을 부드럽게 하여 색상이 자연스럽게 표현되도록 할 수 있다. 다음은 기본 사용 예이다:

```
ffmpeg -i input.mp4 -vf "gradfun" output.mp4
```

필터 강도를 조정할 수 있으며, 강도가 높을수록 색상 밴딩을 더 많이 줄일 수 있다:

```
ffmpeg -i input.mp4 -vf "gradfun=2" output.mp4
```

#### 20. **boxblur 필터**

`boxblur` 필터는 비디오의 흐림 효과를 제공하는 필터로, 영상의 특정 부분을 흐리게 처리할 수 있다. 이는 프라이버시 보호나 배경 강조 등에 사용될 수 있다. 기본적으로 전체 화면을 흐리게 하려면 다음과 같이 사용할 수 있다:

```
ffmpeg -i input.mp4 -vf "boxblur=5:5" output.mp4
```

여기서 `5:5`는 가로와 세로 방향의 블러 강도를 나타낸다. 특정 영역만 블러를 적용하고 싶다면 `crop` 필터와 함께 사용할 수 있다:

```
ffmpeg -i input.mp4 -vf "crop=640:480:0:0,boxblur=5:5" output.mp4
```

이 명령은 비디오의 `(0,0)` 좌표에서 시작하는 640x480 크기의 영역에 블러를 적용한다.

#### 21. **eq 필터**

`eq` 필터는 비디오의 밝기, 대비, 색상 등을 조정하는 필터이다. 기본적으로 이 필터를 사용하여 비디오의 전반적인 휘도나 채도를 변경할 수 있다. 다음 명령어는 대비를 높이고 밝기를 줄이는 예시이다:

```
ffmpeg -i input.mp4 -vf "eq=contrast=1.5:brightness=-0.1" output.mp4
```

여기서 `contrast`는 대비를, `brightness`는 밝기를 나타낸다. 필터는 색조나 채도도 변경할 수 있으며, 다양한 조정 작업에서 사용된다:

```
ffmpeg -i input.mp4 -vf "eq=contrast=1.2:saturation=1.5" output.mp4
```

이 명령어는 대비를 약간 높이고 채도를 강화하는 설정이다.

#### 22. **smartblur 필터**

`smartblur` 필터는 영상을 흐리게 하면서도 중요한 디테일을 보존하는 필터이다. 이 필터는 일반적인 블러 필터와 달리 엣지나 주요 피사체를 유지하면서 배경을 흐리게 만드는 데 유용하다. 기본 사용법은 다음과 같다:

```
ffmpeg -i input.mp4 -vf "smartblur=1.0:0.5:-0.8" output.mp4
```

이 명령에서 각 매개변수는 블러 강도와 방향을 제어하며, 세부적인 디테일을 조정할 수 있다.
