ffmpeg 명령으로 여러 동영상을 연결하는 방법을 알아보자.
1. concat 필터를 이용한 방법
concat 필터를 이용해서 여러 동영상을 연결해 보자.
다음 ffmpeg 명령은 3개의 동영상을 연결하여 하나의 새로운 동영상을 생성한다.
ffmpeg -i input1.mp4 -i input2.mp4 -i input3.mp4 \ -filter_complex "[0:v][0:a][1:v][1:a][2:v][2:a]concat=n=3:v=1:a=1[v][a]" \ -map "[v]" -map "[a]" output.mp4
명령에서 중요한 몇몇 부분들을 살펴보자.
[0:v][0:a] 부분은 첫번째 입력 파일의 비디오 스트림과 오디오 스트림을 가리킨다. 이러한 부분을 세그먼트라고 한다.
[1:v][1:a] 부분은 두번째 입력 파일의 비디오 스트림과 오디오 스트림을 가리킨다.
[2:v][2:a] 부분은 세번째 입력 파일의 비디오 스트림과 오디오 스트림을 가리킨다.
concat 필터에는 3가지 옵션이 있다.
n=3
n 옵션은 세그먼트의 개수를 지정한다.
v=1
v 옵션은 출력 비디오 스트림의 개수를 지정한다. 이것은 각 세그먼트의 비디오 스트림 개수와 일치해야 한다.
a=1
a 옵션은 출력 오디오 스트림의 개수를 지정한다. 이것은 각 세그먼트의 오디오 스트림 개수와 일치해야 한다.
[v] 는 출력 비디오 스트림의 이름이다.
[a] 는 출력 오디오 스트림의 이름이다.
-map “[v]” -map “[a]” output.mp4
출력 비디오 스트림과 출력 오디오 스트림을 매핑한다. 최종 결과물은 output.mp4 파일로 저장된다.
2. cat 명령을 이용한 방법
cat 명령과 중간 (intermediate) 동영상을 이용해서 여러 동영상을 연결해 보자.
중간 동영상으로는 TS (Transport Stream) 포맷의 동영상이 주로 사용된다.
연결할 동영상 중 하나를 TS 포맷으로 변환한다.
ffmpeg -i input1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts inter1.ts
명령에서 중요한 부분들을 살펴보자.
-bsf:v h264_mp4toannexb
비트스트림(bitstream) 필터로 h264_mp4toannexb 를 지정한다.
-f mpegts inter1.ts
파일 포맷을 mpegts 로 지정한다. 최종 결과물은 inter1.ts 파일로 저장된다.
나머지 동영상들도 마찬가지 방법으로 변환한다.
ffmpeg -i input2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts inter2.ts ffmpeg -i input3.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts inter3.ts
변환된 3개의 동영상을 cat 명령으로 연결한다.
cat inter1.ts inter2.ts inter3.ts > inter-all.ts
ts 파일을 mp4 파일로 변환한다.
ffmpeg -i inter-all.ts -c:v libx264 -c:a libfdk_aac output.mp4