# 오디오 필터 적용

FFmpeg에서 오디오 필터는 입력된 오디오 데이터를 변환, 수정, 또는 처리하기 위해 사용된다. 오디오 필터를 적용하여 다양한 작업을 수행할 수 있으며, FFmpeg는 다양한 기본 제공 오디오 필터와 외부 플러그인을 지원한다.

#### 1. 기본 구조

FFmpeg에서 오디오 필터를 적용하려면 `-af` 또는 `-filter:a` 옵션을 사용한다. 기본 명령어 구조는 다음과 같다.

```
ffmpeg -i input_file -af filter_name output_file
```

여기서 `filter_name`은 적용하고자 하는 오디오 필터의 이름이며, 필요에 따라 추가적인 파라미터를 지정할 수 있다.

#### 2. 오디오 필터의 종류

FFmpeg에서 사용 가능한 주요 오디오 필터는 다음과 같다.

* **volume**: 오디오 볼륨 조정
* **pan**: 오디오 채널 재배치
* **equalizer**: 주파수 대역별 오디오 볼륨 조정
* **atempo**: 오디오 재생 속도 조정
* **aecho**: 에코 효과 적용
* **alimiter**: 오디오 볼륨 제한

각 필터의 사용법을 더 자세히 살펴보겠다.

#### 3. Volume 필터

`volume` 필터는 오디오의 볼륨을 조정하는 필터이다. 볼륨을 조정할 때 고정된 비율이나 수학적 표현으로 조정할 수 있다.

볼륨 조정의 기본 명령어 구조는 다음과 같다.

```
ffmpeg -i input_file -af "volume=2.0" output_file
```

이 명령어는 볼륨을 2배로 증가시킨다.

**Volume 조정 수식**

볼륨 조정은 단순한 비례 연산이다. 입력 오디오의 샘플 값 $\mathbf{x}$를 볼륨 비율 $v$로 곱하여 출력 값을 얻는다.

$$
\mathbf{y} = v \mathbf{x}
$$

여기서:

* $\mathbf{x}$: 입력 오디오 샘플 (행렬)
* $v$: 볼륨 비율 (스칼라)
* $\mathbf{y}$: 출력 오디오 샘플 (행렬)

#### 4. Pan 필터

`pan` 필터는 오디오 채널을 재배치하는 필터이다. 여러 채널의 오디오를 특정 위치로 이동시키거나 특정 채널만 추출할 수 있다.

예를 들어, 스테레오 파일에서 왼쪽 채널을 오른쪽 채널로 복사하려면 다음과 같이 명령어를 사용할 수 있다.

```
ffmpeg -i input_file -af "pan=stereo|c0=c0|c1=c0" output_file
```

이 명령어는 왼쪽 채널을 복사하여 두 채널 모두 왼쪽 채널의 소리가 나게 만든다.

**Pan 필터 수식**

채널 재배치는 일반적으로 채널 행렬과 계수 행렬의 곱셈으로 표현된다. 예를 들어, 2채널 스테레오 오디오에서 입력 채널 $\mathbf{x}$와 계수 행렬 $\mathbf{A}$를 곱하여 출력 채널 $\mathbf{y}$를 얻는다.

$$
\mathbf{y} = \mathbf{A} \mathbf{x}
$$

여기서:

* $\mathbf{x}$: 입력 채널 벡터 (2×1)
* $\mathbf{A}$: 계수 행렬 (2×2)
* $\mathbf{y}$: 출력 채널 벡터 (2×1)

#### 5. Equalizer 필터

`equalizer` 필터는 주파수 대역별로 볼륨을 조정할 수 있는 필터이다. 각 대역에 대해 중앙 주파수, 대역폭, 그리고 증폭 또는 감쇠 값을 설정할 수 있다.

기본적인 명령어는 다음과 같다.

```
ffmpeg -i input_file -af "equalizer=f=1000:t=q:w=1:g=5" output_file
```

이 명령어는 1000Hz 주파수에서 볼륨을 5dB만큼 증가시킨다.

**Equalizer 수식**

이퀄라이저는 주파수 응답을 조절하는 필터이므로, 입력 신호 $\mathbf{x}(t)$에 주파수 영역에서 필터 함수 $\mathbf{H}(f)$를 적용하여 출력 신호 $\mathbf{y}(t)$를 얻는다.

$$
\mathbf{Y}(f) = \mathbf{H}(f) \mathbf{X}(f)
$$

여기서:

* $\mathbf{X}(f)$: 입력 신호의 주파수 도메인 표현
* $\mathbf{H}(f)$: 필터 함수 (주파수 대역별 증폭/감쇠)
* $\mathbf{Y}(f)$: 출력 신호의 주파수 도메인 표현

#### 6. Atempo 필터

`atempo` 필터는 오디오 재생 속도를 조정하는 필터이다. 속도를 변경하더라도 피치(pitch)는 변하지 않게 처리된다. 속도를 1.5배 빠르게 하려면 다음 명령어를 사용한다.

```
ffmpeg -i input_file -af "atempo=1.5" output_file
```

**속도 조정 수식**

오디오 속도 조정은 시간 축의 스케일링을 의미한다. 시간 축을 $s$로 스케일링하면, 출력 오디오 $\mathbf{y}(t)$는 입력 오디오 $\mathbf{x}(t)$와 다음과 같은 관계를 가진다.

$$
\mathbf{y}(t) = \mathbf{x}(t/s)
$$

여기서:

* $\mathbf{x}(t)$: 입력 오디오 신호 (시간 도메인)
* $\mathbf{y}(t)$: 출력 오디오 신호 (시간 도메인)
* $s$: 속도 조정 비율 (스칼라)

#### 7. Aecho 필터

`aecho` 필터는 오디오에 에코 효과를 적용하는 필터이다. 에코의 딜레이 시간과 강도를 설정할 수 있으며, 반복되는 에코의 감쇠를 설정할 수 있다. 기본적인 명령어는 다음과 같다.

```
ffmpeg -i input_file -af "aecho=0.8:0.9:1000:0.3" output_file
```

이 명령어는 에코의 딜레이 시간을 1000ms로 설정하고, 감쇠를 0.3으로 지정하여 에코를 적용한다.

**에코 효과 수식**

에코 효과는 오디오 신호의 시간 지연과 감쇠를 기반으로 한다. 입력 신호 $\mathbf{x}(t)$가 있을 때, 출력 신호 $\mathbf{y}(t)$는 지연된 입력 신호와 감쇠 계수를 이용하여 계산된다.

$$
\mathbf{y}(t) = \mathbf{x}(t) + g \cdot \mathbf{x}(t - \tau)
$$

여기서:

* $\mathbf{x}(t)$: 입력 오디오 신호 (시간 도메인)
* $\mathbf{y}(t)$: 출력 오디오 신호 (시간 도메인)
* $g$: 감쇠 계수 (스칼라)
* $\tau$: 지연 시간 (스칼라)

#### 8. Alimiter 필터

`alimiter` 필터는 오디오 신호의 볼륨을 일정한 값으로 제한하는 필터이다. 이 필터는 오디오 클리핑을 방지하고, 출력 신호가 설정된 최대 볼륨을 초과하지 않도록 한다.

예를 들어, 최대 출력 볼륨을 0.8로 제한하려면 다음과 같이 명령어를 사용한다.

```
ffmpeg -i input_file -af "alimiter=limit=0.8" output_file
```

**볼륨 제한 수식**

볼륨 제한은 신호의 최대 값이 설정된 한계를 넘지 않도록 신호를 클리핑하는 과정이다. 입력 신호 $\mathbf{x}(t)$에 대해 출력 신호 $\mathbf{y}(t)$는 다음과 같이 계산된다.

$$
\mathbf{y}(t) = \begin{cases} \mathbf{x}(t) & \text{if } \mathbf{x}(t) \leq L \ L & \text{if } \mathbf{x}(t) > L \end{cases}
$$

여기서:

* $\mathbf{x}(t)$: 입력 오디오 신호 (시간 도메인)
* $\mathbf{y}(t)$: 출력 오디오 신호 (시간 도메인)
* $L$: 볼륨 제한 값 (스칼라)

#### 9. 실전 예제: 여러 필터 적용

여러 오디오 필터를 한 번에 적용할 수 있으며, 필터들은 `,`로 구분하여 순차적으로 적용된다. 예를 들어, 볼륨을 두 배로 증가시키고 에코 효과를 적용한 후, 속도를 1.25배로 변경하려면 다음과 같이 명령어를 작성할 수 있다.

```
ffmpeg -i input_file -af "volume=2.0,aecho=0.8:0.9:1000:0.3,atempo=1.25" output_file
```

이 명령어는 다음 순서로 필터를 적용한다.

1. 볼륨을 2배로 증가
2. 에코 적용
3. 재생 속도 1.25배로 조정

필터는 입력된 순서대로 적용되므로, 결과물은 순차적으로 필터가 적용된 신호이다.

#### 10. 파라미터 설정의 중요성

오디오 필터 적용 시 각 필터에 전달되는 파라미터는 최종 오디오 품질에 큰 영향을 미친다. 예를 들어, 너무 큰 볼륨 증가는 왜곡을 초래할 수 있으며, 너무 짧은 딜레이 시간은 자연스러운 에코 효과를 방해할 수 있다. 따라서 필터의 파라미터는 테스트와 조정을 통해 최적의 결과를 얻는 것이 중요하다.
