답변:
허, 흥미로운 일. 그래서 해결책은
ffmpeg -i 1.ts -i 2.ts -filter_complex "[0:v][1:v]overlay=x='if(lte(-w+(t)*100,w/2),-w+(t)*100,w/2)':y=0[out]" -map '[out]' -y out.mp4
이 필터 그래프는 화면의 절반에 도달 할 때까지 두 번째 사진을 왼쪽에서 오른쪽으로 이동합니다 (w / 2). 따라서이 식에서 수정해야 할 것은 w / 2입니다. 일부 정적 정지 점 (100 픽셀)에 대해서도 동일합니다.
ffmpeg -i 1.ts -i 2.ts -filter_complex "[0:v][1:v]overlay=x='if(lte(-w+(t)*100,100),-w+(t)*100,100)':y=0[out]" -map '[out]' -y out.mp4
도움이 되길 바랍니다.
if
및 lte
표현식에 의해 간단하게 할 수 min
/의 max
표현. 아래의 다른 답변을 참조하십시오. (처음에는 다른 질문을
일반적으로 슬라이드 효과의 경우 다음을 수행해야합니다.
color
source를 사용하여 이미지가 표시 될 정확한 크기와 지속 시간으로 특정 색상 (예 : 검은 색)의 배경을 만듭니다 .movie
overlay
다음은 이미지를 image.png
(크기 : 1920x1080, 클립 길이 : 15 초) 로 저장 한 예입니다 .
ffmpeg -f lavfi -i "\
color=black:d=15:s=1920x1080[background]; \
movie=image.png[overlay]; \
[background][overlay]overlay='W-n:(H-h)/2' \
" output.mp4
이미지가 멈추지 않고 오른쪽에서 왼쪽으로 미끄러집니다.
다음은 이미지가 중앙에서 멈춘 예입니다.
ffmpeg -f lavfi -i "\
color=black:d=15:s=1920x1080[background]; \
movie=image.png[overlay]; \
[background][overlay]overlay='min(W-n\,0):(H-h)/2' \
" output.mp4
주어진 시간에 오버레이의 위치는 overlay
필터 의 옵션으로 지정됩니다 . 위치는 이미지의 왼쪽 상단 모서리의 좌표로 제공되어야합니다.
위의 첫 번째 예에서 X / Y 좌표 쌍은 W-n
및입니다 (H-h)/2
.
W
배경 너비입니다 (1920)n
현재 프레임 번호입니다H
배경 높이 (1080)입니다.h
오버레이 높이입니다 (여기서는 1080이지만 다를 수 있음)따라서 프레임 0에서 이미지는 처음 부터 왼쪽에서 1920-0 = 1920 픽셀에 배치 되므로 n이 증가함에 따라 이미지가 오른쪽에서 미끄러 져 들어 갑니다.
몇 가지 팁 :
x
식을로 평가해야 0
하므로를 사용할 수 있습니다 min(W-n, 0)
. 이 경우 프레임 번호가 너비보다 큰 경우에도 이미지는 음의 x 위치로 이동하지 않지만 0에 머무 릅니다.