다른 코덱을 사용 trim
하여 concat
– 소스 파일 사용
이를 위해 개별 파일의 해상도가 동일하고 프레임 레이트 및 채도 서브 샘플링 등이 동일해야합니다. 이렇게하면 연결 중에 오류나 글리치가 발생하지 않습니다.
trim
및 concat
필터를 사용하여 파일을 분할하지 않고 한 번에 모든 작업을 수행 할 수 있습니다 .
ffmpeg -i edv_g24.mp4 -i short-video.mp4 -filter_complex "\
[0:v]trim=0:10,setpts=PTS-STARTPTS[v0]; \
[1:v]trim=0:5,setpts=PTS-STARTPTS[v1]; \
[0:v]trim=15:30,setpts=PTS-STARTPTS[v2]; \
[v0][v1][v2]concat=n=3:v=1:a=0[out]" \
-map "[out]" output.mp4
여기서는 나중에 연결하려는 trim
입력 비디오 스트림 ( 0:v
, 1:v
) 의 개별 부분을 지정하는 데 사용됩니다 . 이 부분은를 v0
통해 이름이 지정 됩니다 v2
. ( setpts
필터는 이러한 개별 부품의 타임 스탬프를 0으로 재설정하며 이는 연결에 필요합니다). 나중에 우리는 세 부분을 연결합니다.
특정 타임 스탬프에서 끝까지 트리밍 trim=start=15
하려면 범위를 지정하는 대신 사용 하십시오.
파일에 오디오가있는 경우 해당 스트림을 개별적으로 트리밍해야합니다.
ffmpeg -i edv_g24_2.mp4 -i short-video.mp4 -filter_complex "\
[0:v]trim=0:10,setpts=PTS-STARTPTS[v0]; \
[0:a]atrim=0:10,asetpts=PTS-STARTPTS[a0]; \
[1:v]trim=0:5,setpts=PTS-STARTPTS[v1]; \
[1:a]atrim=0:5,asetpts=PTS-STARTPTS[v1]; \
[0:v]trim=15:30,setpts=PTS-STARTPTS[v2]; \
[0:a]atrim=15:30,asetpts=PTS-STARTPTS[a2]; \
[v0][a0][v1][a1][v2][a2]concat=n=3:v=1:a=1[outv][outa]" \
-map "[outv]" -map "[outa]" output.mp4
이 경우 비디오 및 오디오가 다시 인코딩됩니다. 적절한 출력 품질 대상을 지정하십시오 (예 : -crf
x264, x265 또는 libvpx-vp9). VP9 또는 H.264 와 같은 FFmpeg Wiki에서 이에 대한 자세한 내용을 읽을 수 있습니다 .
개별 세그먼트 사용
클립을 분리하고 나중에 다시 조립하려면 다음을 수행하십시오.
ffmpeg -i edv_g24.mp4 -ss 0 -to 10 -c copy part1.mp4
ffmpeg -i edv_g24.mp4 -ss 10 -to 15 -c copy part2.mp4
ffmpeg -i edv_g24.mp4 -ss 15 -c copy part3.mp4
ffmpeg -i part1.mp4 -i short-video.mp4 -i part3.mp4 -filter_complex \
"[0:v][1:v][2:v]concat=n=3:v=1:a=0[outv]" \
-map "[outv]" -t 30 output.mp4
파일에 오디오가있는 경우 위와 동일한 방법을 사용하십시오.
ffmpeg -i part1.mp4 -i short-video.mp4 -i part3.mp4 -filter_complex \
"[0:v][0:a][1:v][1:a][2:v][2:a]concat=n=3:v=1:a=1[outv][outa]" \
-map "[outv]" -map "[outa]" -t 30 output.mp4
비디오 스트림이 다시 인코딩됩니다. 좀 더 간단하지만 위의 방법과 동일해야합니다.
concat
디 먹서 사용
원칙적으로 concat demuxer를 사용하여 비트 스트림을 다시 인코딩하지 않고 연결하려고 시도 할 수 있습니다. 이라는 파일 concat.txt
을 만들고 다음 항목을 추가하십시오 (위에서 만든 비디오 클립에 해당).
file 'part1.mp4'
file 'short-video.mp4'
file 'part3.mp4'
그런 다음이 개별 파일을 연결하십시오.
ffmpeg -f concat -i concat.txt -c copy output.avi
그러나 클립의 코덱, 해상도, 프레임 속도 등이 같아야하므로 모든 종류의 이기종 소스에서 작동하지 않습니다.
concat
프로토콜 사용
위와 concat
같은 종류의 제약 조건 (동일한 코덱, 해상도 등)으로 프로토콜을 사용하여 위의 파일 수준 연결을 수행 할 수 있습니다 .
ffmpeg -i "concat:part1.avi|part2.avi|part3.avi" -c copy output.mp4
연결에 대한 자세한 내용은 해당 FFmpeg Wiki 페이지를 참조하십시오 .