当前位置: 首页 > news >正文

【脚本】图片-音视频-压缩文件处理

音视频处理

      • 一,图片操作
        • 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)}")

相关文章:

【脚本】图片-音视频-压缩文件处理

音视频处理 一,图片操作1,转换图片格式2,多张图片合成视频 二,音频操作1,转换音频格式2,分割音频为多段3,合成多段音频 三,视频操作1,转换视频格式2,提取视频…...

跨品牌的手机要怎样相互投屏?iPhone和iPad怎么相互投屏?

选择买不同品牌的手机是基于品牌声誉、产品特点、价格和性价比等多个因素的综合考虑。每个人的需求和偏好不同,选择适合自己的手机品牌是一个个人化的决策。 一些品牌可能更加注重摄影功能,而其他品牌可能更加注重性能和速度。选择不同品牌的手机可以根据…...

图像特征提取-角点

角点特征 大多数人都玩过拼图游戏。首先拿到完整图像的碎片,然后把这些碎片以正确的方式排列起来从而重建这幅图像。如果把拼图游戏的原理写成计算机程序,那计算机就也会玩拼图游戏了。 在拼图时,我们要寻找一些唯一的特征,这些…...

N26:构建无缝体验的平台工程之路-Part 2

​ 在第一​​​​​​部分,我们介绍了 N26 团队为达成 “在 Day 1 实现轻松部署” 的目标而设定的战略规划和开发人员体验图,在这一部分,我们将带您了解该团队如何构建最简可行平台以及该平台如何运作。 01 计划构建最简可行平台 我们通…...

【Hadoop-Distcp】通过Distcp的方式进行两个HDFS集群间的数据迁移

【Hadoop-Distcp】通过Distcp的方式进行两个HDFS集群间的数据迁移 1)Distcp 工具简介及参数说明2)Shell 脚本 1)Distcp 工具简介及参数说明 【Hadoop-Distcp】工具简介及参数说明 2)Shell 脚本 应用场景: 两个实时集…...

【Linux】使用Bash和GNU Parallel并行解压缩文件

介绍 在本教程中,我们将学习如何使用Bash脚本和GNU Parallel实现高效并行解压缩多个文件。这种方法在处理大量文件时可以显著加快提取过程。 先决条件 确保系统上已安装以下内容: BashGNU Parallel 你可以使用以下命令在不同Linux系统上安装它们&am…...

T天池SQL训练营(五)-窗口函数等

–天池龙珠计划SQL训练营 5.1窗口函数 5.1.1窗口函数概念及基本的使用方法 窗口函数也称为OLAP函数。OLAP 是OnLine AnalyticalProcessing 的简称,意思是对数据库数据进行实时分析处理。 为了便于理解,称之为窗口函数。常规的SELECT语句都是对整张表进…...

道可云元宇宙每日资讯|上海市区块链关键技术攻关专项项目立项清单公布

道可云元宇宙每日简报(2023年12月11日)讯,今日元宇宙新鲜事有: 上海市2023年度区块链关键技术攻关专项项目立项清单公布 据上海市科学技术委员会近日发布通知,上海市2023年度“科技创新行动计划”区块链关键技术攻关…...

大语言模型有什么意义?亚马逊训练自己的大语言模型有什么用?

近年来,大语言模型的崭露头角引起了广泛的关注,成为科技领域的一项重要突破。而在这个领域的巅峰之上,亚马逊云科技一直致力于推动人工智能的发展。那么,作为一家全球科技巨头,亚马逊为何会如此注重大语言模型的研发与…...

RabbitMQ-学习笔记(初识 RabbitMQ)

本篇文章学习于 bilibili黑马 的视频 (狗头保命) 同步通讯 & 异步通讯 (RabbitMQ 的前置知识) 同步通讯:类似打电话,只有对方接受了你发起的请求,双方才能进行通讯, 同一时刻你只能跟一个人打视频电话。异步通讯:类似发信息&#xff0c…...

SQL Update语句

SQL Update语句 大家好,我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! SQL Update语句:数据库操作高招解析 数据库是我们搭建查券返利机器人的重要组成部分&…...

C语言-WIN32API介绍

Windows API 从第一个32位的Windows开始就出现了,就叫做Win32API.它是一个纯C的函数库,就和C标准库一样,使你可以写Windows应用程序过去很多Windows程序是用这个方式做出来的 main()? main()成为C语言的入口函数其实和C语言本身无关&…...

TFIDF、BM25、编辑距离、倒排索引

TFIDF TF刻画了词语t对某篇文档的重要性,IDF刻画了词语t对整个文档集的重要性...

MySQL之DML语句

文章目录 DML语句创建表添加表字段**插入数据**查询数据更新数据替换数据删除数据清除表数据删除表 DML语句 数据操作语言DML(Data Manipulation Langua) 是SQL语言的一个分类,用于对表的数据进行增,删,改&#xff0c…...

kubernetes集群常用指令

目录 1.1 基础控制指令 1.2 命令实践 1.3 备注 1.1 基础控制指令 # 查看对应资源: 状态 $ kubectl get <SOURCE_NAME> -n <NAMESPACE> -o wide ​ # 查看对应资源: 事件信息 $ kubectl describe <SOURCE_NAME> <SOURCE_NAME_RANDOM_ID> -n <NAMES…...

PyQt6 QTreeView树视图

锋哥原创的PyQt6视频教程&#xff1a; 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili QTreeView类&#xff0c;它是树控件的基类&#xff0c;使用时&#xff0c;必须为其提供一个模型来与之配合。 QTreeView类的常用方法&#xff1a; 方法…...

链表|148. 排序链表

148. 排序链表 题目&#xff1a;给你链表的头结点 head &#xff0c;请将其按升序排列并返回排序后的链表。 题目链接&#xff1a; 148. 排序链表 时间复杂度&#xff1a;快排 O(n^2) 超出时间限制 class Solution {public ListNode sortList(ListNode head) {if(headnull)…...

如何解决5G基站高能耗问题?

安科瑞 须静燕 截至2023年10月&#xff0c;我国5G基站总数达321.5万个&#xff0c;占全国通信基站总数的28.1%。然而&#xff0c;随着5G基站数量的快速增长&#xff0c;基站的能耗问题也逐渐日益凸显&#xff0c;基站的用电给运营商带来了巨大的电费开支压力&#xff0c;降低5…...

PyTorch实现逻辑回归

最终效果 先看下最终效果&#xff1a; 这里用一条直线把二维平面上不同的点分开。 生成随机数据 #创建训练数据 x torch.rand(10,1)*10 #shape(10,1) y 2*x (5 torch.randn(10,1))#构建线性回归参数 w torch.randn((1))#随机初始化w&#xff0c;要用到自动梯度求导 b …...

什么是FPGA原型验证?

EDA工具的使用主要分为设计、验证和制造三大类。验证工作贯穿整个芯片设计流程&#xff0c;可以说芯片的验证阶段占据了整个芯片开发的大部分时间。从芯片需求定义、功能设计开发到物理实现制造&#xff0c;每个环节都需要进行大量的验证。 现如今验证方法也越来越多&#xff…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

沙箱虚拟化技术虚拟机容器之间的关系详解

问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西&#xff0c;但是如果把三者放在一起&#xff0c;它们之间到底什么关系&#xff1f;又有什么联系呢&#xff1f;我不是很明白&#xff01;&#xff01;&#xff01; 就比如说&#xff1a; 沙箱&#…...

[USACO23FEB] Bakery S

题目描述 Bessie 开了一家面包店! 在她的面包店里&#xff0c;Bessie 有一个烤箱&#xff0c;可以在 t C t_C tC​ 的时间内生产一块饼干或在 t M t_M tM​ 单位时间内生产一块松糕。 ( 1 ≤ t C , t M ≤ 10 9 ) (1 \le t_C,t_M \le 10^9) (1≤tC​,tM​≤109)。由于空间…...

Mysql故障排插与环境优化

前置知识点 最上层是一些客户端和连接服务&#xff0c;包含本 sock 通信和大多数jiyukehuduan/服务端工具实现的TCP/IP通信。主要完成一些简介处理、授权认证、及相关的安全方案等。在该层上引入了线程池的概念&#xff0c;为通过安全认证接入的客户端提供线程。同样在该层上可…...