|
楼主 |
发表于 2024-3-9 11:59:15
|
显示全部楼层
$ [' ^+ `: J0 f T# l5 Y8 b/ q用python写的软件,给原片导入进去,输入图片数量,按照要生成的数量从视频中截取片段随机生成gif0 K# u% O# q5 I) U(欢迎访问老王论坛:laowang.vip)
下面是部分生成函数,如果没有程序员基础就算了,你要是想要软件你留个qq啥的我发你3 B$ p8 w7 r* A' ], F( j" M# o(欢迎访问老王论坛:laowang.vip)
def generate_random_gifs(video_path, output_folder, num_gifs=None, duration_per_gif=1.5,target_width=960, target_height=540):, F5 X, y8 d% G# }(欢迎访问老王论坛:laowang.vip)
# 创建输出文件夹# g6 ~# X5 [! L(欢迎访问老王论坛:laowang.vip)
os.makedirs(output_folder, exist_ok=True)" N4 q6 |3 B( r+ z9 X, B6 X(欢迎访问老王论坛:laowang.vip)
# 打开视频文件3 s$ m6 Z O- @# f5 u- _ B(欢迎访问老王论坛:laowang.vip)
video_clip = VideoFileClip(video_path) P4 Q3 J! u# k/ S, Q(欢迎访问老王论坛:laowang.vip)
# 获取视频的持续时间, _1 o9 h' \( K: `3 E4 A0 h(欢迎访问老王论坛:laowang.vip)
video_duration = video_clip.duration
% Y$ G' S5 K ?3 [' `( ~ R # 确定每个 GIF 的持续时间(以秒为单位)
$ |7 D& R# q) l) R4 B gif_duration = min(duration_per_gif, video_duration / num_gifs), m# I( t! c/ I# }) f3 ~ s3 L4 d, B(欢迎访问老王论坛:laowang.vip)
# 生成随机时间点
, d) M" G- m- ?3 Q* U random_times = sorted([random.uniform(0, video_duration) for _ in range(num_gifs)])
( ]- ]+ p( L$ E* G # 在循环外加载视频文件; M( g ]+ b/ b2 \(欢迎访问老王论坛:laowang.vip)
video_clip = VideoFileClip(video_path)
0 v8 i3 ^) {5 m' l, H. o/ P' u s # 为每个时间节点生成 GIF 图片 I# @% X( X5 a0 {% f6 I$ @# N(欢迎访问老王论坛:laowang.vip)
for i, t in enumerate(random_times):2 U* U# r2 ^! v. z8 U(欢迎访问老王论坛:laowang.vip)
# 提取剪辑8 b& K i2 E: M0 W(欢迎访问老王论坛:laowang.vip)
clip = video_clip.subclip(t, t + gif_duration)/ X+ y1 a5 W# U9 i1 d" ^, `(欢迎访问老王论坛:laowang.vip)
# 调整 GIF 图片大小
3 ~& I2 q: ]) e: V3 ~: k. w% `% q resized_clip = clip.resize((target_width, target_height)). D0 d! \# A9 N4 c) B(欢迎访问老王论坛:laowang.vip)
# 生成 GIF 文件的路径6 R# [# B- S5 S(欢迎访问老王论坛:laowang.vip)
gif_path = os.path.join(output_folder, f"gif_{i + 1}.gif")
: x4 v# y: B/ e# C% s # 输出处理信息. u. y- f" z; a6 {(欢迎访问老王论坛:laowang.vip)
print(f"正在处理第 {i + 1} 张图片"); k0 C. ]- e, j6 q6 B+ r(欢迎访问老王论坛:laowang.vip)
# 写入 GIF 文件$ }+ f7 R, ?# S$ B c5 m0 d7 L(欢迎访问老王论坛:laowang.vip)
resized_clip.write_gif(gif_path, fps=10, program='ffmpeg', opt="optimizeplus")
* B$ J# ]# j# g4 P; H: L # 关闭视频文件
/ D7 K# p* [; }' I video_clip.close()
. _8 k# h2 `' x
! z- m0 U8 I) j/ _
/ `5 L5 T0 q7 b+ m: A$ v9 V2 N+ {. V' y( f5 P R# T3 P(欢迎访问老王论坛:laowang.vip)
6 v3 A8 q j7 p o+ ]
* K7 E8 e. y; F5 t* Y3 W
8 l/ l C. L0 T, H) S4 Y; _% w( A
& t' v9 Q7 a. u; J |
|