首页 > 编程语言 >python之图片与视频互转

python之图片与视频互转

时间:2022-12-22 10:14:13浏览次数:45  
标签:视频 python frame source file 互转 path os out

图片转视频

def image_to_video(image_dir, video_dir, fps):
    im_list = [i for i in os.listdir(image_dir) if i.endswith('jpg')]
    im_list.sort(key=lambda x: int(x.replace("frame", "").split('.')[0]))  # 最好再看看图片顺序对不

    # fourcc = cv2.VideoWriter_fourcc(*'XVID')  # opencv版本是3
    # fourcc = cv2.VideoWriter_fourcc(*'MJPG')  # avi
    fourcc = cv2.VideoWriter_fourcc(*'mp4v')  # mp4
    videoWriter = cv2.VideoWriter(video_dir, fourcc, fps, (1920, 1080))
    # videoWriter = cv2.VideoWriter(video_dir, fourcc, fps, img_size)

    for i in im_list:
        im_name = os.path.join(image_dir ,i)
        frame = cv2.imdecode(np.fromfile(im_name, dtype=np.uint8), -1)
        frame = cv2.resize(frame, (1920, 1080)) #必须设置此步骤,不然文件夹下分辨不一致的图片不会写入视频
        videoWriter.write(frame)


    videoWriter.release()
    print('finish')

视频转图片

def video_to_img(video_path, frame_save_dir, frame_interval=1000):
    """

    :param video_path: 视频路径
    :param frame_save_dir: 视频帧的存储路径
    :param frame_interval: 视频帧的采样间隔
    :return:
    """
    cap = cv2.VideoCapture(video_path, )
    suc = cap.isOpened()
    frame_count = 0
    while suc:
        suc, frame = cap.read()  # suc是bool变量,用于判断视频帧是否存在
        frame_count += 1
        if (suc and frame_count % frame_interval == 0):
            save_path = os.path.join(frame_save_dir, "{:04d}.jpg".format(frame_count))  # 格式化命名,不足补零
            cv2.imwrite(save_path, frame)
            print(frame_count, suc)
    cap.release()

图片压缩

def image_compress(path,new_path):
    if not os.path.exists(new_path):
        os.makedirs(new_path)
    # 获取文件夹里面的图片
    path_list = [path +os.sep + i for i in os.listdir(path)]
    # print(path_list)
    # 循环图片路径,依次对图片进行压缩
    for _path in path_list:
        im = Image.open(_path)
        (x, y) = im.size  # 读取图片尺寸(像素)
        x_1 = 800  # 定义缩小后的标准宽度
        y_1 = int(y * x_1 / x)  # 计算缩小后的高度
        # x_1 = x  # 定义缩小后的标准宽度
        # y_1 = y  # 计算缩小后的高度
        out = im.resize((x_1, y_1), Image.ANTIALIAS)  # 改变尺寸,保持图片高品质
        # 判断图片的通道模式,若图片在RGBA模式下,需先将其转变为RGB模式
        if out.mode == 'RGBA':
            # 转化为rgb格式
            out = out.convert('RGB')
        # 最后保存为jpg格式的图片,这里因为图片本身为jpg所以后缀不更改
        out.save(f'{new_path}{os.sep}{_path.split(os.sep)[-1]}')

批量复制图片

def batch_copy_file(source_file,out_filepath,copy_num):
    if not os.path.exists(out_filepath):
        os.makedirs(out_filepath)
    if os.path.isdir(source_file):
        source_files=[source_file+os.sep+i for i in os.listdir(source_file) ]
    elif os.path.isfile(source_file):
        source_files=[source_file]
    else:
        raise Exception("文件夹不存在")
    frame_num=1
    for _source in source_files:
        # source_file_name=_source.split(os.sep)[-1]
        # print(source_file_name)
        for i in range(copy_num):
            # shutil.copyfile(_source,os.path.join(out_filepath,source_file_name.split('.')[0]+'-'+str(i)+'.'+source_file_name.split('.')[-1]))
            shutil.copyfile(_source,os.path.join(out_filepath,"frame"+str(frame_num)+'.jpg'))
            frame_num+=1

标签:视频,python,frame,source,file,互转,path,os,out
From: https://www.cnblogs.com/qtclm/p/16997732.html

相关文章

  • python之调用高德、百度api解析经纬度地址
    调用高德#高德地图根据经纬度反查地址,每天只能调用5000次defgaode_excute_single_query(coordStrings,currentkey='你自己的api-key'):#1-将coordList中的经纬......
  • python实现计算精度、召回率和F1值
    python实现计算精度、召回率和F1值  摘要:在深度学习的分类任务中,对模型的评估或测试时需要计算其在验证集或测试集上的预测精度(prediction/accuracy)、召回率(recall)和F1值......
  • 关于python网络爬虫——摘取新闻标题及链接
    Python是最近流行的编程语言,最近学习了python编程,并在网络爬虫方面进行了研究,下面给出简单实例来实现网络信息的获取步骤一:要有python开发环境,可下载python3.5版本,或anacond......
  • Python之异常
    一、了解异常当检测到⼀个错误时,解释器就⽆法继续执⾏了,反⽽出现了⼀些错误的提示,这就是所谓的"异常"。例如:以r⽅式打开⼀个不存在的⽂件。open('test.txt','r')二、异常......
  • Python之模块和包
    一、模块Python模块(Module),是⼀个Python⽂件,以.py结尾,包含了Python对象定义和Python语句。模块能定义函数,类和变量,模块⾥也能包含可执⾏的代码。1、导入模块1、导入......
  • python爬虫如何模拟正常用户的访问行为?
    在Python爬虫抓取数据时,我们很容易被目标网站限制访问,这是目标网站阻止别人批量获取自己网站信息的一种方式,通常会采用封IP作为终极手段,效果非常好。针对此类情况,作为Py......
  • 腾讯大佬告诉你,写Python到底用什么IDE合适
    OverridetheentrypointofanimageIntroducedinGitLabandGitLabRunner9.4.Readmoreaboutthe extendedconfigurationoptions.Beforeexplainingtheav......
  • Ceiling Division in Python
    ToperformceilingdivisioninPython,youcandefineyourownfunctionandutilizethefloordivisionoperator //.>>>defceiling_division(x,y):...ret......
  • Python 字符串
    目录Python字符串字符串基本特点字符串的编码引号创建字符串空字符串和len()函数转义字符字符串拼接不换行打印inputstr()实现数字转型字符串使用[]提取字符replace()实......
  • python第三方库的安装
    python安装第三方库的几种方法pip换源镜像源清华:https://pypi.tuna.tsinghua.edu.cn/simple豆瓣:http://pypi.douban.com/simple/阿里:http://mirrors.aliyun.com/pyp......