目录
项目场景:
问题描述
原因分析:
解决方案:
项目场景:
使用OpenCV-Python 保存视频,视频为numpy array格式,保存的视频全部为无意义的绿色。
问题描述
用opencv 保存的视频会出现全部为绿色的情况,非常诡异!
代码如下:
output_path = os.path.join(save_path, video_name+"_pose.mp4")
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
video_writer = cv2.VideoWriter(output_path, fourcc, fps, (sample_size[1], sample_size[0]))
for frame_np in pose:
frame_bgr = cv2.cvtColor(frame_np, cv2.COLOR_RGB2BGR)
video_writer.write(frame_bgr)
video_writer.release()
原因分析:
如果将fps改成24.0,是可以保存成功的!因此问题就在于保存不同的fps的时候出现了问题!
fps=24
output_path = os.path.join(save_path, video_name+"_pose.mp4")
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
video_writer = cv2.VideoWriter(output_path, fourcc, fps, (sample_size[1], sample_size[0]))
for frame_np in pose:
frame_bgr = cv2.cvtColor(frame_np, cv2.COLOR_RGB2BGR)
video_writer.write(frame_bgr)
video_writer.release()
解决方案:
其实用 torchvision.io 中的 write_video 保存更方便,这个API基于PYAV开发的。
例子如下:
import torch
import torchvision.io
# 假设 video_tensor 是你的视频帧张量,形状为 [T, H, W, C]
# 这里创建一个随机张量作为示例
T, H, W, C = 10, 224, 224, 3 # 例如,10帧,大小为224x224的RGB图像
video_tensor = torch.randint(0, 256, (T, H, W, C), dtype=torch.uint8)
# 指定输出视频文件的名称
filename = 'output_video.mp4'
# 指定帧率(fps)
fps = 30
# 调用 write_video 函数保存视频
torchvision.io.write_video(filename, video_tensor, fps, video_codec='libx264')