|
楼主 |
发表于 2024-3-9 11:59:15
|
显示全部楼层
* |0 b5 D5 B0 @1 u; F1 u" ^. {(欢迎访问老王论坛:laowang.vip)
用python写的软件,给原片导入进去,输入图片数量,按照要生成的数量从视频中截取片段随机生成gif
/ r& M/ O& O* x4 V! p. j* R下面是部分生成函数,如果没有程序员基础就算了,你要是想要软件你留个qq啥的我发你
8 `& W, P9 L5 J9 k3 B2 i( edef generate_random_gifs(video_path, output_folder, num_gifs=None, duration_per_gif=1.5,target_width=960, target_height=540):
8 r& m Q* [9 @; }$ i # 创建输出文件夹. }0 a0 A$ B% o6 h( R9 a( t(欢迎访问老王论坛:laowang.vip)
os.makedirs(output_folder, exist_ok=True)
* {* b- j) C! G1 p# a5 a9 \( @ # 打开视频文件- F6 y8 c A) M+ p* f+ b(欢迎访问老王论坛:laowang.vip)
video_clip = VideoFileClip(video_path)
) {: O* a- h) j # 获取视频的持续时间* S+ I% w/ I" Q, x) P/ @5 r/ a' Y(欢迎访问老王论坛:laowang.vip)
video_duration = video_clip.duration
7 y/ }' _, n, m! R1 K# D( b # 确定每个 GIF 的持续时间(以秒为单位)
9 g8 z$ H- w1 f0 x! `! B% d* ~ gif_duration = min(duration_per_gif, video_duration / num_gifs)
1 ^0 `4 c% h% N2 N0 ^8 m9 u # 生成随机时间点
9 V4 I* Q" N& G: r random_times = sorted([random.uniform(0, video_duration) for _ in range(num_gifs)]); h; `4 y/ @' p* m7 L) Z) [(欢迎访问老王论坛:laowang.vip)
# 在循环外加载视频文件
/ e r2 u9 k. D* H) A, h' l% F9 D video_clip = VideoFileClip(video_path)* w, u, u: `" q6 G" M) n2 w" H(欢迎访问老王论坛:laowang.vip)
# 为每个时间节点生成 GIF 图片7 }4 I/ N: Y2 T! o! _(欢迎访问老王论坛:laowang.vip)
for i, t in enumerate(random_times):: f; G; @. D/ E3 V& t, a, A+ G(欢迎访问老王论坛:laowang.vip)
# 提取剪辑8 z. ? n0 e' Q2 }' h(欢迎访问老王论坛:laowang.vip)
clip = video_clip.subclip(t, t + gif_duration)
- h5 L- G% ?7 ?; M& d2 V% | # 调整 GIF 图片大小
: b1 y- y8 M- P' x resized_clip = clip.resize((target_width, target_height))8 u% Q( Y c, c; u4 t( x; y+ w(欢迎访问老王论坛:laowang.vip)
# 生成 GIF 文件的路径
' d6 e! I2 }! t! ?6 b, @ gif_path = os.path.join(output_folder, f"gif_{i + 1}.gif")
3 Z2 A# o$ e, h# N$ R # 输出处理信息) `5 B7 \2 }" `% U* Q(欢迎访问老王论坛:laowang.vip)
print(f"正在处理第 {i + 1} 张图片")
- n+ A; p( N# a: ^( R2 I& f! n # 写入 GIF 文件
8 p5 A2 {0 H1 _6 Y1 _ resized_clip.write_gif(gif_path, fps=10, program='ffmpeg', opt="optimizeplus"). S9 A$ Z9 ]7 I1 D: t(欢迎访问老王论坛:laowang.vip)
# 关闭视频文件
6 u5 B) Y# U; G+ X video_clip.close()
# \7 v, P. g" Q5 g
! `& \4 I" f! r7 i* U1 B$ h5 u, [7 F! y(欢迎访问老王论坛:laowang.vip)
0 X8 |% D' V+ V2 L* A' ~" S(欢迎访问老王论坛:laowang.vip)
: x. s* J, U8 z2 a ^8 w: Y3 V(欢迎访问老王论坛:laowang.vip)
0 P6 D, b- \( L5 H/ k+ ]# E( w9 u(欢迎访问老王论坛:laowang.vip)
: n! L8 `, J) X$ b: U- Q- e7 k" z8 [) g P6 \: j { h(欢迎访问老王论坛:laowang.vip)
|
|