여러 비디오(오디오 포함)를 크로스페이드로 연결

여러 비디오(오디오 포함)를 크로스페이드로 연결

크기, 프레임 속도 등이 모두 동일한 7개의 짧은 비디오 클립이 있습니다. 오디오를 잃지 않고 2초 크로스페이드로 이들을 차례로 연결하고 싶습니다. 이전 게시물에서 가져온 다음을 사용하여 처음 두 개를 연결/크로스페이딩해 보았습니다.

ffmpeg -i *clip1.mp4 -i *clip2.mp4  \
-filter_complex "[0]fade=t=out:st=0:d=1:alpha=1,setpts=PTS-STARTPTS[va0]; \
[1]fade=t=in:st=0:d=1:alpha=1,setpts=PTS-STARTPTS[va1];  \
[va0][va1]overlay[outv];[0][1]amix[outa]" \
-map [outv] -map "[outa]" -crf 10 out.mp4

그러나 이렇게 하면 첫 번째 비디오가 즉시 페이드 아웃되는 비디오가 생성되고 두 번째 비디오와 정확히 같은 길이(40초)가 됩니다. 첫 번째 비디오 [0]의 "st=0" 때문이라고 가정합니다. 그러나 이를 "st=18"(첫 번째 비디오의 길이는 20초)로 변경하면 결과로 결합된 비디오(out.mp4)에는 여전히 첫 번째 비디오가 즉시 페이드됩니다(대신 전체 비디오의 길이는 여전히 40초에 불과합니다). 58). 그러나 첫 번째 비디오의 오디오는 이제 18초 동안 지속됩니다(그러나 이제 두 번째 비디오와 해당 오디오는 18초 동안 오버레이됩니다). 무엇을 시도해야 할지 제안해 주시나요?

답변1

크로스페이드를 사용하여 클립을 결합하려면 두 가지 사항에 주의해야 합니다. 즉, 올바른 시간과 올바른 유형의 페이드를 적용하고, 최종 어셈블리 내에서 각 비디오가 올바른 시간에 시작되도록 비디오 타임스탬프를 지연해야 합니다.

이 경우 첫 번째 비디오는 20초이고 두 번째 비디오는 40초이며 2초 크로스페이드를 원합니다. 오버레이 필터를 사용하여 크로스페이드를 실행할 때 들어오는 비디오에 페이드인만 적용하면 됩니다. 나가는 비디오에 페이드 아웃을 적용하면 휘도 저하가 발생합니다. 때로는 바람직하지만 저는 이를 피합니다.

먼저 2초 페이드를 적용합니다.~에두 번째 영상 시작 부분에

[1]format=yuva444p,fade=t=in:st=0:d=2:alpha=1,setpts=PTS-STARTPTS+18/TB[va1];

페이드는 알파 채널에만 적용되므로 비디오에는 알파 채널이 있어야 합니다. 일반적으로 비디오는 그렇지 않으므로 페이드 전에 픽셀 형식 변환 필터가 적용되어 두 번째 비디오의 픽셀 형식을 알파가 있는 형식으로 변경 a합니다 yuva444p. 유형의 페이드는 시간 과 지속 시간 에 in시작하여 적용됩니다.02s알파 채널즉, 비디오의 색상 픽셀은 영향을 받지 않습니다.

이제 2번째 영상이 늦어져야겠네요. 첫 번째 비디오의 길이는 20초이고 2초 크로스페이드가 필요하므로 두 번째 비디오는 어셈블리 내에서 18초에서 시작해야 합니다. 그래서 setpts 필터가 적용됩니다

setpts=PTS-STARTPTS+18/TB

결핵은 다음을 가리킨다.타임베이스, 스트림에 대한 타임스탬프가 저장되는 단위입니다.

오디오 크로스페이드의 경우 크로스페이드 필터가 있습니다.

[0][1]acrossfade=d=2

이는 2초의 크로스페이드를 설정합니다.

이제 두 개의 클립을 조립할 수 있습니다.

ffmpeg -i *clip1.mp4 -i *clip2.mp4  \
-filter_complex \
 "[1]format=yuva444p,fade=t=in:st=0:d=2:alpha=1,setpts=PTS-STARTPTS+18/TB[va1];  \
 [0][va1]overlay[outv];[0][1]acrossfade=d=2[outa]" \
-map [outv] -map "[outa]" -crf 10 out.mp4

관련 정보