1. 개요

FFmpeg는 다중 트랙을 지원하는 비디오, 오디오 파일을 처리할 수 있는 강력한 기능을 제공한다. 다중 트랙이란, 하나의 미디어 파일에 여러 개의 오디오, 비디오, 자막 트랙이 포함된 경우를 말한다. 예를 들어, 하나의 비디오 파일에 서로 다른 언어의 오디오 트랙이나 자막이 포함될 수 있다. 이러한 경우 FFmpeg를 통해 각각의 트랙을 선택, 병합, 제거하는 작업이 가능한다.

2. 다중 트랙 선택

FFmpeg에서 특정 트랙을 선택하여 처리할 수 있다. 예를 들어, 두 개의 오디오 트랙이 있는 비디오 파일에서 특정 오디오 트랙만을 선택하려면 다음과 같은 명령어를 사용할 수 있다.

ffmpeg -i input.mp4 -map 0:v -map 0:a:1 -c copy output.mp4

위 명령어에서 -map 옵션을 사용하여 0번 비디오 트랙과 1번 오디오 트랙을 선택한 후 출력 파일에 복사(-c copy)한다.

2.1 트랙 인덱스

FFmpeg의 트랙 인덱스는 기본적으로 0부터 시작한다. 0:v는 첫 번째 비디오 트랙을, 0:a:1은 두 번째 오디오 트랙을 나타낸다. 0:s는 자막 트랙을 나타내며, 마찬가지로 인덱스로 다중 자막 트랙을 선택할 수 있다.

\mathbf{T}_{\text{selected}} = \begin{cases} \mathbf{V}_{0} & \text{비디오 트랙 0} \\ \mathbf{A}_{1} & \text{오디오 트랙 1} \end{cases}

3. 다중 트랙 병합

다중 트랙을 하나의 파일에 병합할 수도 있다. 예를 들어, 하나의 비디오 파일과 두 개의 오디오 트랙을 병합하는 경우 다음과 같은 명령어를 사용할 수 있다.

ffmpeg -i video.mp4 -i audio1.mp3 -i audio2.mp3 -map 0:v -map 1:a -map 2:a -c:v copy -c:a copy output.mp4

이 명령어는 video.mp4 파일과 두 개의 오디오 파일을 병합하여 각각의 트랙을 동일한 포맷으로 복사한다. 여기서 각 입력 파일의 트랙을 선택하여 -map 옵션을 사용해 병합한다.

3.1 병합 시 트랙 매핑

트랙 매핑 시 각 입력 파일의 트랙을 적절히 매핑하는 것이 중요하다. 이를 통해 출력 파일의 각 트랙을 명확히 지정할 수 있다.

4. 다중 트랙 제거

다중 트랙 중 특정 트랙을 제거하고 싶을 때는 -map 옵션을 적절히 설정하여 원하는 트랙만 출력할 수 있다. 예를 들어, 오디오 트랙을 제거하고 비디오 트랙만 남기는 경우 다음과 같이 명령어를 작성할 수 있다.

ffmpeg -i input.mp4 -map 0:v -c copy output.mp4

위 명령어에서는 비디오 트랙만 선택하여 출력 파일에 저장하고, 오디오 트랙은 포함되지 않는다.

5. 다중 트랙 재배열

여러 개의 트랙을 가진 파일에서 트랙의 순서를 변경하는 것도 가능한다. 트랙 순서를 변경하려면 -map 옵션을 적절하게 설정하여 트랙을 재배열할 수 있다.

예를 들어, 첫 번째 오디오 트랙과 두 번째 오디오 트랙의 순서를 변경하려면 다음과 같이 명령어를 작성할 수 있다.

ffmpeg -i input.mp4 -map 0:v -map 0:a:1 -map 0:a:0 -c copy output.mp4

이 명령어는 첫 번째 비디오 트랙과 두 번째 오디오 트랙, 그리고 첫 번째 오디오 트랙을 이 순서대로 출력 파일에 복사하여 저장한다.

5.1 트랙 매핑의 원리

트랙 매핑을 통해 입력 파일의 특정 트랙을 자유롭게 재배열할 수 있다. 다중 트랙의 처리에서는 입력 파일의 트랙 번호가 중요한 역할을 하며, 이 번호를 사용하여 각 트랙의 순서를 지정한다.

\mathbf{T}_{\text{rearranged}} = \begin{cases} \mathbf{V}_{0}, & \text{첫 번째 비디오 트랙} \\ \mathbf{A}_{1}, & \text{두 번째 오디오 트랙} \\ \mathbf{A}_{0}, & \text{첫 번째 오디오 트랙} \end{cases}

6. 다중 자막 트랙 처리

비디오 파일에서 여러 개의 자막 트랙을 사용할 수 있으며, FFmpeg는 이러한 자막 트랙을 선택하거나 병합할 수 있다. 자막 파일을 추가하거나 삭제하는 방법도 있다.

6.1 자막 트랙 추가

다음 명령어를 사용하여 비디오 파일에 자막을 추가할 수 있다.

ffmpeg -i video.mp4 -i subtitle.srt -map 0:v -map 0:a -map 1:s -c:v copy -c:a copy -c:s mov_text output.mp4

이 명령어는 video.mp4 파일에 subtitle.srt 파일을 자막 트랙으로 추가한다. 자막 코덱은 mov_text를 사용하여 저장되며, 다른 포맷으로 변환이 필요하다면 해당 코덱을 지정할 수 있다.

6.2 다중 자막 트랙 선택

여러 개의 자막 트랙 중 하나를 선택하거나 두 개 이상의 자막 트랙을 모두 포함하려면 -map 옵션을 활용하여 트랙을 지정할 수 있다.

ffmpeg -i input.mp4 -map 0:v -map 0:a -map 0:s:1 -c copy output.mp4

위 명령어는 두 번째 자막 트랙만 선택하여 출력 파일에 포함한다.

7. 다중 트랙에서 특정 트랙 추출

여러 개의 트랙이 포함된 파일에서 특정 트랙만을 추출할 수도 있다. 이를 통해 사용자는 필요에 따라 특정 오디오, 비디오, 자막 트랙을 별도로 저장할 수 있다.

7.1 비디오 트랙만 추출

비디오 트랙만을 추출하려면 다음 명령어를 사용할 수 있다.

ffmpeg -i input.mp4 -map 0:v -c copy video_only.mp4

이 명령어는 input.mp4 파일에서 비디오 트랙만을 추출하여 video_only.mp4로 저장한다.

7.2 오디오 트랙만 추출

오디오 트랙만 추출하려면 다음과 같이 명령어를 작성한다.

ffmpeg -i input.mp4 -map 0:a:0 -c copy audio_only.mp3

위 명령어는 첫 번째 오디오 트랙만 추출하여 audio_only.mp3로 저장한다. 이 경우 출력 파일 포맷에 따라 적절한 오디오 포맷을 지정해야 한다.

7.3 자막 트랙만 추출

자막 트랙을 추출하는 방법은 다음과 같다.

ffmpeg -i input.mp4 -map 0:s -c copy subtitle_only.srt

이 명령어는 input.mp4 파일에서 자막 트랙을 추출하여 SRT 포맷으로 저장한다.

8. 다중 트랙에서 특정 트랙 제거

다중 트랙 파일에서 특정 트랙을 제거할 수도 있다. 예를 들어, 불필요한 오디오 트랙이나 자막 트랙을 삭제할 수 있다.

8.1 오디오 트랙 제거

불필요한 오디오 트랙을 제거하고 비디오 트랙만 남기려면 다음 명령어를 사용할 수 있다.

ffmpeg -i input.mp4 -map 0:v -c copy video_only.mp4

위 명령어는 오디오 트랙을 제거한 후 비디오 트랙만 포함된 파일로 저장한다.

8.2 자막 트랙 제거

자막 트랙을 제거하려면 아래와 같은 명령어를 사용할 수 있다.

ffmpeg -i input.mp4 -map 0:v -map 0:a -c copy no_subtitle.mp4

이 명령어는 비디오와 오디오 트랙만 포함한 파일을 생성하며, 자막 트랙은 제외된다.

9. 다중 트랙 파일의 정보 확인

다중 트랙이 포함된 파일의 정보를 확인하려면 FFmpeg의 ffprobe 명령어를 사용할 수 있다. ffprobe는 파일의 각 트랙에 대한 정보를 제공하여 트랙 번호, 포맷, 코덱, 해상도 등의 세부 사항을 확인할 수 있다.

9.1 ffprobe 사용 예시

다음은 ffprobe를 사용하여 파일의 트랙 정보를 확인하는 방법이다.

ffprobe -i input.mp4

이 명령어는 input.mp4 파일에 대한 세부 정보를 출력하며, 각 트랙의 코덱 정보, 해상도, 프레임 레이트, 오디오 채널 수, 자막 언어 등을 보여준다.

9.2 트랙 정보 출력 형식

ffprobe 명령어로 얻을 수 있는 정보는 다음과 같은 형식으로 출력된다.

\mathbf{Track\ Information} = \begin{pmatrix} \text{Stream\ \#0:0} & \text{Video} & \text{h264} & \text{1920x1080} & \text{30 fps} \\ \text{Stream\ \#0:1} & \text{Audio} & \text{aac} & \text{Stereo} & \text{44.1 kHz} \\ \text{Stream\ \#0:2} & \text{Subtitle} & \text{srt} & \text{English} \end{pmatrix}

10. 다중 트랙 파일에서 특정 트랙에 메타데이터 추가

FFmpeg를 사용하여 다중 트랙 파일의 특정 트랙에 메타데이터를 추가할 수 있다. 메타데이터는 트랙 이름, 언어, 설명 등과 같은 추가 정보를 포함할 수 있다. 메타데이터를 추가하면 미디어 플레이어에서 해당 트랙에 대한 설명이나 언어가 표시된다.

10.1 메타데이터 추가 예시

특정 오디오 트랙에 메타데이터를 추가하려면 다음과 같이 명령어를 작성할 수 있다.

ffmpeg -i input.mp4 -map 0 -c copy -metadata:s:a:0 language=eng output.mp4

이 명령어는 첫 번째 오디오 트랙에 language=eng 메타데이터를 추가한다. 이를 통해 오디오 트랙의 언어를 영어로 지정할 수 있다.

10.2 메타데이터의 구조

FFmpeg에서는 -metadata:s:TYPE:INDEX KEY=VALUE 형식으로 메타데이터를 추가한다. TYPE은 트랙의 유형(예: v 비디오, a 오디오, s 자막 등)을 나타내며, INDEX는 트랙 인덱스 번호를 의미한다. KEY는 메타데이터 항목의 이름이고 VALUE는 그 항목의 값이다.

예를 들어, 특정 비디오 트랙에 제목을 추가하는 명령어는 다음과 같다.

ffmpeg -i input.mp4 -map 0 -c copy -metadata:s:v:0 title="Main Video" output.mp4

11. 다중 트랙 파일에서 특정 트랙의 코덱 변경

다중 트랙 파일에서 특정 트랙의 코덱을 변경할 수 있다. 예를 들어, 비디오 트랙을 다른 코덱으로 변환하거나 오디오 트랙을 재인코딩할 수 있다.

11.1 비디오 코덱 변경

비디오 트랙의 코덱을 h264에서 hevc로 변경하는 예시 명령어는 다음과 같다.

ffmpeg -i input.mp4 -map 0:v -c:v hevc -map 0:a -c:a copy output.mp4

이 명령어는 비디오 트랙을 hevc로 변환하고, 오디오 트랙은 변경 없이 그대로 복사하여 출력한다.

11.2 오디오 코덱 변경

오디오 트랙의 코덱을 aac에서 mp3로 변경하는 명령어는 다음과 같다.

ffmpeg -i input.mp4 -map 0:v -c:v copy -map 0:a -c:a mp3 output.mp4

이 명령어는 비디오 트랙은 그대로 유지하고, 오디오 트랙만 mp3 코덱으로 변환하여 출력한다.

12. 다중 트랙 파일의 동기화 문제 해결

다중 트랙을 처리할 때 오디오와 비디오 간의 동기화 문제가 발생할 수 있다. 이러한 문제는 파일을 병합하거나 트랙을 추가하는 동안 생길 수 있으며, FFmpeg의 다양한 옵션을 통해 동기화를 맞출 수 있다.

12.1 타임스탬프 조정

타임스탬프를 조정하여 동기화를 맞추기 위해서는 itsoffset 옵션을 사용할 수 있다. 예를 들어, 오디오 트랙을 2초 앞당기고 싶다면 다음 명령어를 사용할 수 있다.

ffmpeg -i video.mp4 -itsoffset 2 -i audio.mp3 -map 0:v -map 1:a -c:v copy -c:a copy output.mp4

이 명령어는 오디오 트랙을 2초 먼저 재생되도록 동기화하여 비디오와 일치시킨다.

12.2 async 옵션을 사용한 자동 동기화

FFmpeg의 -async 옵션을 사용하면 FFmpeg가 자동으로 오디오와 비디오의 동기화를 맞출 수 있다.

ffmpeg -i input.mp4 -async 1 output.mp4

이 명령어는 FFmpeg가 자동으로 타임스탬프를 조정하여 오디오와 비디오를 동기화한다.