기본 개념

FFmpeg을 사용하여 비디오를 회전하거나 뒤집는 작업은 다양한 상황에서 유용하다. 회전은 비디오의 각도를 변경하는 것이며, 뒤집기는 화면을 상하 또는 좌우로 반전시키는 작업이다. 이를 통해 비디오의 시각적 구성을 변경하거나, 촬영 방향이 잘못된 영상을 수정할 수 있다.

FFmpeg에서 비디오를 회전하거나 뒤집기 위해서는 transposevflip/hflip 필터를 주로 사용한다.

비디오 회전

비디오 회전은 주로 transpose 필터를 사용하여 수행된다. transpose 필터는 비디오를 90도 단위로 회전시킬 수 있다. FFmpeg 명령에서 -vf 옵션을 사용하여 필터를 적용할 수 있다.

회전 종류

transpose 필터는 4가지 모드를 제공한다:

  1. transpose=0: 시계 방향으로 90도 회전
  2. transpose=1: 반시계 방향으로 90도 회전
  3. transpose=2: 상하 반전 후 시계 방향 90도 회전
  4. transpose=3: 상하 반전 후 반시계 방향 90도 회전

FFmpeg 명령어는 다음과 같다:

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

이 명령은 비디오를 반시계 방향으로 90도 회전시켜 변환한다.

회전 수학적 표현

회전 변환은 수학적으로 다음과 같이 표현된다. 비디오 프레임의 각 좌표 (x, y)를 기준으로, 회전 후 좌표 (x', y')는 다음과 같은 회전 행렬 \mathbf{R}(\theta)에 의해 결정된다:

\mathbf{R}(\theta) = \begin{bmatrix} \cos \theta & -\sin \theta \\ \sin \theta & \cos \theta \end{bmatrix}

회전된 좌표는 다음과 같이 계산된다:

\begin{bmatrix} x' \\ y' \end{bmatrix} = \mathbf{R}(\theta) \begin{bmatrix} x \\ y \end{bmatrix}

여기서 \theta는 회전 각도이다. 시계 방향으로 회전할 경우, \theta = -90^\circ, 반시계 방향으로 회전할 경우 \theta = 90^\circ가 된다.

예시 1: 시계 방향 90도 회전

시계 방향으로 90도 회전하는 경우 \theta = -90^\circ이므로, 회전 행렬은 다음과 같다:

\mathbf{R}(-90^\circ) = \begin{bmatrix} 0 & 1 \\ -1 & 0 \end{bmatrix}

예시 2: 반시계 방향 90도 회전

반시계 방향으로 90도 회전하는 경우 \theta = 90^\circ이므로, 회전 행렬은 다음과 같다:

\mathbf{R}(90^\circ) = \begin{bmatrix} 0 & -1 \\ 1 & 0 \end{bmatrix}

이 수식을 기반으로 좌표 변환이 이루어진다.

비디오 뒤집기

비디오를 상하 또는 좌우로 뒤집는 작업은 각각 vfliphflip 필터를 사용하여 수행된다.

상하 뒤집기 (Vertical Flip)

상하 뒤집기는 vflip 필터를 사용하여 수행되며, 다음과 같은 FFmpeg 명령어로 처리할 수 있다:

ffmpeg -i input.mp4 -vf "vflip" output.mp4

이 명령어는 비디오의 프레임을 수직 방향으로 뒤집습니다.

좌우 뒤집기 (Horizontal Flip)

좌우 뒤집기는 hflip 필터를 사용하여 수행되며, 명령어는 다음과 같다:

ffmpeg -i input.mp4 -vf "hflip" output.mp4

이 명령어는 비디오의 프레임을 수평 방향으로 뒤집습니다.

뒤집기 수학적 표현

뒤집기는 수학적으로 좌표의 반전을 의미한다. 상하 뒤집기는 y-좌표를, 좌우 뒤집기는 x-좌표를 반전시킨다.

상하 뒤집기

상하 뒤집기는 다음과 같이 표현된다:

\begin{bmatrix} x' \\ y' \end{bmatrix} = \begin{bmatrix} x \\ -y \end{bmatrix}

좌우 뒤집기

좌우 뒤집기는 다음과 같이 표현된다:

\begin{bmatrix} x' \\ y' \end{bmatrix} = \begin{bmatrix} -x \\ y \end{bmatrix}

이 수식을 통해 비디오의 각 프레임 내 좌표의 반전이 이루어진다.

비디오 회전 및 뒤집기의 조합

비디오 회전과 뒤집기를 조합하여 여러 가지 변환을 적용할 수 있다. 예를 들어, 비디오를 180도 회전시키기 위해서는 두 번의 90도 회전을 적용하거나, 수직 및 수평 뒤집기를 함께 사용할 수 있다.

180도 회전

FFmpeg에서는 180도 회전을 지원하는 직접적인 필터가 없기 때문에 두 가지 방법으로 구현할 수 있다. 첫 번째 방법은 transpose 필터를 두 번 적용하여 90도씩 두 번 회전하는 것이다:

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

두 번째 방법은 hflipvflip을 함께 사용하여 수평과 수직으로 뒤집는 방식이다:

ffmpeg -i input.mp4 -vf "hflip,vflip" output.mp4

이 방법으로 비디오를 180도 회전한 것과 동일한 효과를 얻을 수 있다.

복합 변환의 수학적 표현

비디오를 두 번 회전하는 것은 두 개의 회전 행렬을 곱하는 것과 같다. 예를 들어, 두 번의 90도 반시계 방향 회전은 다음과 같이 계산된다:

\mathbf{R}(90^\circ) \times \mathbf{R}(90^\circ) = \begin{bmatrix} 0 & -1 \\ 1 & 0 \end{bmatrix} \times \begin{bmatrix} 0 & -1 \\ 1 & 0 \end{bmatrix} = \begin{bmatrix} -1 & 0 \\ 0 & -1 \end{bmatrix}

이 결과는 180도 회전을 나타내는 행렬로, 좌표를 반전시킨다.

또한, hflipvflip을 동시에 적용한 경우에는 좌표 변환이 다음과 같이 이루어진다:

\begin{bmatrix} x' \\ y' \end{bmatrix} = \begin{bmatrix} -x \\ -y \end{bmatrix}

이 역시 비디오를 180도 회전한 것과 동일한 결과를 나타낸다.

비디오 필터 체인

FFmpeg에서는 여러 개의 필터를 동시에 적용할 수 있다. 이를 필터 체인이라고 하며, 비디오 회전 및 뒤집기와 같은 여러 변환을 함께 적용할 수 있다.

필터 체인 예시

예를 들어, 비디오를 반시계 방향으로 90도 회전하고, 그 후 상하로 뒤집는 작업을 동시에 수행하고 싶다면 다음과 같은 명령어를 사용할 수 있다:

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

이 명령어는 비디오를 먼저 90도 회전한 후 상하로 뒤집습니다. 필터는 순서대로 적용되며, 각 필터는 앞선 필터의 출력을 다음 필터의 입력으로 사용한다.

필터 체인 수학적 표현

필터 체인을 적용할 때는 여러 변환 행렬을 연속적으로 곱하여 결과를 계산한다. 예를 들어, 90도 회전 후 상하 뒤집기를 적용하는 것은 회전 행렬 \mathbf{R}(90^\circ)와 상하 뒤집기 행렬을 곱하는 것과 같다:

\mathbf{R}(90^\circ) \times \begin{bmatrix} 1 & 0 \\ 0 & -1 \end{bmatrix} = \begin{bmatrix} 0 & -1 \\ 1 & 0 \end{bmatrix} \times \begin{bmatrix} 1 & 0 \\ 0 & -1 \end{bmatrix} = \begin{bmatrix} 0 & 1 \\ 1 & 0 \end{bmatrix}

이 결과는 변환된 좌표에 대한 새로운 값을 나타낸다.