You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python将批量图像帧转换为同等质量的同时长视频

合成视频Python实现方案

首先计算基准参数:18秒共558帧,对应帧率为 558 / 18 = 31fps,用该帧率合成即可保证时长、流畅度和原视频完全一致。

完整实现代码

import cv2
import os

# 配置参数
frame_folder = './'  # 帧保存的文件夹路径
output_video_path = 'output_masked.mp4'
frame_count = 558  # 总帧数
fps = 31  # 也可以直接从原视频读取,写法为vid_cap.get(cv2.CAP_PROP_FPS),结果更准确

# 读取第一帧获取视频分辨率
first_frame = cv2.imread(os.path.join(frame_folder, 'frame0.jpg'))
height, width, layers = first_frame.shape
frame_size = (width, height)

# 初始化VideoWriter,mp4v编码对应mp4格式,兼容性最好
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
video_writer = cv2.VideoWriter(output_video_path, fourcc, fps, frame_size)

# 调整输出画质,取值范围0-100,越高画质越好、文件越大,建议设置为90-95
video_writer.set(cv2.VIDEOWRITER_PROP_QUALITY, 95)

# 按顺序读取所有帧写入视频
for i in range(frame_count):
    frame_path = os.path.join(frame_folder, f'frame{i}.jpg')
    frame = cv2.imread(frame_path)
    if frame is None:
        print(f"跳过不存在的帧:{frame_path}")
        continue
    video_writer.write(frame)

# 释放资源
video_writer.release()
cv2.destroyAllWindows()
print(f"视频合成完成,保存路径:{output_video_path}")

注意事项

  • 按数字序号遍历读取帧,可以避免os.listdir默认字符串排序导致的frame10.jpg排在frame2.jpg前面的顺序错乱问题,保证视频流畅度。
  • 如果需要保留原视频的音频,可以使用ffmpeg命令合并音视频:ffmpeg -i output_masked.mp4 -i PXL_20211116_020738341.mp4 -c copy -map 0:v:0 -map 1:a:0 output_with_audio.mp4,直接复制音视频流无额外画质损失。

内容的提问来源于stack exchange,提问作者mchd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 07:06:04