日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

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

發布時間:2025/3/12 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 视频和图片转换 视频压缩 图片降低分辨率 图像处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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 视频和图片转换 视频压缩 图片降低分辨率 图像处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。