# 비디오에서 오디오 추출

비디오 파일에서 오디오를 추출하는 과정은 매우 간단하지만, 다양한 옵션을 제공하여 여러 상황에 맞게 설정할 수 있다. FFMPEG을 활용하여 비디오에서 오디오를 추출하는 방법을 단계별로 설명하겠다.

#### 1. 기본 명령어

비디오 파일에서 오디오를 추출하는 가장 기본적인 명령어는 다음과 같다.

```
ffmpeg -i input_video.mp4 -q:a 0 -map a output_audio.mp3
```

이 명령어는 다음과 같은 작업을 수행한다:

* `-i input_video.mp4`: 입력 비디오 파일을 지정한다.
* `-q:a 0`: 오디오 품질을 최대화한다.
* `-map a`: 오디오 스트림만 추출한다.
* `output_audio.mp3`: 추출된 오디오 파일을 mp3 형식으로 저장한다.

#### 2. 오디오 포맷 설정

오디오 포맷은 추출 시 자유롭게 선택할 수 있으며, 파일 확장자에 따라 FFMPEG이 자동으로 인식한다. 예를 들어, 추출한 오디오를 `.wav`로 저장하고 싶다면 다음과 같이 명령어를 변경할 수 있다.

```
ffmpeg -i input_video.mp4 -q:a 0 -map a output_audio.wav
```

여기서 `.wav` 확장자를 사용함으로써 무손실 오디오 파일로 추출할 수 있다.

#### 3. 오디오 비트레이트 설정

오디오 비트레이트는 오디오 파일의 품질과 크기에 영향을 미치는 중요한 요소이다. 비트레이트를 지정하여 오디오 파일의 품질을 조정할 수 있다. 예를 들어, 128 kbps로 비트레이트를 설정하려면 다음과 같이 명령어를 입력한다.

```
ffmpeg -i input_video.mp4 -b:a 128k -map a output_audio.mp3
```

* `-b:a 128k`: 오디오 비트레이트를 128 kbps로 설정한다.

이 옵션은 추출된 오디오의 크기와 품질에 직접적인 영향을 미친다.

#### 4. 특정 오디오 트랙 추출

비디오 파일에 여러 오디오 트랙이 포함된 경우, 특정 트랙을 선택하여 추출할 수 있다. `-map` 옵션을 활용하여 원하는 트랙만 추출하는 방법은 다음과 같다.

```
ffmpeg -i input_video.mkv -map 0:a:1 output_audio.mp3
```

* `-map 0:a:1`: 두 번째 오디오 트랙을 추출한다. 여기서 `0`은 파일을 나타내고, `a`는 오디오 트랙을, `1`은 두 번째 트랙을 의미한다.

#### 5. 비디오 파일에서 오디오 제거 후 저장

비디오에서 오디오를 추출한 후, 원본 비디오에서 오디오를 제거한 상태로 비디오 파일을 다시 저장할 수 있다. 다음 명령어를 사용한다.

```
ffmpeg -i input_video.mp4 -an -c:v copy output_video.mp4
```

* `-an`: 비디오 파일에서 오디오를 제거한다.
* `-c:v copy`: 비디오 코덱을 재인코딩하지 않고 원본 비디오를 그대로 복사한다.

#### 6. 특정 시간 구간에서 오디오 추출

비디오 파일에서 특정 시간 구간의 오디오만 추출할 수도 있다. 이를 위해 `-ss`와 `-to` 또는 `-t` 옵션을 사용하여 시작과 끝 시간을 설정할 수 있다.

예를 들어, 00:01:00부터 00:02:00까지의 오디오만 추출하려면 다음과 같이 명령어를 입력한다.

```
ffmpeg -i input_video.mp4 -ss 00:01:00 -to 00:02:00 -q:a 0 -map a output_audio.mp3
```

* `-ss 00:01:00`: 추출할 시작 시간을 00:01:00으로 설정한다.
* `-to 00:02:00`: 종료 시간을 00:02:00으로 설정한다.

또는, 종료 시간을 지정하지 않고, 시작 시간에서부터 1분간의 오디오만 추출하려면 `-t` 옵션을 사용한다.

```
ffmpeg -i input_video.mp4 -ss 00:01:00 -t 00:01:00 -q:a 0 -map a output_audio.mp3
```

* `-t 00:01:00`: 시작 시간에서 1분간 추출한다.

#### 7. 여러 파일에서 오디오 추출

여러 비디오 파일에서 오디오를 한 번에 추출할 수 있다. 이는 배치 처리를 통해 가능하며, 스크립트를 작성하여 다수의 파일을 처리하는 방식으로 진행된다.

예를 들어, 모든 `.mp4` 파일에서 오디오를 추출하려면 다음과 같은 스크립트를 사용할 수 있다.

**Bash 스크립트 예시 (Linux/MacOS)**

```bash
for file in *.mp4; do
  ffmpeg -i "$file" -q:a 0 -map a "${file%.mp4}.mp3"
done
```

* `*.mp4`: 현재 디렉토리의 모든 `.mp4` 파일을 대상으로 처리한다.
* `${file%.mp4}`: 파일명에서 확장자 `.mp4`를 제거하고, 그 뒤에 `.mp3` 확장자를 추가하여 저장한다.

#### 8. 여러 트랙의 오디오 추출

비디오 파일에 여러 오디오 트랙이 포함된 경우, 각 트랙을 따로 추출할 수 있다. 아래는 두 개의 오디오 트랙이 포함된 비디오 파일에서 두 트랙을 각각 추출하는 예시이다.

```
ffmpeg -i input_video.mkv -map 0:a:0 output_audio1.mp3 -map 0:a:1 output_audio2.mp3
```

* `-map 0:a:0`: 첫 번째 오디오 트랙을 추출한다.
* `-map 0:a:1`: 두 번째 오디오 트랙을 추출한다.

이와 같이 각 트랙을 원하는 파일로 저장할 수 있다.

#### 9. 여러 오디오 스트림을 하나의 파일로 병합

여러 개의 오디오 스트림을 하나의 파일로 병합할 수도 있다. 예를 들어, 두 개의 비디오 파일에서 각각 오디오를 추출한 뒤 하나의 파일로 병합하려면 다음과 같은 명령어를 사용할 수 있다.

```
ffmpeg -i input_audio1.mp3 -i input_audio2.mp3 -filter_complex "[0:a][1:a]concat=n=2:v=0:a=1[out]" -map "[out]" output_audio.mp3
```

* `-filter_complex "[0:a][1:a]concat=n=2:v=0:a=1[out]"`: 두 오디오 스트림을 병합한다. `n=2`는 두 개의 입력 파일을 병합한다는 의미이다.

#### 10. 오디오 트랙 간 동기화 문제 해결

비디오 파일에서 여러 개의 오디오 트랙을 추출할 때, 각 트랙 간의 동기화 문제가 발생할 수 있다. 이를 해결하기 위해 `-itsoffset` 옵션을 사용하여 시간 오프셋을 적용할 수 있다.

예를 들어, 두 번째 트랙에 1초의 시간차를 적용하려면 다음과 같이 명령어를 작성한다.

```
ffmpeg -i input_video.mkv -map 0:a:0 output_audio1.mp3 -itsoffset 00:00:01 -map 0:a:1 output_audio2.mp3
```

* `-itsoffset 00:00:01`: 두 번째 오디오 트랙에 1초의 시간 오프셋을 적용한다.

이를 통해 두 트랙 간의 동기화 문제를 해결할 수 있다.
