【腳本】圖片-音視頻-壓縮文件處理

音視頻處理

      • 一,圖片操作
        • 1,轉換圖片格式
        • 2,多張圖片合成視頻
      • 二,音頻操作
        • 1,轉換音頻格式
        • 2,分割音頻為多段
        • 3,合成多段音頻
      • 三,視頻操作
        • 1,轉換視頻格式
        • 2,提取視頻中的音頻
        • 3,合成多段視頻
        • 4,為視頻添加音頻
        • 5,視頻抽幀
      • 四,壓縮文件
        • 1,Zip轉rar
        • 2,rar轉Zip

提前導入模塊

from pydub import AudioSegment
from moviepy.editor import VideoFileClip, concatenate_videoclips, AudioFileClip
from PIL import Image
import cv2
import os

一,圖片操作

1,轉換圖片格式
def convert_image(input_path, output_path, output_format):"""將圖片從一種格式轉換為另一種格式。:param input_path: 輸入圖片文件的路徑。:param output_path: 輸出圖片文件的路徑。:param output_format: 輸出圖片的格式(如 'PNG', 'JPEG' 等)。"""try:# 打開輸入圖片image = Image.open(input_path)# 將圖片保存為指定的輸出格式image.save(output_path, format=output_format)print(f"成功將圖片轉換為 {output_format} 格式并保存到 {output_path}")except Exception as e:print(f"轉換圖片格式時出現錯誤: {str(e)}")
2,多張圖片合成視頻
def images_to_video(image_folder, output_video_path, frame_rate=30):"""將多張圖片合成為視頻。:param image_folder: 包含要合成的圖片的文件夾路徑。:param output_video_path: 輸出視頻的文件路徑。:param frame_rate: 視頻的幀率(默認為30幀/秒)。"""image_files = [img for img in os.listdir(image_folder) if img.endswith(".png") or img.endswith(".jpg")]image_files.sort()  # 確保圖片按順序排列frame = cv2.imread(os.path.join(image_folder, image_files[0]))height, width, layers = frame.shapefourcc = cv2.VideoWriter_fourcc(*'mp4v')  # 選擇視頻編解碼器(可以根據需要更改)video = cv2.VideoWriter(output_video_path, fourcc, frame_rate, (width, height))for image_file in image_files:image_path = os.path.join(image_folder, image_file)frame = cv2.imread(image_path)video.write(frame)video.release()print(f"成功生成視頻:{output_video_path}")

二,音頻操作

1,轉換音頻格式
def convert_audio_format(input_path, output_path, output_format):"""將音頻文件從一種格式轉換為另一種格式。:param input_path: 輸入音頻文件的路徑。:param output_path: 輸出音頻文件的路徑。:param output_format: 輸出音頻的格式(如 'mp3', 'wav' 等)。"""# 加載音頻文件audio = AudioSegment.from_file(input_path)# 轉換并導出音頻audio.export(output_path, format=output_format)print(f"音頻已從 {input_path} 轉換為 {output_format} 格式,并保存到 {output_path}。")
2,分割音頻為多段
def split_audio_into_chunks(audio_path, format,segment_length=10000):"""將音頻文件分割成多個片段。:param audio_path: 音頻文件的路徑。:param segment_length: 分割長度,單位為毫秒。默認為 10000 毫秒(10秒)。:return: 分割后的音頻片段列表。"""# 加載音頻文件audio = AudioSegment.from_file(audio_path)# 計算分割數量length_of_audio = len(audio)number_of_chunks = length_of_audio // segment_length + (1 if length_of_audio % segment_length else 0)# 分割音頻chunks = []for i in range(number_of_chunks):start = i * segment_lengthend = start + segment_lengthchunk = audio[start:end]chunks.append(chunk)chunk.export(f"chunk{i}.mp3", format)  # 導出每個片段為單獨的文件return chunks
3,合成多段音頻
def merge_audio_files(audio_files, output_path):"""合并多個音頻文件為一個音頻文件。:param audio_files: 音頻文件路徑列表。:param output_path: 合并后的音頻文件輸出路徑。"""# 初始化空的音頻段combined = AudioSegment.empty()# 依次加載每個音頻文件并合并for file in audio_files:audio = AudioSegment.from_file(file)combined += audio# 導出合并后的音頻文件combined.export(output_path, format="mp3")print(f"音頻文件已合并并保存到 {output_path}")

三,視頻操作

1,轉換視頻格式
def convert_video_format(input_path, output_path, output_format):"""將視頻文件從一種格式轉換為另一種格式。:param input_path: 輸入視頻文件的路徑。:param output_path: 輸出視頻文件的路徑。:param output_format: 輸出視頻的格式(如 'mp4', 'avi' 等)。"""# 加載視頻文件video = VideoFileClip(input_path)# 設置輸出文件的擴展名output_path_with_format = output_path + '.' + output_format# 轉換并導出視頻video.write_videofile(output_path_with_format, codec='libx264')print(f"視頻已從 {input_path} 轉換為 {output_format} 格式,并保存到 {output_path_with_format}。")
2,提取視頻中的音頻
def extract_audio_from_video(video_path, audio_output_path):"""從視頻文件中提取音頻。:param video_path: 視頻文件的路徑。:param audio_output_path: 要保存的音頻文件的路徑。"""# 加載視頻文件video = VideoFileClip(video_path)# 提取音頻audio = video.audio# 保存音頻文件audio.write_audiofile(audio_output_path)print(f"音頻已從 {video_path} 提取并保存到 {audio_output_path}。")
3,合成多段視頻
def merge_video_files(video_files, output_path):"""合并多個視頻文件為一個視頻文件。:param video_files: 視頻文件路徑列表。:param output_path: 合并后的視頻文件輸出路徑。"""# 加載視頻文件clips = [VideoFileClip(file) for file in video_files]# 合并視頻final_clip = concatenate_videoclips(clips)# 導出合并后的視頻文件final_clip.write_videofile(output_path, codec="libx264")print(f"視頻文件已合并并保存到 {output_path}")
4,為視頻添加音頻
def add_audio_to_video(video_path, audio_path, output_path):"""將音頻文件添加到視頻文件中。:param video_path: 視頻文件的路徑。:param audio_path: 音頻文件的路徑。:param output_path: 合成后的視頻文件輸出路徑。"""# 加載視頻和音頻video_clip = VideoFileClip(video_path)audio_clip = AudioFileClip(audio_path)# 將音頻添加到視頻中video_with_audio = video_clip.set_audio(audio_clip)# 導出最終視頻文件video_with_audio.write_videofile(output_path, codec="libx264")print(f"音頻已添加到視頻中,并保存到 {output_path}")
5,視頻抽幀
def extract_frame_from_video(video_path, time, output_image_path):"""從視頻中抽取特定時間點的幀。:param video_path: 視頻文件的路徑。:param time: 抽取幀的時間點(秒)。:param output_image_path: 輸出圖像的路徑。"""# 加載視頻文件video_clip = VideoFileClip(video_path)# 獲取特定時間點的幀frame = video_clip.get_frame(time)# 將幀保存為圖像from PIL import Imageimage = Image.fromarray(frame)image.save(output_image_path)print(f"從 {video_path} 抽取的幀已保存到 {output_image_path}")

四,壓縮文件

1,Zip轉rar
def convert_zip_to_rar(zip_file_path, rar_file_path):"""將zip文件轉換為rar文件。:param zip_file_path: 輸入的zip文件路徑。:param rar_file_path: 輸出的rar文件路徑。"""try:# 打開輸入的zip文件with zipfile.ZipFile(zip_file_path, 'r') as zipf:# 創建rar文件with rarfile.RarFile(rar_file_path, 'w') as rarf:# 逐個將zip文件中的文件添加到rar文件中for file_name in zipf.namelist():with zipf.open(file_name) as zip_file:rarf.writestr(file_name, zip_file.read())print(f"成功將 {zip_file_path} 轉換為 {rar_file_path}")except Exception as e:print(f"轉換文件格式時出現錯誤: {str(e)}")
2,rar轉Zip
def convert_rar_to_zip(rar_file_path, zip_file_path):"""將RAR文件轉換為ZIP文件。:param rar_file_path: 輸入的RAR文件路徑。:param zip_file_path: 輸出的ZIP文件路徑。"""try:# 打開輸入的RAR文件with rarfile.RarFile(rar_file_path, 'r') as rarf:# 創建ZIP文件with zipfile.ZipFile(zip_file_path, 'w', zipfile.ZIP_DEFLATED) as zipf:# 逐個將RAR文件中的文件添加到ZIP文件中for file_name in rarf.namelist():with rarf.open(file_name) as rar_file:zipf.writestr(file_name, rar_file.read())print(f"成功將 {rar_file_path} 轉換為 {zip_file_path}")except Exception as e:print(f"轉換文件格式時出現錯誤: {str(e)}")

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

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

相關文章

【Go自學版】01-基礎

// 變量 var a, b, c 8, 2.3, "hello" var d float64; e : 6var A []int; var B [10]int; C : [10]int{1, 2, 3, 4} for i : 0; i < len(B); i {} for _, value : range C {} D make([]int, 3) // len 4, cap 10, 擴容方式 cap*2 E : make([]int, 4, 10) E …

掌握PyTorch數據預處理(一):讓模型表現更上一層樓!!!

引言 在PyTorch中&#xff0c;數據預處理是模型訓練過程中不可或缺的一環。通過精心優化數據&#xff0c;我們能夠確保模型在訓練時能夠更高效地學習&#xff0c;從而在實際應用中達到更好的性能。今天&#xff0c;我們將深入探討一些常用的PyTorch數據預處理技巧&#xff0c;…

C++如何通過調用ffmpeg接口對H264文件進行編碼和解碼

C可以通過調用FFmpeg的API來對H264文件進行編碼和解碼。下面是一個簡單的例子。 首先需要在代碼中包含FFmpeg的頭文件&#xff1a; extern "C" { #include <libavcodec/avcodec.h> #include <libavformat/avformat.h> #include <libswscale/swscale…

Linux系統編程:進程間通信總結

管道 在Linux中&#xff0c;管道是一種進程間通信方式&#xff0c;它允許一個進程&#xff08;寫入端&#xff09;將其輸出直接連接到另一個進程&#xff08;讀取端&#xff09;的輸入。從本質上說&#xff0c;管道也是一種文件&#xff0c;但它又和一般的文件有所不同。 具體…

Docker部署開源分布式任務調度平臺DolphinScheduler并實現遠程訪問辦公

文章目錄 前言1. 安裝部署DolphinScheduler1.1 啟動服務 2. 登錄DolphinScheduler界面3. 安裝內網穿透工具4. 配置Dolphin Scheduler公網地址5. 固定DolphinScheduler公網地址 前言 本篇教程和大家分享一下DolphinScheduler的安裝部署及如何實現公網遠程訪問&#xff0c;結合內…

前端知識筆記(二十七)———CSS核心功能手冊:從熟悉到精通

參考HTML代碼 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-wi…

12.9_黑馬數據結構與算法筆記Java

目錄 057 多路遞歸 e03 楊輝三角2 thinking&#xff1a;二維數組的動態初始化&#xff1f; 057 多路遞歸 e03 楊輝三角3 058 鏈表 e01 反轉單向鏈表1 058 鏈表 e01 反轉單向鏈表2 058 鏈表 e01 反轉單向鏈表3 遞歸 058 鏈表 e01 反轉單向鏈表4 為什么是returnn1呢&…

【Cisco Packet Tracer】路由器 NAT實驗

NAT的實現方式有三種&#xff0c;即靜態轉換Static Nat、動態轉換Dynamic Nat和端口多路復用OverLoad。 靜態轉換是指內部本地地址一對一轉換成內部全局地址&#xff0c;相當內部本地的每一臺PC都綁定了一個全局地址。一般用于在內網中對外提供服務的服務器。 [3] 動態轉換是指…

C++ 迭代器

迭代器 迭代器類似于指針類型&#xff0c;也提供了對對象的間接訪問。 就迭代器而言&#xff0c;其對象是容器中的元素或 string 對象中的字符。 獲取迭代器 容器的迭代器類型 使用作用域運算符來說明我們希望使用的類型成員&#xff1b;例&#xff1a;string::iterator it…

探秘MSSQL存儲過程:功能、用法及實戰案例

在現代軟件開發中&#xff0c;高效地操作數據庫是至關重要的。而MSSQL&#xff08;Microsoft SQL Server&#xff09;作為一款強大的關系型數據庫管理系統&#xff0c;為我們提供了豐富的功能和工具來處理數據。其中&#xff0c;MSSQL存儲過程是一項強大而又常用的功能&#xf…

改進YOLOv8注意力系列一:結合ACmix、Biformer、BAM注意力機制

???改進YOLOv8注意力系列一:結合ACmix、Biformer、BAM注意力機制 代碼ACmixBiFormerBAMBlock加入方法各種yaml加入結構本文提供了改進 YOLOv8注意力系列包含不同的注意力機制以及多種加入方式,在本文中具有完整的代碼和包含多種更有效加入YOLOv8中的yaml結構,讀者可以獲…

C++ 的關鍵字(保留字)介紹

一.C中部分關鍵字的用法 1. auto 關鍵字auto是C11引入的&#xff0c;它可以用于變量聲明和函數返回類型的推導。當你不關心變量的具體類型時&#xff0c;可以使用auto來讓編譯器根據初始化表達式推導出變量的類型。這樣可以簡化代碼&#xff0c;提高可讀性。 1.在for循環中遍…

Mysql索引一篇就夠了

索引 定義 索引是對數據庫表中一列或者多列的值進行排序的結構。 目的 數據庫索引好比一本書的目錄&#xff0c;提高查詢效率。但是為表設置索引要付出相應的代價&#xff1a; 增加了數據庫的存儲空間 在插入和修改時需花費更多的時間&#xff08;因為索引也要隨之變動&#…

一、C#筆記

1.注釋 /*多行注釋*/class HelloWorld{ void Hello(){Console.WriteLine("Hello!");//單行注釋}} 2.理解語句 2.1方法、語法、語義 2.2使用標識符 標識符語法規則&#xff1a; 只能使用字母&#xff08;大寫和小寫&#xff09;、數字和下劃…

C++相關閑碎記錄(5)

1、容器提供的類型 2、Array Array大小固定&#xff0c;只允許替換元素的值&#xff0c;不能增加或者移除元素改變大小。Array是一種有序集合&#xff0c;支持隨機訪問。 std::array<int, 4> x; //elements of x have undefined value std::array<int, 5> x {…

滲透測試——七、網站漏洞——命令注入和跨站請求偽造(CSRF)

滲透測試 一、命令注入二、跨站請求偽造(CSRF)三、命令注入頁面之注人測試四、CSRF頁面之請求偽造測試 一、命令注入 命令注入(命令執行) 漏洞是指在網頁代碼中有時需要調用一些執行系統命令的函數例如 system()、exec()、shell_exec()、eval()、passthru()&#xff0c;代碼未…

基于ssm在線云音樂系統的設計與實現論文

摘 要 隨著移動互聯網時代的發展&#xff0c;網絡的使用越來越普及&#xff0c;用戶在獲取和存儲信息方面也會有激動人心的時刻。音樂也將慢慢融入人們的生活中。影響和改變我們的生活。隨著當今各種流行音樂的流行&#xff0c;人們在日常生活中經常會用到的就是在線云音樂系統…

走迷宮(詳細分析)

目錄 一、課題描述 輸入樣例&#xff1a; 輸出樣例&#xff1a; 二、需求分析 輸入的形式和輸入值的范圍&#xff1a; 輸出的形式&#xff1a; 程序所能達到的功能&#xff1a; 三、概要設計 四、流程圖 五 、代碼詳細注釋 六、測試數據和結果 一、課題描述 以一個…

freeswitch webrtc video_demo客戶端進行MCU的視頻會議

系統環境 一、編譯服務器和加載模塊 二、下載編譯指定版本video_demo 三、配置verto.conf.xml 1.修改配置文件 2.重新啟動 四、MCU通話測試 1.如何使用video_demo 2.測試結果 五、MCU的通話原理及音頻/視頻/布局/管理員等參數配置 附錄 freeswitch微信交流群 系統環境 lsb_rel…

MyBatis處理映射關系

在Mybatis實現數據處理過程中&#xff0c;字段名符合數據庫的規則&#xff0c;屬性一般為駝峰規則&#xff0c;因此字段名和屬性名通常不一致&#xff0c;此時可以通過以下兩種方式對數據庫字段進行映射處理&#xff1a; 為字段起別名&#xff0c;保證和實體類中的屬性名一致在…