图片转视频

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之图片与视频互转的更多相关文章

  1. FFmpeg常用命令学习笔记(六)图片与视频互转命令

    图片与视频互转命令 1.视频转图片 ffmpeg -i in.mp4 -r 1 -f image2 img-%3d.jpeg -r 1:转换图片帧率为1,也就是1秒转1张.-f image2:将媒体文 ...

  2. Python OpenCV图片转视频 工具贴(三)

    Python OpenCV图片转视频 粘贴即用,注意使用时最好把自己的文件按照数字顺序命名.按照引导输入操作. # 一键傻瓜式引导图片串成视频 # 注意使用前最好把文件命名为数字顺序格式 import ...

  3. 用python复制图片、视频

    图片复制 f_src = open('1.jpg','rb') content = f_src.read() f_copy = open('1-副本.jpg','wb') f_copy.write(c ...

  4. Python+Opencv实现把图片转为视频

    1. 安装Opencv包 在Python命令行输入如下命令(如果你使用的Anaconda,直接进入Anaconda Prompt键入命令即可.如果你不知道Anaconda是什么,可以参考王树义老师的文 ...

  5. 小白学Python(7)——利用Requests下载网页图片、视频

    安装 Requests 如果安装了Requests就已经可用了,否则要安装 Requests,只要在你的CMD中运行这个简单命令即可: pip install requests requests使用 ...

  6. 做bad apple第二步: python如何将视频变成一帧帧的图片,如何将一帧帧的图片转为视频

    直接上代码 """视频转图片""" port cv2def getphoto(video_in, video_save): cap = cv ...

  7. jQuery 人脸识别插件,支持图片和视频

    jQuery Face Detection 是一款人脸检测插件,能够检测到图片,视频和画布中的人脸坐标.它跟踪人脸并输出人脸模型的坐标位置为一个数组.我们相信,面部识别技术能够给我们的 Web 应用带 ...

  8. Silverlight读取Zip文件中的图片与视频

    首先看看Demo的截图: 下面我将一步步展示实现这个Demo的过程,这个需求就是读出Zip文件中的图片与视频. Demo整体架构: 首先我们准备几张图片和视频,然后将其压缩至resource.zip文 ...

  9. 【转】android如何浏览并选择图片 音频 视频

    转自:http://www.cnblogs.com/top5/archive/2012/03/06/2381986.html   这几天 在学习并开发android系统的图片浏览 音频 视频 的浏览 ...

  10. Android 获取SDCard上图片和视频的缩略图

    获取图片缩略图和视频缩略图的方法: Java代码: import java.io.File; import android.app.Activity; import android.graphics. ...

随机推荐

  1. 2023年3月份至2024年3月份CCF会议情况——人工智能领域

    April 2, 2023:          https://2023.ecmlpkdd.org/submissions/key-dates-deadlines/ ECML-PKDD (Europe ...

  2. 必看!S3File Sink Connector 使用文档

    S3File 是一个用于管理 Amazon S3(Simple Storage Service)的 Python 模块.当前,Apache SeaTunnel 已经支持 S3File Sink Con ...

  3. 一个好用的消息推送服务【Server 酱】

    今天给大家介绍一个好用的消息推送服务Server 酱 Server 酱简介 Server 酱是什么 「Server 酱」,英文名「ServerChan」,是一款「手机」和「服务器」.「智能设备」之间的 ...

  4. RabbitMq高级特性之消费端限流 通俗易懂 超详细 【内含案例】

    RabbitMq高级特性之消费端限流 介绍 消息队列中囤积了大量的消息, 或者某些时刻生产的消息远远大于消费者处理能力的时候, 这个时候如果消费者一次取出大量的消息, 但是客户端又无法处理, 就会出现 ...

  5. grpc断路器之hystrix

    上一章介绍了grpc断路器sentinel, grpc断路器之sentinel 但是由于公司线上系统用的告警与监控组件是prometheus,而sentinel暂时还没有集成prometheus,所以 ...

  6. shell脚本中$0 $1 $# $@ $* $? $$ 的各种符号意义详解

    一.概述 shell中有两类字符:普通字符.元字符. 1. 普通字符 在Shell中除了本身的字面意思外没有其他特殊意义,即普通纯文本: 2. 元字符 是Shell的保留字符,在Shell中有着特殊的 ...

  7. CAN学习笔记(一)CAN入门

    CAN学习笔记(一)CAN入门 参考链接:https://blog.csdn.net/2301_77952570/article/details/131114941 CAN收发器的作用 发:将TTL电 ...

  8. freertos学习(九)软件定时器

    软件定时器 软件定时器是freeRTOS通过一个硬件定时器,实现的定时器.可以实现不同时长的多个定时任务 不从中断上下文中执行定时器回调函数(不消耗任何处理时间) 实现流程 设置软件定时器,推入定时器 ...

  9. layui的各模块的基本用途是什么?

    Layui 是一个流行的前端UI框架,提供了多个模块,每个模块有不同的功能和用途.以下是 Layui 的一些主要模块以及它们的基本用途: 核心模块(layui): Layui 的核心模块包含了一些核心 ...

  10. docker stop 容器,连接被拒绝

    docker stop 容器ID 报错,无法kill,连接被拒绝 经过网上查找以及实际情况,发现原因为: 服务器重启时,正在运行的docker内的容器正在进行处理, 因为docker没有提前关闭,导致 ...