常用腳本-持續更新(文件重命名、視頻抽幀、拆幀)

所有代碼位置:Learning-Notebook-Codes/Python/常用腳本

1. 文件重命名

1.1 說明

  • 腳本路徑:codes/files_rename.py
  • 腳本說明:可以自動重命名某個文件夾下指定類型的文件。
    • 修改前文件名稱: img1.jpg
    • 修改后文件名稱: Le0v1n-20231123-X-0001.jpg

1.2 代碼

import os
import tqdm
import datetime"""============================ 需要修改的地方 ==================================="""
SRC_PATH = 'Python/常用腳本/EXAMPLE_FOLDER'  # 文件夾路徑
file_type = ('.png', '.jpg', '.jpeg', '.gif')  # 想要重命名的文件類型# -------------------重命名相關------------------
retain_previous_name = False  # 是否保留之前的名稱
new_name = "Le0v1n"  # retain_previous_name為False時生效
use_date_stamp = True  # 是否使用時間戳 -> e.g. 20231123
comment = "X"  # 備注
use_serial_numbering = True  # 是否使用順序的編號 -> 1, 2, 3, 4, 5, 6, ...
start_number = 1  # 從編號幾開始 -> e.g. 1: 從 0001 開始編號
numbering_placeholder = 4  # 編號保留的占位 -> e.g. 0001, 0002, 0003, ...
hyphen = '-'  # 連字符 -> e.g. filename-0001.jpg
"""==============================================================================="""# 獲取目錄中的所有圖片文件
files_list = [file for file in os.listdir(SRC_PATH) if file.lower().endswith(file_type)]"------------計數------------"
TOTAL_FILES_NUM = len(files_list)  # 需要重命名的文件數量
RENAME_NUM = 0  # 重命名成功數量
"---------------------------"# 獲取當前時間并格式化時間戳
timestamp = datetime.datetime.now().strftime("%Y%m%d")# 遍歷文件
process_bar = tqdm.tqdm(total=TOTAL_FILES_NUM, desc="為指定格式的文件重命名", unit='file')  # 創建進度條
for idx, file_name in enumerate(files_list):file_pre, file_ext = os.path.splitext(file_name)  # 獲得文件名和后綴process_bar.set_description(f"rename for \033[1;31m{file_name}\033[0m")# 構建新的文件名if retain_previous_name:  # 保留原有的名稱NEW_FILE_NAME = f"{file_pre}"elif new_name:  # 不保留原有的名稱且新名稱存在NEW_FILE_NAME = new_nameelse:  # 不保留原有的名稱也沒有新名稱 -> 報錯raise KeyError(f"不保留原有的名稱也沒有新名稱!")if use_date_stamp:  # 使用時間戳NEW_FILE_NAME += f"{hyphen}{timestamp}"if comment:  # 添加備注NEW_FILE_NAME += f"{hyphen}{comment}" if use_serial_numbering:  # 使用編號NEW_FILE_NAME += f"{hyphen}{idx + start_number:0{numbering_placeholder}d}"# 加上擴展名NEW_FILE_NAME += file_ext# 開始重命名文件         _src = os.path.join(SRC_PATH, file_name)  # 舊文件路徑_dst = os.path.join(SRC_PATH, NEW_FILE_NAME)  # 新文件路徑os.rename(_src, _dst)  # 重命名文件RENAME_NUM += 1process_bar.update(1)
process_bar.close()print(f"👌 文件重命名完成: {RENAME_NUM}/{TOTAL_FILES_NUM}")

2. 視頻抽幀

1.1 說明

  • 腳本路徑:codes/extract_frames.py
  • 腳本說明:根據幀間隔對某個文件夾下指定類型的視頻文件進行抽幀,得到系列圖片。
    • 視頻文件所在文件夾名稱: EXAMPLE_FOLDER
    • 抽幀得到的文件夾名稱: EXAMPLE_FOLDER/extract_frames_results/test_vid_0001.jpg

1.2 代碼

import cv2
import os
import tqdm
from utils import create_folder"""============================ 需要修改的地方 ==================================="""
SRC_PATH = "Python/常用腳本/EXAMPLE_FOLDER"  # 原始視頻路徑
frame_interval = 10  # 視頻采樣間隔,越小采樣率越高 -> 60 | 30 | 15 | 10
video_type = ['.mp4', '.avi']  # 視頻格式(.mp4 | .avi)DST_PATH = "extract_frames_results"  # 保存圖片文件夾名稱
save_img_format = '.jpg'  # 保存的圖片格式(.jpg | .png)
"""==============================================================================="""# 構建路徑
results_imgs_path = os.path.join(SRC_PATH, DST_PATH)  # 保存圖片路徑# 得到存放所有視頻的list
video_list = [x for x in os.listdir(SRC_PATH) if os.path.splitext(x)[-1] in video_type]"------------計數------------"
TOTAL_VID_NUM = len(video_list)
SUCCEED_NUM = 0  # 完成視頻的個數
TOTAL_IMG_NUM = 0  # 統計得到的所有圖片數量
"---------------------------"print(f"\033[1;31m[SRC]視頻路徑為: {SRC_PATH}\033[0m"f"\n\t\033[1;32m視頻個數: {TOTAL_VID_NUM}\033[0m"f"\n\033[1;31m[DST]圖片保存路徑為: {DST_PATH}\033[0m"f"\n\t\033[1;32m保存的圖片格式為: {save_img_format}\033[0m"f"\n\n請輸入 \033[1;31m'yes'\033[0m 繼續,輸入其他停止")
_INPUT = input()
if _INPUT != "yes":exit()create_folder(results_imgs_path, verbose=True)  # 創建文件夾# 創建一個tqdm進度條對象
progress_bar = tqdm.tqdm(total=len(video_list), desc="視頻拆幀...", unit="vid")
statistics_dict = dict()  # 創建一個字典,用于統計
for vid_name in video_list:  # 遍歷所有的視頻save_number = 1  # 記錄當前視頻保存的frame個數vid_pre, vid_ext = os.path.splitext(vid_name)  # 獲取文件名和后綴vid_path = os.path.join(SRC_PATH, vid_name)  # 視頻完整路徑# 創建VideoCapture對象vc = cv2.VideoCapture(vid_path)# 檢查視頻是否成功打開if not vc.isOpened():continue# 逐幀讀取視頻并保存為圖片frame_count = 0while True:# 讀取一幀rval, frame = vc.read()# 檢查是否成功讀取幀if not rval:  # 讀取幀失敗break# 每隔 frame_interval 幀保存一次圖片if frame_count % frame_interval == 0:# 生成圖片文件名frame_name = f"{vid_pre}_{save_number:04d}{save_img_format}"frame_path = os.path.join(results_imgs_path, frame_name)  # Python\常用腳本\EXAMPLE_FOLDER\extract_frames_results\test_vid_0016.jpgprogress_bar.set_description(f"\033[1;31m{vid_name}\033[0m -> "f"\033[1;36m{save_number * frame_interval:04d}\033[0m"f" ({save_number})")  # 更新tqdm的描述# 保存幀為圖片cv2.imwrite(frame_path, frame)save_number += 1# 幀數加1frame_count += 1# 釋放VideoCapture對象vc.release()TOTAL_IMG_NUM += save_number  # 更新圖片數量SUCCEED_NUM += 1statistics_dict[vid_pre] = save_number  # 更新字典,記錄當前視頻得到的frame個數progress_bar.update()  
progress_bar.close()print("------------------------------------------------------------------")
_cont = 0
for k, v in statistics_dict.items():print(f"\033[1;34m"f"👌 1. [{k}] 得到 frame 個數 -> {v}"f"\033[0m")_cont += 1
print()
print(f"\033[1;31m"f"👌👌👌 視頻拆幀 ({TOTAL_VID_NUM}個)完成,總共得到[{TOTAL_IMG_NUM}]張{save_img_format}圖片!"f"\033[0m")
print("------------------------------------------------------------------")

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/164151.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/164151.shtml
英文地址,請注明出處:http://en.pswp.cn/news/164151.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python-opencv在圖片中繪制各種圖形

python-opencv在圖片中繪制各種圖形 1.繪制直線 2.繪制矩形 3.繪制圓 4.繪制橢圓 5.繪制多邊形 6.嵌入文字 實現代碼都在下面了,代碼中參數做了簡單注釋 import copy import math import matplotlib.pyplot as plt import matplotlib as mpl import numpy a…

window非gui形式運行jmeter腳本

配置jmeter環境 新增1個環境變量: JMETER_HOMED:\Tools\apache-jmeter-5.0 【jmeter文件夾】 編輯CLASSPATH: CLASSPATH后面加上 %JMETER_HOME%\lib\ext\ApacheJMeter_core.jar; %JMETER_HOME%\lib\jorphan.jar; 編輯path: path后面加上 %JM…

二次開發問題匯總【C#】

1未將對象引用到實例。 接口函數的參數不對。解決辦法【用fixed去限制數組長度】 unsafe public struct VCI_BOARD_INFO {public UInt16 hw_Version;public UInt16 fw_Version;public UInt16 dr_Version;public UInt16 in_Version;public UInt16 irq_Num;public byte can_Num;…

C語言眾數問題(ZZULIOJ1201:眾數問題)

題目描述 給定含有n個元素的多重集合S,每個元素在S中出現的次數稱為該元素的重數。多重集S中重數最大的元素稱為眾數。 例如,S{1,2,2,2,3,5}。多重集S的眾數是2,其重數為3。 編程任務…

前端學習--React(3)

一、Redux 集中狀態管理工具,不需要react即可使用,每個store的數據都是獨立于組件之外的 vue小鏈接:vuex/pinia 基本使用 Redux將數據修改流程分成三個概念,state、action和reducer state - 一個對象 存放我們管理的數據狀態 a…

1688API如何獲取商品詳情信息(關鍵詞搜索商品列表),1688API接口開發系列

1688商品詳情接口是指1688平臺提供的API接口,用于獲取商品詳情信息。通過該接口,您可以獲取到商品的詳細信息,包括商品標題、價格、庫存、描述、圖片等。 要使用1688商品詳情接口,您需要先申請1688的API權限,并獲取ac…

UML建模圖文詳解教程01——Enterprise Architect安裝與使用

版權聲明 本文原創作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl Enterprise Architect概述 官方網站:https://www.sparxsystems.cn/products/ea/;圖示如下: Enterprise Architect是一個全功能的、基于…

Python入門02 算術運算符及優先級

目錄 1 REPL2 啟動3 算術運算符4 算術運算符的優先級5 清除屏幕總結 上一節我們安裝了Python的開發環境,本節我們介紹一下REPL的概念 1 REPL 首先解釋一下python執行代碼的一個交互環境的定義: Python REPL(Read-Eval-Print Loop&#xff0c…

靠這份求職指南找工作,穩了!

大家好,我是魚皮。為了幫助朋友們更好的準備秋招,我們精心匯總整理了 編程導航星球 內魚友反饋的 200 多個高頻求職問題和 150 多篇面經、以及最新秋招企業投遞信息表,解答大家的求職困惑。 一、最新秋招投遞信息表 目前已匯總整理了 600 多家…

C百題--3.求未知數

1.問題描述 一個正整數&#xff0c;它加上100后是一個完全平方數&#xff0c;再加上168又是一個完全平方數&#xff0c;請問該數是多少&#xff1f; 2.解決思路 遍歷這個數&#xff0c;讓其從1開始&#xff0c;到100000結束 3.代碼實現 #include<stdio.h> #include&…

2.C語言--鏈表-頭插、頭刪、尾插、尾刪、查找、插入和刪除

文章目錄 簡介動態順序表結構體1.頭插功能2.頭刪功能3.尾插功能4.尾刪功能5.查找功能6.插入功能6.1 指定位置之&#xff08;前&#xff09;去插入一個節點6.2 指定位置之&#xff08;后&#xff09;去插入一個節點 7.刪除功能7.1 刪除指定位置的數據-時間復雜度O(N)7.2 刪除指定…

配置hikari數據庫連接池時多數據源不生效

1.原始配置&#xff0c;改造前&#xff1a; spring:# 配置數據源信息datasource:dynamic:#設置默認的數據源或者數據源組,默認值即為masterprimary: masterstrict: truedatasource:#這里采用了配置文件取值的方式&#xff0c;可以直接替換為數據庫連接master:url: jdbc:postgr…

【LLS-Player】音視頻幀的回調過程

RtdSinkInterface 實現者用于從SDK獲取音視頻幀 class RtdSinkInterface {public:virtual ~RtdSinkInterface() = default;virtual void OnAudioFrame(const RtdAudioFrame& fra

電子學會C/C++編程等級考試2023年03月(一級)真題解析

C/C++等級考試(1~8級)全部真題?點這里 第1題:字符長方形 給定一個字符,用它構造一個長為4個字符,寬為3個字符的長方形,可以參考樣例輸出。 時間限制:1000 內存限制:65536輸入 輸入只有一行, 包含一個字符。輸出 該字符構成的長方形,長4個字符,寬3個字符。樣例輸入…

如何使用Fiddler進行弱網測試

測試APP、web經常需要用到弱網測試&#xff0c;也就是在信號差、網絡慢的情況下進行測試。我們自己平常在使用手機APP時&#xff0c;在地鐵、電梯、車庫等場景經常會遇到會話中斷、超時等情況&#xff0c;這種就屬于弱網。 普通的弱網測試可以選擇第三方工具對帶寬、丟包、延時…

python數據類型之字典、元組

一、字典 1、定義字典 字典是 有序&#xff08;3.6以前無序&#xff09;、鍵不重復 且 元素只能是鍵值對的可變的 個 容器。鍵不重復&#xff0c;重復則會被覆蓋 如下定義一個字典 # 使用大括號 {} 來創建空字典 test_dic1 {} # 使用內建函數 dict() 創建字典&#xff1a;…

【華為OD題庫-032】數字游戲-java

題目 小明玩一個游戲。系統發1n張牌&#xff0c;每張牌上有一個整數。第一張給小明&#xff0c;后n張按照發牌順序排成連續的一行。需要小明判斷&#xff0c;后n張牌中&#xff0c;是否存在連續的若干張牌&#xff0c;其和可以整除小明手中牌上的數字. 輸入描述: 輸入數據有多組…

嵌入式基礎知識學習:Flash、EEPROM、RAM、ROM

https://blog.csdn.net/y673533511/article/details/87913989 FLASH存儲器又稱閃存&#xff0c;它結合了ROM和RAM的長處&#xff0c;不僅具備電子可擦出可編程(EEPROM) 的性能&#xff0c;還不會斷電丟失數據同時可以快速讀取數據 (NVRAM 的優勢)&#xff0c;U 盤和MP3 里用的…

[論文筆記]MatchPyramid

引言 又一篇文本匹配論文Text Matching as Image Recognition,論文題目是 文本匹配當成圖像識別。 挺有意思的一篇工作,我們來看它是如何實現的。 作者受到卷積神經網絡在圖像識別中成功應用的啟發,其中神經元可以捕獲很多復雜的模式,作者提出將文本匹配看作是圖像識別任…