日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

Python自制日常办公辅助工具之:批量视频截图,子集固定尺寸截图+序列化命名

發(fā)布時(shí)間:2024/8/1 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python自制日常办公辅助工具之:批量视频截图,子集固定尺寸截图+序列化命名 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Python自制日常辦公輔助工具之:批量視頻截圖

本人大學(xué)時(shí)期有一定的代碼基礎(chǔ),但畢業(yè)這么多年幾乎都快忘完了,從事的也是非技術(shù)行業(yè)。最近因?yàn)楣ぷ餍枰匦聫牧汩_(kāi)始學(xué)習(xí)Python基礎(chǔ)小知識(shí),用于輔助日常辦公。不足頗多,見(jiàn)笑之處還望包涵,個(gè)人博客也只是用于學(xué)習(xí)記錄。


文章目錄

  • Python自制日常辦公輔助工具之:批量視頻截圖
  • 解決需求
  • 一、思路是什么?
  • 二、代碼
    • 1.引入庫(kù)
    • 2.確認(rèn)操作的視頻節(jié)目
    • 3.定義好截圖方法def ResizeImage
    • 4.for循環(huán)執(zhí)行
    • 5.調(diào)用方法改成所需要的尺寸
  • 測(cè)試運(yùn)行
  • 總結(jié)


解決需求

將一批節(jié)目?jī)?nèi)的各條視頻進(jìn)行批量截圖,設(shè)置固定尺寸和具體時(shí)間點(diǎn),同時(shí)生成在指定路徑中對(duì)應(yīng)的節(jié)目文件夾內(nèi)

一、思路是什么?

for循環(huán)依次執(zhí)行:1、打開(kāi)視頻 2、設(shè)置截圖尺寸 3、完成截圖并存儲(chǔ)至對(duì)應(yīng)文件夾

二、代碼

1.引入庫(kù)

視頻操作涉及的庫(kù)如下:可以從Pycharm軟件內(nèi)嵌入,也可以直接下載對(duì)應(yīng)版本的whl文件直接在根目錄運(yùn)行安裝。個(gè)人感覺(jué)后者更方便點(diǎn),只是要注意下載對(duì)應(yīng)的python版本和放在正確的路徑下安裝

import cv2 import os from natsort import natsorted,ns from PIL import Image

2.確認(rèn)操作的視頻節(jié)目

代碼如下(示例):

path = r'E:\1' source_path = r'Y:/out/天津高清/【2022年節(jié)目】/' dirnames = [f for f in os.listdir(path) if os.path.isdir(path + '\\' + f)] print(dirnames)

將要操作的節(jié)目文件夾先在E:\1內(nèi)建立空的文件夾,僅用于獲取文件夾名稱數(shù)組(dirnames)
節(jié)目原始存放路徑為source_path,如下圖,節(jié)目庫(kù)內(nèi)數(shù)量很多,每個(gè)節(jié)目?jī)?nèi)約有20+視頻子集,但這邊僅操作3部節(jié)目的視頻截圖作為參考。
因此E:\1內(nèi)僅建三個(gè)空的文件夾:

3.定義好截圖方法def ResizeImage

代碼如下(示例):

def ResizeImage(filein, width, height):img = Image.open(filein)out = img.resize((width, height),Image.ANTIALIAS) #resize image with high-qualityout.save(filein)

filein 為視頻路徑,width以及height為要截取的視頻寬高。調(diào)用Image內(nèi)的resize方法進(jìn)行截取。要注意reSize的方法邏輯更多的是改變圖片的尺寸大小,即截取視頻全屏畫面然后進(jìn)行對(duì)應(yīng)尺寸的縮小。和平常使用的微信截圖或者手機(jī)自定義截圖不太一樣,簡(jiǎn)單來(lái)說(shuō)就是截屏改尺寸。

關(guān)于精確到具體位置的視頻截圖后續(xù)可以再深入研究。

4.for循環(huán)執(zhí)行

代碼如下(示例):

for dir_name in dirnames:target_path = os.path.abspath(r'E:\2' + '\\' + dir_name)if not os.path.exists(target_path):# 如果目標(biāo)路徑不存在原文件夾的話就創(chuàng)建os.makedirs(target_path)filepath = source_path+dir_namepathDir = os.listdir(filepath)pathDir1 = natsorted(pathDir,alg=ns.PATH)print(pathDir1)i=0for allDir in pathDir1:i+=1try:vc = cv2.VideoCapture(filepath+'/'+ allDir) # 讀取視頻vc.set(cv2.CAP_PROP_POS_MSEC, 25000) # 設(shè)置讀取位置,1000毫秒rval, frame = vc.read() # 讀取當(dāng)前幀,rval用于判斷讀取是否成功if rval:cv2.imencode('.jpg', frame)[1].tofile(target_path+ '\\'+str(i)+'.jpg') # 將當(dāng)前幀作為圖片保存到 cover_pathelse:print("讀取失敗")except Exception as e:print(f"獲取視頻封面圖失敗: {e}")

第一段for循環(huán)是按節(jié)目運(yùn)行,i計(jì)數(shù)用于命名。
同時(shí)定義截圖存儲(chǔ)的目標(biāo)路徑,并在目標(biāo)路徑創(chuàng)建對(duì)應(yīng)的節(jié)目名文件夾。
filepath為節(jié)目?jī)?nèi)單條視頻的路徑名,通過(guò)natsorted()方法將pathDir子集數(shù)組進(jìn)行排序。

第二段就是開(kāi)始循環(huán)嵌套了,按單個(gè)節(jié)目?jī)?nèi)各個(gè)子集運(yùn)行截圖操作。
try except 設(shè)置拋出異常,防止連續(xù)中斷影響效率
用cv包內(nèi)的VideoCapture方法讀取視頻,設(shè)置視頻時(shí)長(zhǎng)位置,25000毫秒及視頻第25秒處,讀取當(dāng)前幀。
imencode方法將幀保存到指定路徑中,由于i計(jì)數(shù)的存在,第一集就會(huì)被命名1.jpg

5.調(diào)用方法改成所需要的尺寸

代碼如下(示例):

filein = target_path + '\\' + str(i) + '.jpg'#fileout = target_path + '\\' + allDir + '.png'width = 408height = 230#type = 'png'ResizeImage(filein, width, height)

這邊設(shè)置寬408,高230。執(zhí)行ResizeImage()方法。
要注意的是調(diào)用方法因放在嵌套的循環(huán)內(nèi),否則就容易報(bào)錯(cuò)了。

測(cè)試運(yùn)行

效果如下:


E:\2成功創(chuàng)建拷貝的文件夾



三個(gè)文件夾內(nèi)全部子集的截圖已生成,并將子集以序列命名。


查看圖片屬性,為設(shè)置好的480*230

總結(jié)

測(cè)試運(yùn)行僅是三個(gè)節(jié)目文件,日常工作可能就會(huì)遇到成百上千的截圖需求,當(dāng)然一些軟件也可以做到批量圖片截圖。

但使用python基礎(chǔ)方法進(jìn)行解決還可以加入自己想要的一些要求,例如固定命名為1.2.3.4…的序列化命名。

后期會(huì)嘗試將完成的子集截圖加上文字描述。

總結(jié)

以上是生活随笔為你收集整理的Python自制日常办公辅助工具之:批量视频截图,子集固定尺寸截图+序列化命名的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。