FFmpeg에서 입력 파일을 처리하는 방식은 매우 유연하며 다양한 형식의 파일을 지원한다. 입력 파일을 지정할 때는 주로 명령어에 -i 옵션을 사용하여 파일 경로를 입력한다. 이 옵션을 통해 비디오, 오디오, 이미지 시퀀스 등 다양한 형식의 입력 파일을 처리할 수 있다. 이제 입력 파일 처리에 대한 세부적인 내용을 살펴보겠다.

1. 기본 입력 파일 구조

입력 파일을 지정하는 기본 구조는 다음과 같다:

ffmpeg -i input_file [output_options] output_file

여기서 input_file은 FFmpeg이 처리할 입력 파일을 의미한다. 입력 파일은 로컬에 저장된 파일일 수도 있고, 네트워크 스트림, HTTP, RTMP, RTP, 또는 다른 스트리밍 프로토콜을 통해 전달되는 데이터일 수도 있다.

2. 여러 개의 입력 파일 처리

FFmpeg는 한 번의 명령으로 여러 개의 입력 파일을 처리할 수 있다. 각 입력 파일마다 -i 옵션을 사용하여 여러 파일을 동시에 지정할 수 있다. 예를 들어, 두 개의 입력 파일을 처리하는 구조는 다음과 같다:

ffmpeg -i input1.mp4 -i input2.mp4 [output_options] output_file

이 경우, 두 개의 비디오를 하나의 파일로 합치거나 병합하는 등의 작업이 가능한다. 여러 입력 파일을 처리할 때에는 각 입력 파일에 대한 정보가 명확히 정의되어야 한다.

3. 이미지 시퀀스 입력

FFmpeg는 연속된 이미지 파일을 하나의 비디오 파일로 변환할 수 있다. 이미지 시퀀스를 입력으로 사용할 때에는 이미지 파일이 일관된 파일명 형식을 가져야 한다. 예를 들어, image_%03d.png와 같이 정의하면, image_001.png, image_002.png 등의 파일을 FFmpeg이 자동으로 읽어들이다.

ffmpeg -i image_%03d.png -r 30 output.mp4

여기서 -r 30은 초당 30 프레임의 비디오 파일로 변환하는 것을 의미한다.

4. 네트워크 스트림 입력

FFmpeg는 네트워크 스트림을 입력으로 받을 수 있다. HTTP, RTSP, RTP와 같은 프로토콜을 통해 데이터를 스트리밍하는 경우, 이를 입력으로 지정할 수 있다. 예를 들어, HTTP 스트림을 입력으로 받는 경우는 다음과 같다:

ffmpeg -i http://example.com/stream.m3u8 -c copy output.mp4

이 경우, 스트림을 변환하지 않고 그대로 복사(-c copy)하여 저장하는 방법을 사용한다.

5. 다양한 입력 형식 지원

FFmpeg는 다양한 형식의 입력 파일을 지원한다. 오디오, 비디오, 이미지 등의 파일을 모두 입력으로 사용할 수 있으며, 다음과 같은 대표적인 파일 형식이 있다:

FFmpeg는 이러한 다양한 형식을 자동으로 인식하고 적절한 코덱과 설정을 적용한다.

6. 시간대 선택을 통한 입력 파일 처리

FFmpeg는 입력 파일에서 특정 시간대만을 선택하여 처리할 수 있다. 이를 위해 -ss-t 옵션을 사용할 수 있다. -ss는 입력 파일에서 시작할 시간을 지정하며, -t는 선택한 구간의 길이를 설정한다. 예를 들어, 10초부터 시작하여 20초간의 비디오를 처리하는 명령어는 다음과 같다:

ffmpeg -ss 00:00:10 -t 00:00:20 -i input.mp4 output.mp4

이 명령은 10초부터 20초 구간의 비디오만 추출하여 output.mp4에 저장한다.

7. 특정 오디오 트랙 또는 비디오 스트림 선택

입력 파일에 여러 개의 오디오 트랙 또는 비디오 스트림이 있을 경우, 특정 트랙이나 스트림만을 선택하여 처리할 수 있다. FFmpeg에서 -map 옵션을 사용하여 원하는 스트림을 선택할 수 있다. 기본적으로 FFmpeg는 첫 번째 비디오 스트림과 첫 번째 오디오 스트림을 처리하지만, -map 옵션을 사용하면 보다 세밀하게 스트림을 선택할 수 있다.

예를 들어, 두 번째 비디오 스트림과 첫 번째 오디오 스트림을 선택하는 명령어는 다음과 같다:

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

여기서 0:v:1은 첫 번째 입력 파일의 두 번째 비디오 스트림을 의미하고, 0:a:0은 첫 번째 오디오 스트림을 의미한다.

8. 입력 파일의 시간대 설정 및 동기화

FFmpeg에서는 입력 파일의 시작 시간을 -itsoffset 옵션으로 조정할 수 있다. 예를 들어, 두 개의 입력 파일을 병합할 때, 두 번째 입력 파일이 첫 번째 입력 파일보다 5초 후에 시작되도록 설정하려면 다음과 같이 명령어를 사용할 수 있다:

ffmpeg -i input1.mp4 -itsoffset 5 -i input2.mp4 -c copy output.mp4

이 명령은 두 번째 입력 파일이 첫 번째 파일보다 5초 후에 시작되도록 하여 병합한다.

9. 입력 파일의 비트레이트 및 샘플레이트 설정

FFmpeg는 입력 파일의 비트레이트와 샘플레이트를 처리하는 옵션을 제공한다. 오디오 파일의 경우 -ar 옵션으로 샘플레이트를 설정할 수 있으며, 비디오 파일의 경우 -b:v 옵션으로 비트레이트를 설정할 수 있다.

예를 들어, 44100Hz 샘플레이트의 오디오 파일을 처리하려면 다음과 같이 명령어를 사용할 수 있다:

ffmpeg -i input.mp3 -ar 44100 output.wav

비디오 파일의 경우, 1000k 비트레이트로 변환하는 명령은 다음과 같다:

ffmpeg -i input.mp4 -b:v 1000k output.mp4

10. 입력 파일의 해상도 및 프레임 레이트 조정

FFmpeg는 입력 파일의 해상도와 프레임 레이트를 조정할 수 있는 옵션을 제공한다. 해상도를 조정하기 위해 -s 옵션을 사용하며, 프레임 레이트를 조정하기 위해 -r 옵션을 사용할 수 있다.

예를 들어, 해상도를 1280x720으로 변경하고 프레임 레이트를 30fps로 설정하는 명령어는 다음과 같다:

ffmpeg -i input.mp4 -s 1280x720 -r 30 output.mp4

이 명령은 입력 파일을 처리하여 해상도를 1280x720으로 조정하고 30fps로 출력 파일을 생성한다.

11. 입력 파일에서 특정 채널 선택

입력 파일에 여러 오디오 채널이 있는 경우, 특정 채널만 선택하여 처리할 수 있다. FFmpeg는 -map_channel 옵션을 사용하여 특정 채널을 선택할 수 있다. 예를 들어, 입력 파일이 스테레오 오디오(왼쪽과 오른쪽 채널)를 포함하고 있을 때, 왼쪽 채널만을 선택하여 모노 파일로 변환하는 명령은 다음과 같다:

ffmpeg -i input.mp3 -map_channel 0.0.0 output_left.wav

여기서 0.0.0은 첫 번째 입력 파일의 첫 번째 오디오 스트림(왼쪽 채널)을 의미한다.

12. 입력 파일에서 메타데이터 처리

FFmpeg는 입력 파일의 메타데이터를 읽고 이를 처리할 수 있다. 메타데이터는 제목, 작곡가, 트랙 번호 등 다양한 정보를 포함할 수 있으며, -metadata 옵션을 사용하여 메타데이터를 추가하거나 수정할 수 있다.

예를 들어, 입력 파일에 제목을 추가하는 명령은 다음과 같다:

ffmpeg -i input.mp4 -metadata title="My Video" output.mp4

이 명령은 입력 파일에 'My Video'라는 제목을 추가하여 새로운 파일로 저장한다.

13. 비디오 및 오디오 스트림을 분리

입력 파일에서 비디오와 오디오 스트림을 별도로 분리하여 처리할 수 있다. 이 경우 -vn(비디오 없음) 또는 -an(오디오 없음) 옵션을 사용하여 특정 스트림을 제거할 수 있다.

예를 들어, 입력 파일에서 비디오 스트림만 추출하여 출력 파일로 저장하는 명령은 다음과 같다:

ffmpeg -i input.mp4 -an output_video.mp4

반대로, 오디오 스트림만 추출하는 명령은 다음과 같다:

ffmpeg -i input.mp4 -vn output_audio.mp3

14. 비디오 또는 오디오 스트림 변환 없이 입력 처리

때때로 입력 파일을 변환하지 않고 스트림을 그대로 복사하여 처리하고자 할 때 -c copy 옵션을 사용할 수 있다. 이 옵션은 입력 스트림을 변환하지 않고 그대로 복사하여 출력 파일로 저장한다.

ffmpeg -i input.mp4 -c copy output.mp4

이 명령은 변환 과정 없이 입력 파일을 그대로 복사하여 처리한다. 스트리밍 또는 동일한 코덱으로 파일을 처리할 때 유용한 옵션이다.

15. 입력 파일의 정보 확인

입력 파일의 세부 정보를 확인하고 싶을 때, FFmpeg는 -i 옵션을 사용하여 파일 정보를 출력할 수 있다. 이 명령은 입력 파일의 코덱, 해상도, 프레임 레이트, 오디오 형식 등을 보여준다.

ffmpeg -i input.mp4

이 명령은 입력 파일의 비디오 및 오디오 스트림 정보를 출력하는데 유용하다. 이 정보를 바탕으로 파일을 처리하기 전, 필요한 설정을 결정할 수 있다.

16. 입력 파일의 시간 범위 제한

FFmpeg는 입력 파일의 처리 시간을 제한하여 일정 구간만 처리할 수 있다. -t 옵션은 입력 파일을 처리할 때 제한할 시간을 설정하는 데 사용된다.

ffmpeg -i input.mp4 -t 00:01:00 output.mp4

이 명령은 입력 파일의 첫 1분만을 처리하여 출력 파일로 저장한다. -t 옵션은 짧은 구간만 처리하고자 할 때 유용하게 사용된다.

17. 입력 파일의 특정 프레임 추출

FFmpeg는 입력 파일에서 특정 시간대의 프레임을 추출할 수 있다. -ss 옵션을 사용하여 특정 시간대의 프레임을 지정하고, 이미지 파일로 추출할 수 있다. 예를 들어, 비디오 파일의 30초 지점에서 프레임을 추출하려면 다음과 같은 명령어를 사용할 수 있다:

ffmpeg -ss 00:00:30 -i input.mp4 -frames:v 1 output.png

여기서 -frames:v 1은 한 개의 프레임만 추출하겠다는 의미이다. 이 명령은 30초 지점에서 프레임을 추출하여 이미지로 저장한다.

18. 이미지 시퀀스에서 비디오 생성

FFmpeg는 여러 이미지 파일을 입력으로 받아 비디오 파일을 생성할 수 있다. 이미지 파일이 연속적으로 이름이 지정되어 있을 때, 이를 비디오로 변환할 수 있다. 예를 들어, image_001.png, image_002.png 등의 이미지 파일을 입력으로 받아 비디오를 생성하는 방법은 다음과 같다:

ffmpeg -i image_%03d.png -r 30 output.mp4

여기서 %03d는 세 자리 숫자로 된 이미지 파일명을 의미하며, -r 30은 초당 30 프레임으로 비디오를 생성하는 것을 나타낸다.

19. 오디오와 비디오를 함께 처리

FFmpeg는 비디오 파일과 오디오 파일을 각각 입력으로 받아 하나의 파일로 병합할 수 있다. 두 파일을 각각 입력으로 받아 비디오와 오디오를 하나의 출력 파일로 저장하는 예시는 다음과 같다:

ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac output.mp4

이 명령은 비디오와 오디오를 변환하여 output.mp4 파일에 병합한다. 비디오 스트림은 변환하지 않고 그대로 복사(-c:v copy), 오디오 스트림은 AAC 코덱으로 변환(-c:a aac)하여 저장된다.

20. 다양한 입력 포맷 및 프로토콜 지원

FFmpeg는 다양한 입력 포맷과 프로토콜을 지원하며, 이를 통해 파일 변환뿐 아니라 실시간 스트리밍 데이터도 처리할 수 있다. 주요 입력 포맷 및 프로토콜에는 다음과 같은 것들이 포함된다:

이러한 다양한 입력 포맷과 프로토콜을 지원함으로써 FFmpeg는 매우 유연한 파일 처리 도구로 활용될 수 있다.

21. 입출력 파일 포맷 자동 감지

FFmpeg는 입력 파일과 출력 파일의 확장자를 자동으로 인식하고, 적절한 코덱 및 포맷을 설정한다. 별도로 포맷을 지정하지 않으면, 입력 파일의 확장자와 포맷에 따라 자동으로 코덱이 설정된다. 예를 들어, .mp4 확장자를 사용하면 자동으로 MP4 컨테이너와 관련된 코덱을 사용하여 파일을 처리한다.

ffmpeg -i input.avi output.mp4

이 명령은 AVI 파일을 MP4 파일로 자동 변환한다. FFmpeg가 자동으로 입력 및 출력 파일의 포맷을 감지하여 적절한 코덱을 선택하는 방식이다.