![여러 비디오(오디오 포함)를 크로스페이드로 연결](https://rvso.com/image/1568491/%EC%97%AC%EB%9F%AC%20%EB%B9%84%EB%94%94%EC%98%A4(%EC%98%A4%EB%94%94%EC%98%A4%20%ED%8F%AC%ED%95%A8)%EB%A5%BC%20%ED%81%AC%EB%A1%9C%EC%8A%A4%ED%8E%98%EC%9D%B4%EB%93%9C%EB%A1%9C%20%EC%97%B0%EA%B2%B0.png)
크기, 프레임 속도 등이 모두 동일한 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
시작하여 적용됩니다.0
2s
알파 채널즉, 비디오의 색상 픽셀은 영향을 받지 않습니다.
이제 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