我使用 ffmpeg 将图像从左到中心滑动,如下所示:
#slide 1st image from right to center
#countdown 10 seconds
#slide 1st image from center to left and in the same time
#slide 2nd image from right to center
#countdown 10 seconds
#...
ffmpeg -loglevel quiet -loop 1 -i input.png -filter_complex "split=2[bg][slider];[bg]drawbox=c=black:t=fill[bg];[bg][slider]overlay=x='max(W-w*t,0)':y=0" -t 10 -y output.mp4
一些Python脚本,部分改编:
#!/usr/bin/python3
import os
LST=[]
DIR="/mnt/public/upload/jpgs+audio/"
LSD=os.listdir(DIR)
LSD.sort()
for f in LSD:
if (f.endswith(".jpg")):
print(f)
LST.append(f)
FLV=''
OFS=0
XFO=5
OFE=OFS+XFO
CNT=0
INP=[]
f=DIR+LST[0]
INP.append(f' -loop 1 -i "{f}"')
PDV='[s0]'
WID=1280
HEI=720
SPS=f'scale={WID}:{HEI}:force_original_aspect_ratio=decrease,pad={WID}:{HEI}:-1:-1,setsar=1'
FLT=f"""
[0:v]{SPS}[s0];
"""
for CNT in range(1, len(LST)):
FLT+=f"""[{CNT}:v]{SPS}[s{CNT}];
"""
FLV+=f'{PDV}'
PDV=f'[v{CNT}]'
FLV+=f"""[s{CNT}]overlay=x='if(between(t,{OFS},{OFE}),max(W-w*(t-{OFS}),0),max(0-w*(t-{OFE}),0-W))'{PDV};
"""
f=DIR+LST[CNT]
INP.append(f' -loop 1 -i "{f}"')
OFS+=XFO
OFE=OFS+XFO
OFS+=2
s='ffmpeg'
for t in INP:
s=s+t
s=s+f' -filter_complex "{FLT}{FLV}" -map {PDV} -c:v h264_nvenc -cq 20 -t {OFS} /tmp/output.mp4 -y -hide_banner'
print(s)
os.system(s)
os.system(f'mpv /tmp/output.mp4')