如何将图片保存成视频(imageio、opencv和ffmpeg)

测试下来发现,imageio 速度比 cv2 的要慢,所以普通保存推荐 cv2,要gpu加速需要额外配置或者修改

imageio

底层也是调用的ffmpeg,以下是python代码

import imageio
import os

# 读取要保存为视频的图片
images = []
for filename in os.listdir('path/to/images/folder'):
    images.append(imageio.imread('path/to/images/folder/' + filename))

# 指定保存视频的名称和帧率
video_name = 'output_video.mp4'
fps = 25

# 使用 imageio 保存视频
with imageio.get_writer(video_name, fps=fps) as video_writer:
    for image in images:
        video_writer.append_data(image)

在上面的代码中,我们首先使用 os.listdir() 函数获取要保存为视频的所有图片的文件名,然后使用 imageio.imread() 函数读取每个文件并将其添加到 images 列表中。接下来,我们指定要保存的视频的名称和帧率。最后,我们使用 imageio.get_writer() 函数创建一个视频写入器,然后使用 video_writer.append_data() 函数将每个图像添加到视频中。

这样,您就可以使用 imageio 库保存视频了。请确保您已经正确指定了要保存的图片路径和视频名称,并指定了正确的帧率。

cv2

import cv2
import os

#图片路径
im_dir = '/home/x/out/xxx_imags'
#输出视频路径
video_dir = '/home/xxxx/out/xxxx.avi'
#帧率
fps = 30  
#图片数 
num = 426
#图片尺寸
img_size = (841,1023)

#fourcc = cv2.cv.CV_FOURCC('M','J','P','G')#opencv2.4
fourcc = cv2.VideoWriter_fourcc('M','J','P','G') #opencv3.0
videoWriter = cv2.VideoWriter(video_dir, fourcc, fps, img_size)

for i in range(1,num):
    im_name = os.path.join(im_dir, str(i).zfill(6)+'.jpg')
    frame = cv2.imread(im_name)
    videoWriter.write(frame)
    print im_name

videoWriter.release()
print 'finish'

ffmpeg

from : https://blog.csdn.net/xindoo/article/details/121451318

ffmpeg -r 10 -f image2 -i %d.jpeg output1.mp4

GPU加速

可能能加速10倍以上,但是需要安装GPU版本
Ubuntu上安装ffmpeg-cuda加速
替换Python的imageio包中自带的ffmpeg以支持GPU编解码加速
https://www.jianshu.com/p/59da3d350488

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用 Python 的图像处理库,如 OpenCV、Pillow 或 Python3-MoviePy 等来将视频转换为图片。 使用 OpenCV 库的方法如下: ``` import cv2 # 读入视频文件 video = cv2.VideoCapture("video.mp4") # 获取帧率 fps = video.get(cv2.CAP_PROP_FPS) # 获取总帧数 frame_count = video.get(cv2.CAP_PROP_FRAME_COUNT) # 循环读取每一帧 for i in range(int(frame_count)): success, frame = video.read() if success: # 将图片保存为 JPG 格式 cv2.imwrite("frame%d.jpg" % i, frame) else: break # 释放视频文件 video.release() ``` 使用 Python3-MoviePy 库的方法如下: ``` import os from moviepy.video.io.ffmpeg_reader import FFMPEG_VideoReader from moviepy.video.io.ffmpeg_writer import FFMPEG_VideoWriter # 读入视频文件 video = FFMPEG_VideoReader("video.mp4") # 获取帧率 fps = video.fps # 获取总帧数 frame_count = video.nframes # 循环读取每一帧 for i in range(int(frame_count)): frame = video.get_frame(i / fps) # 将图片保存为 JPG 格式 imageio.imwrite("frame%d.jpg" % i, frame) # 释放视频文件 video.close() ``` 使用 Pillow 库的方法如下: ``` from PIL import Image import imageio # 读入视频文件 video = imageio.get_reader("video.mp4") # 获取帧率 fps = video.get_meta_data()['fps'] # 获取总帧数 frame_count = video.get_length() # 循环读取每一帧 for i in range(int(frame_count)): frame = video.get_data(i) # 将图片保存为 JPG 格 ### 回答2: Python可以使用OpenCV库来实现视频图片的功能。OpenCV是一个广泛应用于计算机视觉的开源库,具有丰富的图像处理和计算机视觉算法。 首先,我们需要安装OpenCV库。在命令行输入以下命令可以安装OpenCV库: pip install opencv-python 接下来,我们可以使用OpenCV库的VideoCapture类来读取视频文件。通过VideoCapture的对象,我们可以读取视频帧,并将其转换为图片格式。我们可以指定视频文件的路径作为参数实例化VideoCapture对象。例如,假设视频文件名为"test_video.mp4",可以使用以下代码来实例化VideoCapture对象: cap = cv2.VideoCapture("test_video.mp4") 之后,我们可以循环读取视频的每一帧,并将其转换为图片保存。通过调用read()方法,我们可以获取到当前视频的帧,方法返回两个参数,第一个是一个布尔值,表示是否功读取到帧,第二个是图像数据。我们可以将第二个参数保存图片文件。以下是示例代码: i = 0 while cap.isOpened(): ret, frame = cap.read() if not ret: break cv2.imwrite("frame%d.jpg" % i, frame) i += 1 最后,需要记得在结束时释放VideoCapture对象和关闭视频文件。通过调用release()方法,我们可以释放资源。以下是示例代码: cap.release() cv2.destroyAllWindows() 以上就是使用Python进行视频图片的简单示例。当然,我们还可以通过OpenCV库的其他功能,如调整图片大小、截取感兴趣区域等,以实现更多高级的视频处理和图像分析任务。 ### 回答3: Python 是一种功能强大的编程语言,可以用于各种任务,包括视频图片。 要在 Python 中实现视频图片,首先需要安装合适的库。一个常用的库是 OpenCV,它提供了丰富的图像处理功能。 在使用 OpenCV 进行视频图片时,我们可以按照以下步骤进行操作: 1. 导入所需的库:我们需要导入 OpenCV 库来处理视频和图像。 2. 打开视频文件:使用 OpenCV 的`cv2.VideoCapture()`函数来打开视频文件。我们需要提供视频文件的路径作为参数。 3. 设置帧数:获取视频文件的总帧数,并决定我们要从视频中提取多少帧作为图片。可以使用`cv2.CAP_PROP_FRAME_COUNT`和`cv2.CAP_PROP_FRAME_WIDTH`属性来获取视频的帧数和宽度。 4. 循环读取帧:使用循环结构读取视频的每一帧。可以使用`cv2.VideoCapture()`的`read()`方法。 5. 保存帧为图片:使用 OpenCV 的`cv2.imwrite()`函数将帧保存图片文件。我们需要为每一帧选择一个唯一的文件名。 完以上步骤后,我们就可以将视频转换为一连串的图片。 下面是一个简单的示例代码,演示了如何使用 OpenCV 在 Python 中将视频转换为图片: ```python import cv2 # 打开视频文件 video = cv2.VideoCapture('example.mp4') # 获取视频的帧数 frame_count = int(video.get(cv2.CAP_PROP_FRAME_COUNT)) # 设置提取的帧数 num_frames = 10 # 计算从每一帧中获取的步长 step_size = frame_count // num_frames # 循环读取帧 for i in range(0, frame_count, step_size): # 定位到指定的帧 video.set(cv2.CAP_PROP_POS_FRAMES, i) # 读取帧 ret, frame = video.read() # 将帧保存图片文件 cv2.imwrite(f'frame_{i}.jpg', frame) # 关闭视频对象 video.release() ``` 以上代码逐帧读取视频,并将其中的每一帧保存为一张图片文件。这样,我们就能够将视频文件转换为一系列图片,方便后续处理和分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值