Python图片转视频:把零散照片一键合成vlog,告别手动剪辑
关键词:Python、图片合成视频、无剪辑vlog、小白脚本、OpenCV
故事开场:旅行照片塞满文件夹,却做不出一条vlog?
想象一下,你刚从云南回来,相机里躺着 300 张照片,想做成 30 秒的 vlog 发朋友圈。
- 打开剪映?导入、排序、调比例,半小时过去还没开始。
- 用手机 App?导出时突然弹出“VIP 才能去水印”。
- 你只想“把照片按顺序连成视频”,却找不到一个一键按钮。
这把“瑞士军刀”——img2vid.py,只要一条命令,就能把文件夹里的所有照片按名字顺序自动合成为视频,不加水印、不用剪辑,3 秒搞定。
代码解析:像拼乐高一样拆开看
① 告诉脚本“照片在哪、视频叫啥”
import argparse
ap = argparse.ArgumentParser()
ap.add_argument("-p", "--path", required=True, help="照片文件夹路径")
ap.add_argument("-o", "--output_video", type=str, required=True, help="输出视频的名字")
args = vars(ap.parse_args())
通俗解释:
就像你在快递单上写“取件地址”和“包裹名字”。
终端里敲:
python img2vid.py -p C:/照片 -o 旅行vlog.avi
脚本就懂了。
② 把照片“排队”并统一尺寸
from imutils import paths
imagePaths = list(paths.list_images(args["path"]))
通俗解释:
把文件夹里所有 jpg/png 按文件名排好队,准备上场。
for filename in imagePaths:
img = cv2.imread(filename)
img = cv2.resize(img, (1400, 800)) # 统一成 1400×800,防止大小不一
通俗解释:
如果照片有大有小,先拉到同一尺寸,不然视频会“抽搐”。
③ 创建“画布”——告诉视频要写多长、多宽
out = cv2.VideoWriter(
args["output_video"],
cv2.VideoWriter_fourcc(*'DIVX'), # 视频格式
1, # 每秒几张照片
(1400, 800), # 宽×高
True
)
通俗解释:
VideoWriter
就像一张空白录像带,告诉它尺寸和播放速度(1 fps = 1 秒 1 张照片)。
④ 把照片“写进”画布
for i in range(len(img_array)):
out.write(img_array[i])
out.release()
通俗解释:
循环把每张照片写进去,最后 release
像按下“停止录制”,视频文件就生成了。
如果还想更厉害?两个超简单扩展
扩展1:加参数控制播放速度
在终端里再加一个 --fps
,想多快就多快:
ap.add_argument("--fps", type=int, default=1, help="每秒放几张照片")
# 使用
out = cv2.VideoWriter(args["output_video"], fourcc, args["fps"], (w, h), True)
终端示例:
python img2vid.py -p C:/照片 -o fast.avi --fps 5
一秒放 5 张,动感加倍。
扩展2:批量给不同文件夹生成视频
把脚本包成函数,循环扫多个文件夹:
import os
root = "C:/旅行合集" # 里面每个子文件夹都是一天的照片
for day in os.listdir(root):
day_path = os.path.join(root, day)
if os.path.isdir(day_path):
out_name = f"{day}.avi"
# 这里调用原脚本的核心逻辑即可
一天一个 vlog,十分钟搞定全年回忆。
总结:一条命令,把照片变电影
img2vid.py 只有几十行,却像一把随身小瑞士军刀:
你只需告诉它“照片文件夹”和“视频名字”,它就把零散瞬间连成流畅故事。
下次旅行回来,别再手动拖轨道,打开终端敲一行命令,让照片自己动,让你多睡半小时。
源码获取
完整代码已开源,包含详细的注释文档:
🔗 [GitCode仓库] https://gitcode.com/laonong-1024/python-automation-scripts
📥 [备用下载] https://pan.quark.cn/s/654cf649e5a6 提取码:f5VG