Python实现视频分解成图片+图片合成视频

 更新时间:2022年04月02日 08:40:45   作者:用余生去守护  
这篇文章主要介绍了如何利用Python实现视频分解成图片以及将图片合成为视频,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下

一、python视频拆分+图片合成(源码一)

1.python视频拆分

import cv2
 
def video2frame(videos_path,frames_save_path,time_interval):
 
  '''
  :param videos_path: 视频的存放路径
  :param frames_save_path: 视频切分成帧之后图片的保存路径
  :param time_interval: 保存间隔
  :return:
  '''
  vidcap = cv2.VideoCapture(videos_path)
  success, image = vidcap.read()
  count = 0
  while success:
    success, image = vidcap.read()
    count += 1
    if count % time_interval == 0:
      cv2.imencode('.jpg', image)[1].tofile(frames_save_path + "/frame%d.jpg" % count)
    # if count == 20:
    #   break
  print(count)
 
if __name__ == '__main__':
   videos_path = r'E:\py\python3.7\test\test98youhuashiping\shipingchaifen\1.mp4'
   frames_save_path = r'E:\py\python3.7\test\test98youhuashiping\shipingchaifen'
   time_interval = 2#隔一帧保存一次
   video2frame(videos_path, frames_save_path, time_interval)

2.python图片合成

import cv2
import os
import numpy as np
from PIL import Image
 
 
def frame2video(im_dir,video_dir,fps):
 
    im_list = os.listdir(im_dir)
    im_list.sort(key=lambda x: int(x.replace("frame","").split('.')[0]))  #最好再看看图片顺序对不
    img = Image.open(os.path.join(im_dir,im_list[0]))
    img_size = img.size #获得图片分辨率,im_dir文件夹下的图片分辨率需要一致
 
 
    # fourcc = cv2.cv.CV_FOURCC('M','J','P','G') #opencv版本是2
    fourcc = cv2.VideoWriter_fourcc(*'XVID') #opencv版本是3
    videoWriter = cv2.VideoWriter(video_dir, fourcc, fps, img_size)
    # count = 1
    for i in im_list:
        im_name = os.path.join(im_dir+i)
        frame = cv2.imdecode(np.fromfile(im_name, dtype=np.uint8), -1)
        videoWriter.write(frame)
        # count+=1
        # if (count == 200):
        #     print(im_name)
        #     break
    videoWriter.release()
    print('finish')
 
if __name__ == '__main__':
    im_dir = r'E:\py\python3.7\test\test98youhuashiping\shipingchaifen\pho/'#帧存放路径
    video_dir = r'E:\py\python3.7\test\test98youhuashiping\shipingchaifen/test.mp4' #合成视频存放的路径
    fps = 30 #帧率,每秒钟帧数越多,所显示的动作就会越流畅
    frame2video(im_dir, video_dir, fps)

提示:路径中不要出现中文和特殊字符,且书写要规范!!

二、python视频拆分+图片合成(源码二)

import cv2
import numpy as np
import os
os.chdir(r'E:\py\python3.7\test\test98youhuashiping\chaifen')

##读取视频,并逐帧分解成图片
cap = cv2.VideoCapture('1.mp4')  #打开一个视频
isOpened = cap.isOpened() #判断是否打开
print(isOpened)

#获取视频的相关信息,视频的每一帧图片的宽度都是一致的
fps = cap.get(cv2.CAP_PROP_FPS) #帧率,即每秒钟由多少张图片组成
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) #获取宽度
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) #获取高度
print(fps,width,height)  #输出相关信息

i = 0  
while (isOpened):
    #读取视频的前两秒的图像,共计2*int(fps)张
    if i ==int(fps)*2 :  
        break
    else:
        i = i+1
    (flag,frame) = cap.read() #读取每一张 flag frame
    filename = 'image'+str(i)+'.jpg'
    #将读取的图片写入文件中,
    if flag == True:
        cv2.imwrite(filename,frame,[cv2.IMWRITE_JPEG_QUALITY,100])  #确定图片质量,100算是高的
print('end!')   

##读取零散图片(上面分解的图片),并将其合成视频
img = cv2.imread('image1.jpg')
imginfo = img.shape
size = (imginfo[1],imginfo[0])  #与默认不同,opencv使用 height在前,width在后,所有需要自己重新排序
print(size)

#创建写入对象,包括 新建视频名称,每秒钟多少帧图片(10张) ,size大小
#一般人眼最低分辨率为19帧/秒
videoWrite = cv2.VideoWriter('2.mp4',-1,10,size) 

for i in range(1,40):
    filename = 'image'+str(i)+'.jpg'
    img = cv2.imread(filename,1)  #1 表示彩图,0表示灰度图  
    
    #直接写入图片对应的数据
    videoWrite.write(img)  

videoWrite.release() #关闭写入对象
print('end')
     

三、python视频拆分(源码三)

import cv2 #导入opencv模块
import os
import time
 
def video_split(video_path,save_path):
    '''
    对视频文件切割成帧
    '''
    '''
    @param video_path:视频路径
    @param save_path:保存切分后帧的路径
    '''
    vc=cv2.VideoCapture(video_path)
    #一帧一帧的分割 需要几帧写几
    c=0
    if vc.isOpened():
        rval,frame=vc.read()
    else:
        rval=False
    while rval:
        rval,frame=vc.read()
        # 每秒提取2帧图片
        if c % 2 == 0:
            cv2.imwrite(save_path + "/" + str('%06d'%c)+'.jpg',frame)
            cv2.waitKey(1)
        c=c+1
 
DATA_DIR = r"E:\py\python3.7\test\test98youhuashiping\ceshi\mp4" #视频数据主目录
 
SAVE_DIR = r"E:\py\python3.7\test\test98youhuashiping\ceshi\pho2" #帧文件保存目录
 
start_time = time.time()
for parents,dirs,filenames in os.walk(DATA_DIR):
    #if parents == DATA_DIR:
    #    continue
 
    print("正在处理文件夹",parents)
    path = parents.replace("\\","//")
    f = parents.split("\\")[1]
    save_path = SAVE_DIR + "//" + f
    # 对每视频数据进行遍历
    for file in filenames:
        file_name = file.split(".")[0]
        save_path_ = save_path + "/" + file_name
        if not os.path.isdir(save_path_):
            os.makedirs(save_path_)
        video_path = path + "/" + file
        video_split(video_path,save_path_)
 
end_time = time.time()
print("Cost time",start_time - end_time)

到此这篇关于Python实现视频分解成图片+图片合成视频的文章就介绍到这了,更多相关Python 视频分解与合成内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Pandas中Series和DataFrame的索引实现

    Pandas中Series和DataFrame的索引实现

    这篇文章主要介绍了Pandas中Series和DataFrame的索引实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-06-06
  • python模块itsdangerous简单介绍

    python模块itsdangerous简单介绍

    这篇文章主要介绍了python模块itsdangerous简单介绍,本文通过案例分析给大家详细讲解,对python模块itsdangerous相关知识感兴趣的朋友一起看看吧
    2022-11-11
  • Pytest中conftest.py的用法

    Pytest中conftest.py的用法

    conftest.py文件到底该如何使用呢,下面我们就来详细了解一下conftest.py文件的特点和使用方法吧,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • 使用python 进行区间取值的方法

    使用python 进行区间取值的方法

    这篇文章主要介绍了使用python 进行区间取值的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-07-07
  • Python内置函数locals()的具体示例

    Python内置函数locals()的具体示例

    本文主要介绍了Python中的内置函数locals()的具体用法和应用场景,locals()函数用于获取当前局部符号表的字典,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-09-09
  • Python插入Elasticsearch操作方法解析

    Python插入Elasticsearch操作方法解析

    这篇文章主要介绍了Python插入Elasticsearch操作方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • Python全局变量global关键字详解

    Python全局变量global关键字详解

    这篇文章主要介绍了Python全局变量global关键字详解,需要的朋友可以参考下
    2021-04-04
  • python迭代器常见用法实例分析

    python迭代器常见用法实例分析

    这篇文章主要介绍了python迭代器常见用法,结合实例形式分析了Python迭代器概念、功能、常见操作方法及相关注意事项,需要的朋友可以参考下
    2019-11-11
  • centos安装python3.10的教程

    centos安装python3.10的教程

    文章主要介绍了在CentOS系统上安装Python 3.10.1的步骤,包括升级OpenSSL到1.1.1,以及详细的操作过程,如切换目录、下载安装包、解压、配置、编译安装、创建软连接和验证等
    2025-03-03
  • java虚拟机中栈的运行知识点总结

    java虚拟机中栈的运行知识点总结

    在本篇文章里小编给大家整理的是一篇关于java虚拟机中栈的运行知识点总结,有需要的朋友们可以学习参考下。
    2021-06-06

最新评论