我是ffmpeg的新手。我正在使用图像上的淡入/淡出过渡来进行缩放以使视频使用this脚本,但这是用于4个图像的,并且我只希望用于单个图像,因此我尝试了以下命令:
ffmpeg -y -loop 1 -i 1.jpg -filter_complex "\
[0:v]setpts=PTS-STARTPTS,scale=w='if(gte(iw/ih,1280/720),-1,1280)':h='if(gte(iw/ih,1280/720),720,-1)',crop=1280:720,setsar=sar=1/1,format=rgba,split=2[stream1out1][stream1out2];\
[stream1out1]trim=duration=1,select=lte(n\,30),split=2[stream1in][stream1out];\
[stream1out2]trim=duration=2,select=lte(n\,60)[stream1];\
[stream1in]fade=t=in:s=0:n=30[stream1fadein];\
[stream1out]fade=t=out:s=0:n=30[stream1fadeout];\
[stream1fadein][stream1][stream1fadeout]concat=n=3:v=1:a=0,scale=1280*5:-1,zoompan=z='min(pzoom+0.002,2)':d=1:x='iw/2-(iw/zoom/2)':s=1280x720 ,format=yuv420p[video]" -map [video] -vsync 2 -async 1 -rc-lookahead 0 -g 0 -profile:v main -level 42 -c:v libx264 -r 30 df.mp4
它工作正常,但会生成4秒钟的视频。因此,我对如何在此命令中设置视频时长感到困惑。
答案 0 :(得分:1)
该命令比需要的复杂得多。
使用
ffmpeg -y -i 1.jpg \
-vf "scale=w='if(gte(iw/ih,1280/720),-1,1280*5)':h='if(gte(iw/ih,1280/720),720*5,-1)',\
crop=1280*5:720*5,setsar=1,\
zoompan=z='min(zoom+0.002,2)':d=X:x='iw/2-(iw/zoom/2)':s=1280x720,\
fade=in:s=0:n=25,fade=out:s=X-25:n=25,format=yuv420p" \
-c:v libx264 -profile:v main df.mp4
将X
放大,并以所需的帧数淡出。流fps是25,所以持续时间是X / 25,以秒为单位。