python 做视频后期

  • 单个视频转图片
  • 所有图片转视频
  • 视频压缩 - ffmpeg
  • 图片降低分辨率
  • 图像处理

这是最近无聊的想法,对视频进行处理,其实也就是对图片的处理。

对视频进行后期处理,思路就是,视频转图片,然后对图片进行处理,再把图片转视频。

图片处理的多么奇怪,视频就多么奇怪,我当时想了想觉得挺好玩就做了玩玩。

视频可能很大,对视频处理要花好长时间,所以还进行了视频压缩等操作。

用到的代码如下。

单个视频转图片

'''
提取单个视频的所有帧
'''
import cv2
import numpy as np
def save_image(image,addr,num):#存储的图片路径address=addr+str(num)+'.jpg'#存储图片cv2.imwrite(address,image)
#读入视频
videoCapture=cv2.VideoCapture("./video/snowman.mp4")
#读取视频帧
success,frame=videoCapture.read()
i=0
while success:i=i+1#保存图片save_image(frame,'./img/',i)if success:print('save image:',i)#读取视频帧sucess,frame=videoCapture.read()

所有图片转视频

import cv2
import os
fps = 29#帧速率
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
video_writer = cv2.VideoWriter(filename='./c.mp4', fourcc=fourcc, fps=fps, frameSize=(1080, 1920))  # 图片实际尺寸,不然生成的视频会打不开
for i in range(1,258):p = iif os.path.exists('./img/'+str(p)+'.jpg'):  #判断图片是否存在img = cv2.imread(filename='./img/'+str(p)+'.jpg')#cv2.waitKey(100)video_writer.write(img)
video_writer.release()

视频压缩 - ffmpeg

在命令行输入:python ZIP.py ./ c.mp4 c2.mp4


import sys
import os
import zlib
import threading
import platform
from PIL import Image# python press.py ./ 12.mp4 23.mp4
# python 文件名  路径 要压缩的文件 压缩之后的文件名# python ZIP.py ./ c.mp4 c2.mp4
#filePath = "./"
#inputName = "c.mp4"
#outName = "c2.mp4"class Compress_Pic_or_Video(object):def __init__(self,filePath,inputName,outName=""):self.filePath = filePath  #文件地址self.inputName = inputName  #输入的文件名字self.outName = outName  #输出的文件名字self.system_ = platform.platform().split("-",1)[0]if  self.system_ ==  "Windows":self.filePath = (self.filePath + "\\") if self.filePath.rsplit("\\",1)[-1] else self.filePathelif self.system_ == "Linux":self.filePath = (self.filePath + "/") if self.filePath.rsplit("/",1)[-1] else self.filePathself.fileInputPath = self.filePath + inputNameself.fileOutPath = self.filePath + outName@propertydef is_video(self):videoSuffixSet = {"WMV","ASF","ASX","RM","RMVB","MP4","3GP","MOV","M4V","AVI","DAT","MKV","FIV","VOB"}suffix = self.fileInputPath.rsplit(".",1)[-1].upper()if suffix in videoSuffixSet:return Trueelse:return Falsedef SaveVideo(self):fpsize = os.path.getsize(self.fileInputPath) / 1024if fpsize >= 150.0: #大于150KB的视频需要压缩if self.outName:compress = "ffmpeg -i {} -r 10 -pix_fmt yuv420p -vcodec libx264 -preset veryslow -profile:v baseline  -crf 23 -acodec aac -b:a 32k -strict -5 {}".format(self.fileInputPath,self.fileOutPath)isRun = os.system(compress)else:compress = "ffmpeg -i {} -r 10 -pix_fmt yuv420p -vcodec libx264 -preset veryslow -profile:v baseline  -crf 23 -acodec aac -b:a 32k -strict -5 {}".format(self.fileInputPath, self.fileInputPath)isRun = os.system(compress)if isRun != 0:return (isRun,"没有安装ffmpeg")return Trueelse:return Truedef Compress_Video(self):# 异步保存打开下面的代码,注释同步保存的代码# thr = threading.Thread(target=self.SaveVideo)# thr.start()#下面为同步代码fpsize = os.path.getsize(self.fileInputPath) / 1024if fpsize >= 150.0:  # 大于150KB的视频需要压缩compress = "ffmpeg -i {} -r 10 -pix_fmt yuv420p -vcodec libx264 -preset veryslow -profile:v baseline  -crf 23 -acodec aac -b:a 32k -strict -5 {}".format(self.fileInputPath, self.fileOutPath)isRun = os.system(compress)if isRun != 0:return (isRun, "没有安装ffmpeg")return Trueelse:return Trueif __name__ == "__main__":b = sys.argv[1:]   #测试压缩savevideo = Compress_Pic_or_Video(b[0],b[1],b[2])print(savevideo.Compress_Video())

图片降低分辨率

#coding=utf-8
import os  #打开文件时需要
from PIL import Image
import reStart_path='C:/Users/jym/PycharmProjects/video2picture/img/'
end_path='C:/Users/jym/PycharmProjects/video2picture/img2/'
new_width=281
new_depth=500
list=os.listdir(Start_path)
#print list
count=0
for pic in list:path=Start_path+picim=Image.open(path)w,h=im.sizeh_new=new_depthw_new=new_widthcount=count+1out = im.resize((w_new,h_new),Image.ANTIALIAS)#new_pic=re.sub(pic[:-4],pic[:-4]+'_new',pic)new_pic=picnew_path=end_path+new_picout.save(new_path)count=str(count)

图像处理

import cv2
import os
import numpy as np
from matplotlib import pyplot as pltdef read_path(file_pathname):#遍历该目录下的所有图片文件for filename in os.listdir(file_pathname):print(filename)img = cv2.imread(file_pathname+'/'+filename)#插入图像处理代码cv2.imwrite('./img3/'+"/"+filename,img)#注意*处如果包含家目录(home)不能写成~符号代替
#必须要写成"/home"的格式,否则会报错说找不到对应的目录
#读取的目录
read_path('./img2/')
#print(os.getcwd())

这里面图像处理代码根据自己需要进行编写,比如下面。

import cv2
import os
import numpy as np
from matplotlib import pyplot as pltdef gasuss_noise(image, mean=0, var=0.001):'''添加高斯噪声mean : 均值var : 方差'''image = np.array(image / 255, dtype=float)noise = np.random.normal(mean, var ** 0.5, image.shape)out = image + noiseif out.min() < 0:low_clip = -1.else:low_clip = 0.out = np.clip(out, low_clip, 1.0)out = np.uint8(out * 255)return outdef read_path(file_pathname):#遍历该目录下的所有图片文件for filename in os.listdir(file_pathname):print(filename)img = cv2.imread(file_pathname+'/'+filename)#out2 = cv2.erode(img,None,iterations=3)hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)# 分别设置HSV颜色空间中,红色、黄色、蓝色、绿色的阈值lower_red = np.array([0, 43, 46])upper_red = np.array([10, 255, 255])lower_yellow = np.array([26, 43, 46])upper_yellow = np.array([34, 255, 255])lower_blue = np.array([100, 43, 46])upper_blue = np.array([124, 255, 255])lower_green = np.array([35, 43, 46])upper_green = np.array([77, 255, 255])# 使用inRange函数获取图像中目标颜色的索引mask_red = cv2.inRange(hsv, lower_red, upper_red)mask_blue = cv2.inRange(hsv, lower_blue, upper_blue)mask_green = cv2.inRange(hsv, lower_green, upper_green)mask_yellow = cv2.inRange(hsv, lower_yellow, upper_yellow)img_mask = np.copy(img)color_1 = [128, 9, 21]color_2 = [50, 14, 77]color_3 = [61, 154, 124]color_4 = [59, 170, 246]# 给目标像素赋值img_mask[mask_red != 0] = color_1img_mask[mask_blue != 0] = color_2img_mask[mask_green != 0] = color_3img_mask[mask_yellow != 0] = color_4#out2 = gasuss_noise(img, mean=0, var=0.01)####change to gray#(下面第一行是将RGB转成单通道灰度图,第二步是将单通道灰度图转成3通道灰度图)#img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#image_np=cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)#####save figurecv2.imwrite('./img3/'+"/"+filename,img_mask)#注意*处如果包含家目录(home)不能写成~符号代替
#必须要写成"/home"的格式,否则会报错说找不到对应的目录
#读取的目录
read_path('./img2/')
#print(os.getcwd())

python 视频和图片转换 视频压缩 图片降低分辨率 图像处理相关推荐

  1. 【把视频逐帧转换成图片】

    把视频逐帧转换成图片(也可以间隔几帧) 做AI检测的都知道数据集是是我们的基础,但又十分重要,俗话说:巧妇难为无米之炊,数据集就相当与巧妇手中的"米",对后期训练的模型的好坏至关重 ...

  2. Python中将字节流文件转换成图片文件

    Python中将字节流文件转换成图片文件 import urllib3 import os #PIL图像处理标准库 from PIL import Image from io import Bytes ...

  3. JavaCV音视频开发宝典:实现Base64编码图片转换成图片文件通用转换器,以base64转png图片文件为例,其他图片格式也全部支持

    <JavaCV音视频开发宝典>专栏目录导航 <JavaCV音视频开发宝典>专栏介绍和目录 ​ 前言 在上一章中https://eguid.blog.csdn.net/artic ...

  4. HEIC图片转换JPG图片

    heic图片转换jpg格式,需要使用格式转换器的帮助,专业的格式转换器,不仅可以转换图片格式,还可以保证图片转换的质量.画质无损. 比如奥凯丰 HEIC图片转换器[HEIC图片转换器]转为JPG_PN ...

  5. 使用Python批量将PDF转换成图片

    引用自 https://zhuanlan.zhihu.com/p/307990818. import os import time import fitz #以下为批量PDF转图片的代码 pdf_fi ...

  6. python视频延迟严重_利用多进程降低opencv视频延迟处理rtsp视频流

    Python多进程opencv 前几天遇到了一个问题,利用opencv程序调取rtsp视频流,因为处理程序要消耗的CPU时间过于长,VideoCapture的read是按帧读取,所以经常导致内存溢出, ...

  7. php ffmpeg截图,php ffmpeg截取视频第一帧保存为图片的方法

    php ffmpeg截取视频第一帧保存为图片的方法 $xiangmupath = $this->getxiangmupath(); $filename = 'chengshi'; $cmd = ...

  8. 有了这几个webp转换工具,快速完成图片转换工作

    最近有小伙伴来找我说,自己在上传webp图片的时候发现格式不正确,想要进行转换却一直弄不好,问我有没有什么解决的办法.今天我就来给大家推荐几个webp图片格式转换器,帮助大家快速进行图片格式转换,让你 ...

  9. python视频转字符详细教程_python视频转字符画教程

    python视频转字符画教程内容摘要 python视频转字符画教程,g.陕西振华教程学院,fysz近义词:fuckaround:华图面试教程怎么样,fūyǎ含义nsèzé简拼:fūyǎnsèzé释义: ...

最新文章

  1. L2TPV3---以太网端口到端口手动配置
  2. CentOs7中安装sonarQube服务系列------1.CentOS7中Docker的安装
  3. Oracle查询给表起别名
  4. 【Spring学习】spring开发包介绍
  5. ASP.NET Core 2.0 + EF6 + Linux +MySql混搭
  6. 上公厕上一半突然被拽出来......
  7. 常用网站URL规划分析
  8. php 期望参数1为资源,php – imagesx()期望参数1是资源,给定布尔值
  9. 【Gym - 101234A】Hacker Cups and Balls【线段树 + 二分答案】
  10. html+CSS+JS实现小米官网(附全部代码)
  11. Delphi使用ReportMachine制作小计和总计报表
  12. 2022年6月 青少年软件编程(图形化) 等级考试试卷(四级)
  13. 3A算法—自动对焦(AF)
  14. 分布式任务ijobhandle
  15. c语言数字黑洞123问题,求助:数字黑洞效率问题
  16. VsCode:设置前进和后退 (返回上一个浏览位置/下一个浏览位置)快捷键
  17. 基于stm32单片机的模拟IIC时序(附源码)
  18. United Cows of Farmer John G
  19. 博客园博客Wiz测试
  20. 3904三极管是什么功能_学三极管能遇到这篇巧文,我太幸福了!

热门文章

  1. Linux Shell编程之别名和常用快捷键
  2. 2019计算机国二操作题,2019年3月计算机二级C++操作练习题及答案(十二)
  3. elinput内容过长显示悬浮框_excel中一直被忽视的名称框,用好了也能提高效率
  4. mysql 天数减1_mysql 日期加减天数
  5. db2 控制台执行创建函数语句_DB2数据库中创建定义函数
  6. 页表长度和页表大小_在请求调页系统中,若逻辑地址中的页号超过页表控制寄存器中的页表长度,则会引起( ) 。_学小易找答案...
  7. 主板后置音频接口图解_颜值出众、用料靠谱——华擎(ASRock)Z490 Extreme4极限玩家主板 简析...
  8. ajax post django,Django中的Ajax POST请求失败
  9. 台式机计算机怎么分割,编辑手把手教程 如何给电脑硬盘分区
  10. Common Sort - 排序 - Java