美文网首页技术研发汇集@IT·互联网
python快速将大批量图片合成为视频

python快速将大批量图片合成为视频

作者: 知信学源 | 来源:发表于2024-02-05 17:33 被阅读0次

第一步-对图片名称进行批量修改

由于图片名称复杂多样,为便于统一化处理,增强程序的通用性,使用改名程序可以降低手动调整的复杂度。

import os

### 批量修改文件名,默认操作为将图片按0,1,2,3,,,顺序重命名

path_in = "./pictures"          #待批量重命名的文件夹

class_name = ".jpg"    #重命名后的文件名后缀

file_in = os.listdir(path_in)        #返回文件夹包含的所有文件名

num_file_in = len(file_in)          #获取文件数目

print(file_in , num_file_in)        #输出修改前的文件名

for i in range(0,num_file_in):

    t = str(i)

    new_name = os.rename(path_in+"/"+file_in[i],path_in+"/"+t+class_name)        #重命名文件名

file_out = os.listdir(path_in)

print(file_out)        #输出修改后的结果

第二步-将图片合称为视频

注意此部分的图片大小仍需要手动修改或输入。

import numpy as np

import cv2

import os

### 将图片合称为视频

# 1.每张图像大小

size = (4961,7016) #这里需要手动设置!!!

print("每张图片的大小为({},{})".format(size[0],size[1]))

# 2.设置源路径与保存路径

src_path = r'./pictures/'

sav_path = r'./vedio.mp4'

# 3.获取图片总的个数

all_files = os.listdir(src_path)

index = len(all_files)

print("图片总数为:" + str(index) + "张")

# 4.设置视频写入器

fourcc = cv2.VideoWriter_fourcc(*'mp4v')#MP4格式

#完成写入对象的创建,第一个参数是合成之后的视频的名称,第二个参数是可以使用的编码器,第三个参数是帧率即每秒钟展示多少张图片,第四个参数是图片大小信息

videowrite = cv2.VideoWriter(sav_path,fourcc,1,size)#2是每秒的帧数,size是图片尺寸

# 5.临时存放图片的数组

img_array=[]

# 6.读取所有jpg格式的图片 (这里图片命名是0-index.jpg example: 0.jpg 1.jpg ...)

for filename in [src_path + r'{0}.jpg'.format(i) for i in range(0,index)]:

    img = cv2.imread(filename)

    if img is None:

        print(filename + " is error!")

        continue

    img_array.append(img)

# 7.合成视频

for i in range(0,index):

    img_array[i] = cv2.resize(img_array[i],size)

    videowrite.write(img_array[i])

    print('第{}张图片合成成功'.format(i))

print('------done!!!-------')

拼接合并yuv序列转成mp4

#-*- coding:utf-8-*-

import os

if __name__ == "__main__":

    # 1 输入想要合并序列,按顺序放

    input_w = 2560

    input_h = 1440

    input_seqs = [

                r"D:\input\\2_2k_420.yuv",

                r"D:\input\\4_2k_420.yuv",

                r"D:\input\\10_2K_420.yuv", ]

    # 2 每个yuv转码成mp44

    ffmpeg_trans_param = "ffmpeg -y -f rawvideo -video_size %sx%s -pixel_format yuv420p -i %s \

                            -c:v libx264 -q 10 %d_out.mp4"

    if os.path.exists("concat_list.txt"):

        os.remove("concat_list.txt")

    f_concat = open("concat_list.txt","a")

    for i in range(0,len(input_seqs)):

        cur_cmd = ffmpeg_trans_param %( input_w, input_h, input_seqs[i], i)

        os.system(cur_cmd)

        write_info = "file %d_out.mp4\n" % ( i)

        f_concat.write(write_info)

    f_concat.close()

    # 3 按顺序合并所有mp4文件

    cur_cmd = "ffmpeg -y -hide_banner -f concat -i concat_list.txt -c:v copy  concat_total.mp4"

    os.system(cur_cmd)

相关文章

网友评论

    本文标题:python快速将大批量图片合成为视频

    本文链接:https://www.haomeiwen.com/subject/thvfadtx.html