ffmpeg를 사용하여 2개의 비디오 파일을 어떻게 연결합니까?

ffmpeg를 사용하여 2개의 비디오 파일을 어떻게 연결합니까?

다음 명령을 사용하여 사진에서 타임랩스 비디오를 만들었습니다.

ffmpeg -i IMG_%03d.JPG -s 1440x1080 -sameq video.MP4

그리고 그것은 훌륭하게 작동했습니다. 이제 이러한 타임랩스 비디오 중 여러 개를 결합하여 하나의 긴 비디오를 만들고 싶습니다(모든 입력 비디오의 형식은 정확히 동일함). 나는 이미 다음을 사용해 보았습니다.

cat video1.MP4 video2.MP4 > stitch.MP4

하지만 출력은 결국 video1.MP4와 동일해집니다.

저는 비디오의 매개변수를 트랜스코딩하거나 변경하고 싶지 않으며, 마치 해당 비디오가 재생목록에 있는 것처럼 엔드투엔드 연결을 원합니다.

감사해요!

답변1

최신 버전의 ffmpeg를 사용하면 concat demuxer를 사용할 수 있습니다. 다음과 같은 줄을 포함하는 inputs.txt라는 파일을 만듭니다.

file 'input1.mp4'
file 'input2.mp4'
file 'input3.mp4'
file 'input4.mp4'

Bash 쉘을 사용하면 for 루프를 사용하여 다음과 같이 파일을 생성할 수 있습니다.

rm inputs.txt
for f in input{1..4}.mp4; do echo "file '$f'" >> inputs.txt; done

그 다음에,

ffmpeg -f concat -i inputs.txt -c copy output.mp4

를 사용하므로 -c copy완전히 무손실입니다.

답변2

출력은 video1.mp4와 동일하지 않지만 비디오의 머리글/바닥글은 video1.mp4 주위에서 시작하고 끝나므로 플레이어는 video2.mp4로 이동하지 않습니다. 비디오의 비트 전송률/코덱 등이 동일하다고 가정합니다.

cat video1.MP4 video2.MP4 | ffmpeg -y -i - -genpts -vcodec copy -acodec copy stitch.MP4

코덱이 손실을 유발하는 것처럼 이것이 반드시 최선의 방법은 아니라는 점을 명심하십시오(하나의 비디오에서 모든 시간 경과를 동시에 만드는 것이 더 나을 것임).세대 손실.

답변3

ffmpeg에 대해 말씀하신 것은 알지만, 파일을 간단히 연결하기 위해 mp4box를 사용하는 행운을 누렸습니다. 여기에서 다운로드할 수 있습니다.

http://gpac.wp.mines-telecom.fr/mp4box/

명령줄 예는 다음과 같습니다.

mp4box -cat <file> -cat <file> dest.mp4

관련 정보