ffmpeg에서 비디오 전체에 걸쳐 (오버레이된) 이미지를 이동하여 자르는 방법은 무엇입니까?

ffmpeg에서 비디오 전체에 걸쳐 (오버레이된) 이미지를 이동하여 자르는 방법은 무엇입니까?

이미지를 이동하면서 크롭하고 싶습니다. 변환 효과를 내기 위해서는 자르기가 시간에 따라 움직여야 합니다. 나는 다음 명령을 사용해 보았습니다.

   ffmpeg -y -i video.mp4 -filter_complex "movie=filename=image.jpg:loop=1[pip:v];[pip:v]trim=start=0.0:duration=5,setpts=PTS-STARTPTS+0/TB[pip:v];[pip:v]scale='if(gte(ih,iw),384,-1):if(gte(ih,iw),-1,216)',crop=384:216:exact=1[pip:v];[pip:v]scale=iw*(1.3):ih*(1.3)[pip:v];[pip:v]crop=384:216:-(in_w-out_w)*(t-(5))/5:0[pip:v];[0:v][pip:v]overlay=main_w-overlay_w-33.333332:main_h-overlay_h-33.333332:enable='between(t,0,0+5)'[outv]" -map [outv] -preset ultrafast -r 29.97 output.mp4

그러나 작물은 고정되어 있습니다. 크롭 타임스탬프가 이미지라서 작동하지 않는 것 같아요. 해결책을 찾을 수 없습니다. 도와주실 수 있나요?

여기에 이미지 설명을 입력하세요

답변1

필터를 사용하는 대신 두 번째 입력으로 movie추가 하고 프레임 속도 설정을 위해 추가할 수 있습니다.image.jpg-r

ffmpeg -y -i video.mp4 -r 29.97 -loop 1 -i image.jpg...

의 프레임 속도(반복 속도)를 정의 image.jpg하고 타임스탬프 문제를 해결합니다.


업데이트된 명령줄:

ffmpeg -y -i video.mp4 -r 29.97 -loop 1 -i image.jpg -filter_complex "[1:v]trim=start=0.0:duration=5,setpts=PTS-STARTPTS+0/TB[pip:v];[pip:v]scale='if(gte(ih,iw),384,-1):if(gte(ih,iw),-1,216)',crop=384:216:exact=1[pip:v];[pip:v]scale=iw*(1.3):ih*(1.3)[pip:v];[pip:v]crop=384:216:-(in_w-out_w)*(t-(5))/5:0[pip:v];[0:v][pip:v]overlay=main_w-overlay_w-33.333332:main_h-overlay_h-33.333332:enable='between(t,0,0+5)':format=yuv444[outv]" -map [outv] -preset ultrafast -r 29.97 output.mp4

관련 정보