【Python】圖像批量合成視頻,并以文件夾名稱命名合成的視頻

一個文件夾中有多個子文件夾,子文件夾中有多張圖像。如何把批量把子文件夾中的圖像合成視頻,視頻名稱是子文件夾的名稱,生成的視頻保存到指定文件夾,效果記錄。

代碼

import os
import cv2def create_video_from_images(image_folder, output_folder, fps=30):# 獲取子文件夾名稱,這將作為視頻文件的名稱video_name = os.path.basename(image_folder)video_path = os.path.join(output_folder, f"{video_name}.mp4")# 獲取子文件夾中的所有圖像文件images = [img for img in os.listdir(image_folder) if img.endswith((".png", ".jpg", ".jpeg", ".bmp", ".tiff"))]# 確保圖像列表不為空if not images:print(f"No images found in {image_folder}")return# 對圖像文件進行排序,確保它們按照正確的順序合成視頻images.sort()# 讀取第一張圖像以獲取幀尺寸frame = cv2.imread(os.path.join(image_folder, images[0]))height, width, layers = frame.shape# 定義編碼器并創建VideoWriter對象fourcc = cv2.VideoWriter_fourcc(*'mp4v')  # 使用mp4編碼video = cv2.VideoWriter(video_path, fourcc, fps, (width, height))# 遍歷所有圖像并將它們寫入視頻文件for image_file in images:image_path = os.path.join(image_folder, image_file)video.write(cv2.imread(image_path))# 釋放VideoWriter并關閉所有窗口video.release()cv2.destroyAllWindows()print(f"Video {video_path} created successfully.")# 主函數,用于遍歷主文件夾中的所有子文件夾并創建視頻
def main(main_folder, output_folder):# 確保輸出文件夾存在,如果不存在則創建它if not os.path.exists(output_folder):os.makedirs(output_folder)# 遍歷主文件夾中的所有子文件夾for subdir, _, files in os.walk(main_folder):# 檢查子文件夾中是否包含圖像文件if any(file.endswith((".png", ".jpg", ".jpeg", ".bmp", ".tiff")) for file in files):create_video_from_images(subdir, output_folder)# 設置主文件夾和輸出文件夾的路徑
main_folder_path = "F:/test_video/image/"
output_folder_path = "F:/test_video/video/"# 調用主函數開始處理
main(main_folder_path, output_folder_path)

代碼解釋:

  1. create_video_from_images 函數接收一個子文件夾路徑和輸出文件夾路徑作為參數,用于將子文件夾中的圖像合成視頻。

  2. 在函數中,首先通過 os.path.basename 獲取子文件夾的名稱,這將用作視頻文件的名稱。然后,拼接輸出視頻文件的完整路徑。

  3. 使用列表推導式查找子文件夾中的所有圖像文件,并檢查列表是否非空。

  4. 對圖像文件進行排序,確保它們按照文件名順序被讀取和寫入視頻。

  5. 讀取第一張圖像來確定幀的尺寸,這對于創建 VideoWriter 對象是必需的。

  6. 定義視頻編碼器和創建 VideoWriter 對象。這里使用 ‘mp4v’ 編碼來創建MP4格式的視頻。

  7. 遍歷子文件夾中的所有圖像,并使用 VideoWriter 的 write 方法將它們寫入視頻文件。

  8. 釋放 VideoWriter 對象并關閉所有OpenCV窗口。

  9. main 函數遍歷主文件夾中的所有子文件夾,并調用 create_video_from_images 函數來為每個子文件夾創建視頻。

10 在 main 函數中,首先檢查輸出文件夾是否存在,如果不存在則創建它。

  1. 最后,設置主文件夾和輸出文件夾的路徑,并調用 main 函數開始處理。

效果展示

子文件夾
在這里插入圖片描述
每個子文件夾中都有若干圖像
在這里插入圖片描述
合成視頻并以子文件夾名稱命名
在這里插入圖片描述

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

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

相關文章

leetcode刷題(6):二叉樹的使用

文章目錄 104. 二叉樹的最大深度解題思路c 實現 94. 二叉樹的中序遍歷解題思路c 實現 101. 對稱二叉樹解題思路c 實現 96. 不同的二叉搜索樹解題思路c 實現 102. 二叉樹的層序遍歷解題思路c 實現 104. 二叉樹的最大深度 題目: 給定一個二叉樹 root ,返回其最大深度…

重新認識Flutter跨平臺技術(上)

背景 2017年,Flutter剛推出來的時候,正好自己在做TV Launcher開發的工作。 我們知道TV Launcher是Android TV操作系統中的一個啟動器應用程序。它負責在打開電視時展示給用戶的主要界面,包括應用程序圖標、推薦內容等。通過Android TV Launcher,用戶可以方便地瀏覽和啟動…

ALV 圖標顯示

前言 在ABAP ALV中,使用fieldcat來定義列表中每個字段的顯示屬性,包括圖標(Icon)的顯示。圖標可以在ALV列表中為特定列的行或標題添加圖形元素,以增強視覺提示或傳達附加信息。 ICON查詢 圖標的名稱用事務碼”ICON“進…

智能BI(后端)-- 系統異步化

文章目錄 系統問題分析什么是異步化?業務流程分析標準異步化的業務流程系統業務流程 線程池為什么需要線程池?線程池兩種實現方式線程池的參數線程池的開發 項目異步化改造 系統問題分析 問題場景:調用的服務能力有限,或者接口的…

離岸公司+外貿

為什么外貿公司老板都喜歡注冊離岸公司呢?怎樣利用離岸公司做進出口貿易呢? 今天大家花一分鐘時間來了解清楚 第一步就是注冊一家離岸公司,將這個離岸公司作為國際外貿的中轉站,與國外客戶簽訂單,你從國內工廠采購商…

【文檔理解】TextMonkey:一種OCR-Free的用于文檔理解的多模態大模型

背景 傳統的信息提取,通常是從文本中提取信息,相關技術也比較成熟。然而對于復雜領域,例如圖片,文檔等形式的數據,想要提取出高質量的、可信的數據難度就比較大了,這種任務也常稱為:視覺文檔理…

CTF網絡安全大賽web題目:just_sqli

這道題目是bugku的web題目 題目的 描  述: KosenCTF{} 原文鏈接&#xff1a; CTF網絡安全大賽web題目&#xff1a;just_sqli - 紅客網-網絡安全與滲透技術 題目Web源代碼&#xff1a; <?php$user NULL; $is_admin 0;if (isset($_GET["source"])) {highlig…

齊護K210系列教程(二十七)_語音識別

語音識別 1.燒錄固件和模型2.語音識別程序2.1訓練并識別2.2使用本地文件語音識別 3.課程資源聯系我們 1.燒錄固件和模型 注&#xff1a;本應用只適用于有麥克風功能的型號&#xff1a;AIstart_pro、AIstart_掌機、AIstart_Mini, 其它型號不支持&#xff01; 機器碼生成以及模…

linux中遠程服務器上傳輸文件的10個sftp命令示例

目錄 1. 如何連接到 SFTP 2. 幫助 3.檢查當前工作目錄 4. 使用 sftp 列出文件 遠程 本地 5. 使用 sftp 上傳文件 6. 使用 sftp 上傳多個文件 7. 使用 sftp 下載文件 8. 在 sftp 中切換目錄 遠程 本地 9. 使用 sftp 創建目錄 10. 使用 sftp 刪除目錄 11. 退出 sf…

(001)apidoc 的安裝

安裝 1.確定 node 和 npm 的匹配版本 node -vv10.14.1# 切換node 版本 nvm list nvm use 20.12.22.安裝 apidoc。 npm install -g apidoc3.生成文檔&#xff1a; apidoc -i ../ -o document/ -f ".java$"-i &#xff1a;指定掃描路徑。-o&#xff1a;輸出目錄。…

golang并發(同步)多任務高性能執行聚合

taskgroup golang并發執行多任務&#xff0c;并聚合多任務結果。 使用文檔、 項目github 使用: go get github.com/mlee-msl/taskgroup 功能特點 并發安全的執行多個任務將多個任務的結果進行聚合通過扇出/扇入模式&#xff0c;結合線程安全channel實現高效協程間通信多任務復…

【Linux:環境變量】

環境變量一般是指在操作系統中用來指定操作系統環境的一些參數 常見的環境變量&#xff1a; PATH 指定可執行程序的搜索路徑 系統級的文件&#xff1a;/etc/bashrc 用戶級文件&#xff1a;~/.bashrc ~/.bash_profile HOME 指定用戶的主要工作目錄&#xff08;當前用…

kettle從入門到精通 第六十一課 ETL之kettle 任務調度器,輕松使用xxl-job調用kettle中的job和trans

想真正學習或者提升自己的ETL領域知識的朋友歡迎進群&#xff0c;一起學習&#xff0c;共同進步。若二維碼失效&#xff0c;公眾號后臺加我微信入群&#xff0c;備注kettle。 1、大家都知道kettle設計的job流程文件有個缺點&#xff1a;只能設置簡單的定時任務&#xff0c;無法…

DPDK:用rte_wmb()來保序,對ARM和IA而言,RTE_WMB()的實現有何不同

rte_wmb()函數在DPDK中用于實現寫入屏障&#xff08;Write Memory Barrier&#xff09;&#xff0c;它的作用是確保在CPU執行寫操作之前&#xff0c;所有先前的寫操作已經被完全刷新到內存中。這個函數在IA和ARM處理器上的實現有一些不同。 對于Intel Architecture (IA)處理器而…

PHP黑魔法之既是0又是1/switch/$a==0可用.繞過(非數字都可繞過)/PHP://偽協議繞過

1、既是0又是1的情況 $a==1 & $test[$a]=t 時 知識點1)php在處理數字時,如果數字的位數超過 16 位是可以弱等于1的,也就是 var_dump( 9999999999999999999 == 1 );//true 因為當數字位數超過 16 位時,是將該數字轉換成了數值為 1 的字符串進行處理 知識點2)在科學…

LabVIEW和usrp連接實現ofdm通信系統 如何實現

1. 硬件準備 USRP設備&#xff1a;選擇合適的USRP硬件&#xff08;如USRP B210或N210&#xff09;&#xff0c;并確保其與計算機連接&#xff08;通常通過USB或以太網&#xff09;。天線&#xff1a;根據頻段需求選擇合適的天線。 2. 軟件安裝 LabVIEW&#xff1a;安裝LabVI…

【Golang】 Golang 的 GORM 庫中的 Rows 函數

文章目錄 前言一、Rows 函數解釋二、代碼實現三、總結 前言 在使用 Go 語言進行數據庫操作時&#xff0c;GORM&#xff08;Go Object-Relational Mapping&#xff09;庫是一個常用的工具。它提供了一種簡潔和強大的方式來處理數據庫操作。本文將介紹 GORM 庫中的 Rows 函數&am…

數據庫-索引(高級篇)

文章目錄 索引概念&#xff1f;索引演示&#xff1f;索引的優劣&#xff1f;為什么使用索引就快&#xff1f;本篇小結 更多相關內容可查看 索引概念&#xff1f; 索引&#xff08;index&#xff09;是幫助MySQL高效獲取數據的數據結構(有序)。在數據之外&#xff0c;數據庫系統…

生成完美口型同步的 AI 數字人視頻

目錄 摘要 關鍵詞 1 前言 1.1 研究背景 1.2 研究意義 2 技術框架 2.1 深度學習框架 2.2 語音識別 2.3 面部動作捕捉和口型同步 2.4 綜合項目 3 實現過程 3.1 環境搭建 3.2 代碼開發 3.3 整合代碼 3.4 部署 3.5 更多細節 4 測試過程 4.1 數據準備 4.2 面部檢測…

語法分析-文法

如果對于一部文法中&#xff0c;存在至少一個句子有兩個或者兩個以上的語法樹則該文法是二義性的。 我們可以以上面的例子進行解釋&#xff0c;對于第棵個語法樹&#xff0c;我們可以看到是先進行了加法運算再進行的乘法運算&#xff0c;因為需要先把EE作為整體運算完后再成為E…