# 비디오 화면 비율 조정

#### 1. 화면 비율 정의

비디오 화면 비율(aspect ratio)은 비디오의 가로 길이(width)와 세로 길이(height)의 비율을 나타낸다. 일반적으로 다음과 같이 정의된다.

$$
\text{Aspect Ratio} = \frac{\text{Width}}{\text{Height}}
$$

이때 가로와 세로의 단위는 픽셀(px)로 측정된다.

#### 2. 일반적인 화면 비율

비디오에서 가장 많이 사용되는 화면 비율은 다음과 같다:

* **4:3**: 옛날 텔레비전 및 일부 컴퓨터 모니터에서 사용.
* **16:9**: 현대의 텔레비전 및 대부분의 HD 동영상에서 사용.
* **21:9**: 영화나 울트라와이드 모니터에 적합한 비율.

이 비율은 영상 콘텐츠의 표현 방식에 큰 영향을 미치며, 각 비율마다 고유한 시청 경험을 제공한다.

#### 3. FFmpeg에서 화면 비율 조정

FFmpeg에서 비디오의 화면 비율을 조정할 수 있는 방법에는 몇 가지가 있다. `-aspect` 옵션을 사용하여 출력 파일의 화면 비율을 설정하거나, 비디오 필터를 사용하여 화면 비율을 변경할 수 있다.

**3.1 기본 명령어 구조**

기본적으로 FFmpeg에서 화면 비율을 조정하는 명령어는 다음과 같다:

```
ffmpeg -i input.mp4 -aspect 16:9 output.mp4
```

이 명령어는 입력 파일 `input.mp4`의 화면 비율을 16:9로 조정하여 `output.mp4`로 저장한다.

**3.2 비디오 필터 사용**

비디오 필터를 이용하여 화면 비율을 더 정밀하게 조정할 수 있다. `scale` 필터를 사용하면 특정 해상도를 설정하면서 화면 비율도 동시에 맞출 수 있다. 예를 들어, 다음과 같은 명령어를 사용할 수 있다:

```
ffmpeg -i input.mp4 -vf "scale=1280:720,setdar=16/9" output.mp4
```

위 명령어는 비디오의 해상도를 1280x720으로 조정하고, 화면 비율을 16:9로 설정한다.

#### 4. 화면 비율과 해상도

화면 비율을 조정하는 데 있어 중요한 것은 해상도이다. 해상도는 비디오의 실제 픽셀 수를 나타내며, 해상도에 따라 화면 비율이 달라질 수 있다. 일반적으로, 해상도와 화면 비율은 다음과 같은 관계를 가진다:

* 1280x720: $16:9$
* 1920x1080: $16:9$
* 1024x768: $4:3$

화면 비율과 해상도는 다음과 같은 관계로 표현된다:

$$
\mathbf{Resolution} = \begin{bmatrix} \text{Width} \ \text{Height} \end{bmatrix}
$$

$$
\text{Aspect Ratio} = \frac{\mathbf{Width}}{\mathbf{Height}}
$$

즉, 해상도를 바꾸지 않고 화면 비율만 변경하려면 비디오의 픽셀을 늘리거나 줄여야 한다.

#### 5. 화면 비율과 패딩(padding)

화면 비율을 조정할 때 해상도를 변경하지 않고 비율만 맞추려면, 화면에 빈 공간을 추가하는 방법을 사용할 수 있다. 이를 \*\*패딩(padding)\*\*이라고 하며, 이 방법을 사용하면 화면 비율이 맞지 않는 부분에 검은색 테두리를 추가하여 영상의 왜곡을 방지할 수 있다.

**5.1 패딩을 사용한 FFmpeg 명령어**

FFmpeg에서 패딩을 추가하여 화면 비율을 맞추는 방법은 `pad` 필터를 사용하는 것이다. 예를 들어, 4:3 비율의 영상을 16:9 비율로 변환하려면 다음과 같은 명령어를 사용할 수 있다:

```
ffmpeg -i input.mp4 -vf "scale=ih*16/9:ih,pad=iw:(ow/16)*9" output.mp4
```

이 명령어는 입력 영상의 높이(ih)를 기준으로 16:9 비율로 변환하고, 나머지 공간을 패딩으로 채운다.

**5.2 수식으로 표현한 패딩**

패딩을 추가하여 화면 비율을 조정할 때의 계산식은 다음과 같다. 원본 영상의 해상도를 $\mathbf{Resolution}*{\text{original}}$이라 하고, 새로운 비율을 $\mathbf{AspectRatio}*{\text{new}}$로 설정했을 때, 패딩을 추가하는 식은 다음과 같다:

$$
\mathbf{Padding} = \begin{bmatrix} \mathbf{Padding}*{\text{left/right}} \ \mathbf{Padding}*{\text{top/bottom}} \end{bmatrix}
$$

여기서, 새로운 비율에 맞추기 위해 추가되는 패딩의 크기는 영상의 가로 또는 세로 길이에 따라 달라진다. 패딩의 크기는 다음과 같이 구할 수 있다:

$$
\mathbf{Padding}*{\text{left/right}} = \frac{\mathbf{Width}*{\text{new}} - \mathbf{Width}\_{\text{original}}}{2}
$$

또는

$$
\mathbf{Padding}*{\text{top/bottom}} = \frac{\mathbf{Height}*{\text{new}} - \mathbf{Height}\_{\text{original}}}{2}
$$

이 수식에 따라 빈 공간을 채워 비율을 맞춘다.

#### 6. FFmpeg로 자동 화면 비율 조정

FFmpeg는 원본 영상의 비율을 자동으로 인식하고, 원하는 비율로 조정하는 옵션도 제공한다. 이를 사용하면 영상의 해상도는 유지하되, 비율에 맞추어 출력할 수 있다.

**6.1 자동 조정 명령어**

FFmpeg에서 자동으로 화면 비율을 맞추려면 `setdar` 필터를 사용한다. 예를 들어, 16:9 비율로 자동 조정하려면 다음과 같은 명령어를 사용한다:

```
ffmpeg -i input.mp4 -vf "setdar=16/9" output.mp4
```

이 명령어는 비디오의 해상도에 관계없이 화면 비율을 16:9로 조정한다.

**6.2 비율 자동 감지와 조정**

FFmpeg는 입력 파일의 \*\*DAR(Display Aspect Ratio)\*\*와 \*\*SAR(Sample Aspect Ratio)\*\*를 기반으로 자동으로 비율을 계산한다. 만약 사용자가 명시적으로 `-aspect`나 `setdar` 옵션을 제공하지 않는다면, FFmpeg는 영상의 해상도 정보를 사용하여 비율을 결정한다.

#### 7. 비율 조정 시 고려해야 할 사항

비디오의 화면 비율을 조정할 때 몇 가지 주의해야 할 사항이 있다. 그중 하나는 영상의 왜곡을 방지하는 것이다. 잘못된 비율로 조정할 경우, 영상의 객체가 늘어나거나 줄어드는 왜곡이 발생할 수 있다.

$$
\mathbf{Distortion} = \frac{\mathbf{AspectRatio}*{\text{new}}}{\mathbf{AspectRatio}*{\text{original}}}
$$

비율을 조정할 때는 이 왜곡을 최소화하거나 아예 발생하지 않도록 해야 한다.

#### 8. 비디오 화면 비율 조정 예시

비디오의 화면 비율을 조정하는 예시를 통해 구체적인 방법을 살펴보자. 여기서는 다양한 비율의 비디오를 16:9 비율로 변환하는 과정을 예시로 설명한다.

**8.1 4:3 비율에서 16:9 비율로 변환**

만약 4:3 비율의 비디오를 16:9 비율로 변환하려면, 비율 차이를 해결하기 위해 영상의 가로 길이를 늘리거나, 세로 길이를 줄여야 한다. 해상도가 1024x768인 4:3 비디오를 1280x720의 16:9 비율로 변환한다고 가정하자.

**8.1.1 해상도 변환 계산**

원본 해상도와 목표 해상도의 비율 차이를 계산하면 다음과 같다:

$$
\mathbf{AspectRatio}\_{\text{original}} = \frac{1024}{768} = 1.33
$$

$$
\mathbf{AspectRatio}\_{\text{target}} = \frac{1280}{720} = 1.78
$$

여기서 원본 비율과 목표 비율이 다르므로, 영상의 가로 또는 세로 길이를 조정해야 한다. 비율 차이를 맞추기 위해 `scale` 필터를 사용하여 다음과 같은 명령어를 적용할 수 있다:

```
ffmpeg -i input_4_3.mp4 -vf "scale=1280:720" output_16_9.mp4
```

이 명령어는 비디오의 가로와 세로 길이를 1280x720으로 맞추어, 비율 차이를 해결한다.

**8.1.2 패딩을 이용한 비율 변환**

해상도를 변경하지 않고 비율만 맞추려면 패딩을 추가하여 여백을 넣을 수 있다. 이를 위해 `pad` 필터를 적용한다. 예를 들어, 아래 명령어는 가로 길이를 유지하면서 상하 여백을 추가하여 16:9 비율을 맞춘다:

```
ffmpeg -i input_4_3.mp4 -vf "pad=1280:960:0:(ow-ih)/2" output_16_9_padded.mp4
```

여기서 `pad` 필터는 해상도 1280x960으로 가로 길이를 늘리고, 세로에 여백을 추가하여 비율을 맞춘다.

**8.2 21:9 비율에서 16:9 비율로 변환**

21:9 비율의 영상을 16:9 비율로 변환하는 경우, 주로 가로 길이를 줄여서 비율을 맞추게 된다. 예를 들어, 2560x1080 해상도의 21:9 비디오를 1920x1080 해상도의 16:9 비디오로 변환한다고 가정하자.

**8.2.1 해상도 변환 계산**

원본 비율과 목표 비율을 계산하면 다음과 같다:

$$
\mathbf{AspectRatio}\_{\text{original}} = \frac{2560}{1080} = 2.37
$$

$$
\mathbf{AspectRatio}\_{\text{target}} = \frac{1920}{1080} = 1.78
$$

원본 비율이 2.37인 21:9 비율을 1.78의 16:9 비율로 변환하려면, 가로 길이를 줄여야 한다. 이때 `crop` 필터를 사용하여 다음 명령어를 사용할 수 있다:

```
ffmpeg -i input_21_9.mp4 -vf "crop=1920:1080" output_16_9.mp4
```

이 명령어는 가로 길이를 줄여서 1920x1080 해상도로 비율을 맞춘다.

**8.2.2 패딩을 이용한 비율 변환**

마찬가지로, 패딩을 추가하여 비율을 맞출 수도 있다. 패딩을 추가하여 16:9 비율을 맞추는 명령어는 다음과 같다:

```
ffmpeg -i input_21_9.mp4 -vf "pad=1920:1080:(ow-iw)/2:0" output_16_9_padded.mp4
```

이 명령어는 패딩을 추가하여 가로 길이를 유지하고, 여백을 채워 16:9 비율로 조정한다.

#### 9. 고급 필터링을 이용한 비율 조정

FFmpeg는 기본적인 비율 조정 외에도 다양한 필터를 제공하여 비율을 보다 정밀하게 조정할 수 있다. `scale`, `crop`, `pad` 필터 이외에도 `setsar`(Sample Aspect Ratio)와 `setdar`(Display Aspect Ratio)를 조합하여 원하는 비율을 세밀하게 제어할 수 있다.

**9.1 Sample Aspect Ratio(SAR)**

SAR은 샘플 비율을 나타내며, 픽셀의 비율을 조정하는 데 사용된다. 이를 통해 비디오가 화면에 표시되는 방식에 영향을 미칠 수 있다. 예를 들어, SAR을 조정하여 비디오의 픽셀을 늘리거나 줄일 수 있다.

FFmpeg에서 SAR을 설정하는 명령어는 다음과 같다:

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

이 명령어는 비디오의 샘플 비율을 1:1로 설정한다.

**9.2 Display Aspect Ratio(DAR)**

DAR은 비디오가 출력 장치에 표시될 때의 화면 비율을 나타낸다. DAR을 조정함으로써 비디오의 가로 세로 비율을 맞출 수 있으며, SAR과 함께 사용되어 화면 비율을 제어할 수 있다.

FFmpeg에서 DAR을 설정하는 명령어는 다음과 같다:

```
ffmpeg -i input.mp4 -vf "setdar=16/9" output.mp4
```

이 명령어는 비디오의 출력 화면 비율을 16:9로 설정한다. SAR과 DAR의 조합은 매우 유용하며, 서로 다른 해상도의 디스플레이 장치에서도 비디오의 일관된 화면 비율을 유지할 수 있게 한다.

**9.3 SAR과 DAR 조합**

SAR과 DAR은 각각 픽셀의 비율과 출력 장치의 화면 비율을 정의하며, 다음 수식으로 비율 간의 관계를 표현할 수 있다:

$$
\mathbf{DAR} = \mathbf{SAR} \times \frac{\mathbf{Width}}{\mathbf{Height}}
$$

이 수식을 이용해 SAR과 DAR을 조정하여 원하는 비율을 얻을 수 있다. 예를 들어, SAR이 1.5이고 해상도가 1280x720인 경우, DAR은 다음과 같다:

$$
\mathbf{DAR} = 1.5 \times \frac{1280}{720} = 2.67
$$

따라서, DAR을 원하는 16:9 비율로 맞추려면 SAR을 조정해야 한다. FFmpeg 명령어로 이를 설정할 수 있다:

```
ffmpeg -i input.mp4 -vf "setsar=1/1,setdar=16/9" output.mp4
```

이 명령어는 SAR을 1:1로 설정하고, DAR을 16:9로 설정하여 비율을 맞춘다.

#### 10. 비디오의 화면 비율 유지

비디오 편집에서 화면 비율을 조정할 때 가장 중요한 점은 원본 비디오의 비율을 유지하면서 출력하려는 비율에 맞추는 것이다. 비율을 잘못 설정하면 영상이 왜곡되거나 의도한 결과를 얻지 못할 수 있다. 따라서 FFmpeg에서 제공하는 다양한 옵션과 필터를 활용해 최적의 비율을 유지하는 것이 중요하다.

**10.1 FFmpeg 화면 비율 유지 명령어**

다음은 원본 비율을 유지하면서 새로운 해상도로 비율을 맞추는 FFmpeg 명령어 예시이다:

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

이 명령어에서 `-1`은 FFmpeg가 자동으로 적절한 세로 해상도를 계산하여 비율을 유지하도록 한다. 가로 해상도를 1280으로 설정한 후, FFmpeg는 비율을 자동으로 조정하여 영상이 왜곡되지 않도록 한다.

#### 11. 비율 유지와 리샘플링

비율을 유지하면서 해상도를 변경할 때는 \*\*리샘플링(resampling)\*\*을 고려해야 한다. 리샘플링은 영상의 품질에 영향을 미치는 중요한 요소로, 비율을 유지하면서 픽셀을 재배치하여 영상을 조정한다. FFmpeg는 다양한 리샘플링 방법을 제공하며, 그중 `lanczos`, `bilinear`, `bicubic` 등이 많이 사용된다.

**11.1 리샘플링 필터 적용**

FFmpeg에서 리샘플링 필터를 사용하는 명령어는 다음과 같다:

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

이 명령어는 `lanczos` 필터를 사용하여 비디오를 1280 픽셀의 가로 길이에 맞춰 리샘플링하고, 비율을 유지한다.

**11.2 리샘플링 품질 비교**

리샘플링 방법에 따라 비디오 품질이 달라지므로, 다음의 수식을 통해 각 필터의 차이를 설명할 수 있다:

$$
\mathbf{Quality} = \sum\_{i=1}^{n} \left( \frac{1}{\mathbf{Filter\_{Type}}(i)} \right)
$$

여기서, $\mathbf{Filter\_{Type}}$은 사용된 리샘플링 필터의 유형을 나타내며, 필터에 따라 품질이 달라진다. 일반적으로 `lanczos` 필터는 고품질 리샘플링을 제공하며, `bilinear`는 속도가 빠르지만 품질이 낮을 수 있다.

#### 12. 동적 비율 조정

동영상에서 비율을 동적으로 변경해야 하는 경우가 있다. 예를 들어, 영상의 특정 부분만 비율을 조정하거나, 시간에 따라 비율을 변화시킬 수 있다. 이때 FFmpeg는 시간 기반 필터를 사용하여 이러한 동적 비율 조정을 가능하게 한다.

**12.1 시간 기반 필터 사용 예시**

시간 기반 필터를 사용하여 비디오의 시작 부분에서는 4:3 비율을 유지하고, 중간부터 16:9 비율로 변경하는 명령어는 다음과 같다:

```
ffmpeg -i input.mp4 -vf "scale=if(lt(t,10),1024:768,1280:720)" output.mp4
```

이 명령어는 10초 이내에는 1024x768의 4:3 비율을 적용하고, 10초 이후에는 1280x720의 16:9 비율을 적용한다.
