zetrabit Asked: 2024-05-13 02:59:26 +0800 CST2024-05-13 02:59:26 +0800 CST 2024-05-13 02:59:26 +0800 CST FFmpeg图像滑动动画 772 我想用 ffmpeg 制作动画,如图所示。动画长度必须为 3 秒。视频开头放大 0.5 秒 向左滑动 1 秒 向右滑动 1 秒 缩小 0.5 秒。我有 3 张图片。这可能吗? 我正在尝试 ffmpeg (python 或 php 或 msdos) 示例图像 ffmpeg 1 个回答 Voted Best Answer Баяр Гончикжапов 2024-05-13T11:38:52+08:002024-05-13T11:38:52+08:00 数学 ffmpeg -loop 1 -t 3 -r 60 -i 1.jpg -lavfi " format=yuv444p, scale=1080:1920, pad=1920:1920:-1:-1, zoompan=z=' if(lt(in,30), trunc(iw*10*(1+0.005*in)/2)*2/(iw*10), if(lt(in,150),trunc(iw*10*(1+0.005*30)/2)*2/(iw*10), trunc(iw*10*(1+0.005*(180-in))/2)*2/(iw*10)))' :d=1 :x=' if(lt(in,30), iw/2-iw/zoom/2, if(lt(in,90), iw/2-iw/zoom/2+30-in, if(lt(in,150),iw/2-iw/zoom/2+30-90+in-90, iw/2-iw/zoom/2)))' :y='ih/2-ih/zoom/2' :s=1920x1920 :fps=60, crop=1080 " -c:v ffv1 out.mkv fps 60,填充到方形图片 1920x1920,它可以提供平滑的缩放,也许:) python 脚本,未优化: #!/usr/bin/python3 import os path="/mnt/public/upload/vert_jpg/" WID=1080 HEI=1920 INP="" FCT=0 SCA="" FIL="" ZOM="""format=yuv444p, scale=1080:1920, pad=1920:1920:-1:-1, setsar=1, zoompan=z=' if(lt(in,30), trunc(iw*10*(1+0.005*in)/2)*2/(iw*10), if(lt(in,150),trunc(iw*10*(1+0.005*30)/2)*2/(iw*10), trunc(iw*10*(1+0.005*(180-in))/2)*2/(iw*10)))' :d=1 :x=' if(lt(in,30), iw/2-iw/zoom/2, if(lt(in,90), iw/2-iw/zoom/2+30-in, if(lt(in,150),iw/2-iw/zoom/2+30-90+in-90, iw/2-iw/zoom/2)))' :y='ih/2-ih/zoom/2' :s=1920x1920 :fps=60, crop=1080 """ for filename in sorted(os.listdir(path)): if (filename.endswith(".jpg")): INP+=f' -loop 1 -t 3 -r 60 -i "{path}{filename}"' PAD=f"[{FCT}v]" SCA+=f"[{FCT}:v]{ZOM},drawtext=text='{filename}':fontcolor=yellow:fontsize=50{PAD};" FIL+=f"{PAD}" FCT+=1 os.system(f'ffmpeg {INP} -filter_complex "{SCA}{FIL}concat={FCT}:1:0" -c:v h264_nvenc -cq 20 /tmp/output.mkv -y -hide_banner') os.system(f'mpv /tmp/output.mkv')
数学
fps 60,填充到方形图片 1920x1920,它可以提供平滑的缩放,也许:)
python 脚本,未优化: