如何使用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
相关产品推荐
相关产品推荐

