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

python使用ffmpeg来制作音频格式转换工具(优化版)

简介:一个使用python加上ffmpeg模块来进行音频格式转换的工具。
日志:

20231030:第一版,设置了简单的UI布局和配色,实现音频转为Mp3、AAC、wav、flac四种格式。可解析音频并显示信息,可设置转换后的保存路径

UI界面:
在这里插入图片描述
编程平台:visual studio code
在这里插入图片描述
编程语言:python 3.12.0
模块:ffmpeg、PyQt5
其中ffmpeg是用来处理音频文件的主要模块,PyQt5是用来制作UI界面使用。

ffmpeg安装:
注意这里不要直接pip install ffmpeg

pip install ffmpeg-python

PyQt5安装:

pip install PyQt5

关于PyQt5的使用,本文中不做多介绍,因为pyqt5的使用相对来说是比较简单的。网上非常多的示例可以参考。

下面说一下代码:

音频导入

导入音频文件,使用pyqt5的qfiledialog类getopenfilename方法,如下

 def music_load(self):"""文件载入"""self.filepth,_=QFileDialog.getOpenFileName(self,"选择音频","C:/","Allfile(*);;txt(*.txt)")if self.filepth:self.lbl2.setText(self.filepth)self.music_info_get(self.filepth)else:self.lbl2.setText("路径为空")
获取音频信息

获取音频信息,要用到ffmpeg中的probe功能,probe的参数就是音频文件的文件路径。如果音频文件是正确且存在的,ffmpeg会自动对音频进行分析,返回一个JSON格式的数据集。

   probe=ffmpeg.probe(file)

返回数据示例:

{‘streams’: [{‘index’: 0, ‘codec_name’: ‘wmav2’, ‘codec_long_name’: ‘Windows Media Audio 2’, ‘codec_type’: ‘audio’, ‘codec_tag_string’: ‘a[1][0][0]’, ‘codec_tag’: ‘0x0161’, ‘sample_fmt’: ‘fltp’, ‘sample_rate’: ‘44100’, ‘channels’: 2, ‘bits_per_sample’: 0, ‘initial_padding’: 0, ‘r_frame_rate’: ‘0/0’, ‘avg_frame_rate’: ‘0/0’, ‘time_base’: ‘1/1000’, ‘start_pts’: 0, ‘start_time’: ‘0.000000’, ‘duration_ts’: 280333, ‘duration’: ‘280.333000’, ‘bit_rate’: ‘96024’, ‘extradata_size’: 10, ‘disposition’: {‘default’: 0, ‘dub’: 0, ‘original’: 0, ‘comment’: 0, ‘lyrics’: 0, ‘karaoke’: 0, ‘forced’: 0, ‘hearing_impaired’: 0, ‘visual_impaired’: 0, ‘clean_effects’: 0, ‘attached_pic’: 0, ‘timed_thumbnails’: 0, ‘captions’: 0, ‘descriptions’: 0, ‘metadata’: 0, ‘dependent’: 0, ‘still_image’: 0}, ‘tags’: {‘language’: ‘chi’}}], ‘format’: {‘filename’: ‘F:/音乐/Celine Dion(席琳 迪翁)-My Heart Will Go On.wma’, ‘nb_streams’: 1, ‘nb_programs’: 0, ‘format_name’: ‘asf’, ‘format_long_name’: ‘ASF (Advanced / Active Streaming Format)’, ‘start_time’: ‘0.000000’, ‘duration’: ‘280.333000’, ‘size’: ‘3395127’, ‘bit_rate’: ‘96888’, ‘probe_score’: 100, ‘tags’: {‘DeviceConformanceTemplate’: ‘L1’, ‘artist’: ‘Celine Dion(席琳 迪翁)’, ‘WM/WMADRCAverageReference’: ‘7322’, ‘WM/WMADRCPeakReference’: ‘32767’, ‘title’: ‘My Heart Will Go On’, ‘IsVBR’: ‘0’, ‘album’: ‘泰坦尼克号电影音乐精选’, ‘WMFSDKNeeded’: ‘0.0.0.0000’, ‘WMFSDKVersion’: ‘10.00.00.3708’}}}

以上是probe返回的内容格式,可以看到包含了很多音频文件的信息,如音频名、音频格式、时间、比特率等等,probe实际上是一个字典数据。
所以,如果要想取其中的对应数据来用,只需要对照字典中的键来取值即可。

format=probe['format']
stream=probe['streams'][0]

format和stream又分别是字典类型,再次按照字典来取值:

 		video_time=format['duration']video_byte=str(int(format['size'])/1024/1024)video_rate=stream['bit_rate']video_rate2=float(video_rate)/1000music_name=format['filename']music_geshi=format['format_name']
音频格式转换

格式转换功能主要是ffmpeg来完成的,python只需要调用ffmpeg程序即可,因此使用了subprocess模块。

pp=subprocess.Popen(cmdtxt,shell=True,stdout=subprocess.PIPE,stderr=subprocess.STDOUT,encoding='utf-8',text=True)

关于subprocess的详细使用,大家可以自行搜索,此处不多介绍。
subprocess调用ffmpeg,而ffmpeg的指令格式如下:

ffmpeg指令示例:

ffmpeg -i input.mp3 -acodec pcm_s16le -ac 2 -ar 44100 output.wav

也可以很简单:

ffmpeg -i input.mp3 output.wav

本文中主要使用第二种指令,即简单化。subprocess模块调用ffmpeg程序,而ffmpeg根据传入的指令来对目标进行转换。

以上就是这个音频转换程序的基本逻辑,从使用来说,先载入音频,然后选择要转换的格式,以及转换后保存的路径,最后点击“格式转换”按钮,等待程序自动转换即可,转换完成后会有提示。
在这里插入图片描述
整个操作是很简单的,下面会给出完整代码。

其中,UI界面的配色,是有qss来渲染的。

qss文件的读取,是一个单独的模块:
qss_read.py

class QssRead:@staticmethoddef readQSS(style):with open(style, "r",encoding="utf-8") as f:return f.read()
 self.qssfile1="M03_musicconvert_pro2023\\qss_main_style.qss"
self.qss1=QssRead.readQSS(self.qssfile1)
self.setStyleSheet(self.qss1)

qss文件:
可以看到,qss文件主要是统一设置UI界面的样式,如颜色、形状、粗细等。

/*
*
窗体背景色为渐变色
*/
QWidget
{background-color:qlineargradient(x1:0, y1:0, x2:1, y2:1, stop:0 #d0f0e8,stop:0.2 #a5f8cc,stop:0.5 #99f56b stop:1 #8EF068);/*background-color:qradialgradient(cx:0.5, cy:0.5, radius:0.5, fx:0.5, fy:0.5, stop:0 red, stop:1 blue)*//*background-color:qconicalgradient(cx:0.5, cy:0.5, angle:0, stop:0 blue, stop:0.2 yellow,stop:1 #4CF562)*/
}
QMenuBar
{background-color:qlineargradient(x1:0, y1:0, 

相关文章:

python使用ffmpeg来制作音频格式转换工具(优化版)

简介:一个使用python加上ffmpeg模块来进行音频格式转换的工具。 日志: 20231030:第一版,设置了简单的UI布局和配色,实现音频转为Mp3、AAC、wav、flac四种格式。可解析音频并显示信息,可设置转换后的保存路径 UI界面: 编程平台:visual studio code 编程语言:python 3…...

Debug技巧-不启用前端访问后端

在日常开发中,我们经常会遇到各种问题需要调试,前后端都启动需要耗费一定的时间和内存,方便起见,可以直接用抓包数据访问后端,这里我们需要用到Postman或者ApiFox 抓包数据 在系统前台触发后端请求,在控制…...

由CAB/PAB展开的一些思考

又到了一月保底一篇订阅号文章的时候,上周受到Oracle邀请,参加了在上海Oracle办公室举行的CAB(The 13th Oracle China Customer Advisory Board Metting)/ PAB(The 3th Oracle China Partner Advisory Board Metting&…...

系列十五、idea全局配置

一、全局Maven配置 IDEA启动页面>Customize>All settings>Build,Execution,Deployment>Build Tools>Maven 二、全局编码配置 IDEA启动页面>Customize>All settings>Editor>File Encodings 三、全局激活DevTools配置 IDEA启动页面>Customize>A…...

高德Go生态建设与研发实践

序 高德在构建Go生态演化过程中,已经实现了QPS从0到峰值千万的飞跃,本篇文章主要介绍在此过程中积累的一些技术决策及性能优化和重构经验。阅读本文读者会有以下3点收获: 1.高德Go生态发展历程及现状分析 2.高德云原生Serverless落地情况&…...

SpringCloud中Turbine 1.X版本BUG

错误出现在spring-cloud-turbine-stream 包中,因为这个包会启动一个netty-port容器,并将它的server.port 设置为-1 ,从而关闭了Servlet容器,这是官方包的一个Bug,不过Spring Boot 2.0已修复,要么升级包要么…...

SCSS的用法有哪些?分别举例

SCSS的用法主要有: 1: 变量:在SCSS中,我们可以通过 $ 符号来定义变量。比如,我们可以定义一个颜色变量 $color: red;,然后在我们需要使用这个颜色的时候,直接使用 $color 就可以了。 2&#x…...

Spring controller层请求数据和响应数据的简单方法

记录一些很基本的使用方法。 一、GET请求传参方法: 1.方法一:把参数传到?之后 使用注解RequestParam // 假如传值了current和limit /students?current1&limit20 RequestMapping(value "/students", method RequestMetho…...

中国商界杂志中国商界杂志社中国商界编辑部2023年第10期目录查询

要闻 我国旅游市场步入理性繁荣阶段 赵熠如; 10-11 产业 老国货品牌再迎高光时刻 能否留住流量 涂瀚文; 12-13《中国商界》投稿:cnqikantg126.com 金融集聚有力 促进长三角城市高质量发展 刘盛坤; 14-17 辽宁农贸市场亟待优化升级路径在哪儿&#x…...

记录 vue + vuetify + electron 安装过程

NodeJs 版本: 20 内容来自: Electron Vue.js Vuetify 构建跨平台应用_思月行云的博客-CSDN博客文章浏览阅读61次。Go coding!https://blog.csdn.net/kenkao/article/details/132600542 npm config set registry https://registry.npm.taobao.org np…...

短视频账号矩阵系统saas源码搭建/技术

一、短视频矩阵系统建模----技术api接口--获取用户授权 技术文档分享: 本系统采用MySQL数据库进行存储,数据库设计如下: 1.用户表(user): - 用户ID(user_id) - 用户名&#xff08…...

词向量模型Word2Vec

Word2Vec CBOW连续词袋模型例子CBOW模型的embeddings层CBOW模型的线性层 总结 skip-gram跳字模型例子Skip-Gram模型的结构 CBOW和skip-gram的目标都是迭代出词向量字典(嵌入矩阵)——embeddings CBOW连续词袋模型 根据上下文词汇预测目标词汇 例子 使…...

公会发展计划(GAP):经过实战考验的 Web3 任务模式

2020 年 12 月,Yield Guild Games 踏上了一段征程,以表彰兢兢业业的 Web3 游戏玩家所付出的时间和努力,同时为他们提供利用自己的技能促进个人成长的机会。这一旅程的第一步是于 2022 年 7 月推出的公会发展计划(GAP)。…...

网络工程师基础知识(2)

一、端口可以分为系统端口、登记端口、客户端使用端口。 (1) 系统端口。该端口的取值范围为[0,1023]. (2) 登记端口。登记端口是为没有熟知端口号的应用程序使用的,端口范围为[1024,49151]。这些端口必须在 IANA 登记以避免重复。 (3) 客户端使用端口。这类端口仅…...

创建ABAP数据库表和ABAP字典对象-理解表字段02

理解表字段 这一步,您将定义表字段。首先,你需要了解你的需求: 内置的ABAP类型和新定义的字段类型 下面我们将会创建3个字段类型在数据库表中。 ●内置字段类型:最快的方法:应用系统已经提供好的字段类型,基本类型、长度和描述…...

2021-arxiv-GPT Understands, Too

2021-arxiv-GPT Understands, Too Paper: https://arxiv.org/abs/2103.10385 Code: https://github.com/THUDM/P-tuning Prompt 简单理解 举例来讲,今天如果有这样两句评论: 1. 什么苹果啊,都没有苹果味&#xff0c…...

【Spark】What is the difference between Input and Shuffle Read

Spark调参过程中 保持每个task的 input shuffle read 量在300-500M左右比较合适 The Spark UI is documented here: https://spark.apache.org/docs/3.0.1/web-ui.html The relevant paragraph reads: Input: Bytes read from storage in this stageOutput: Bytes written …...

redis相关的一些面试题?

1.什么是缓存穿透,什么是缓存雪崩,什么是缓存击穿? 缓存穿透:假如某一时刻访问redis的大量key都在redis中不存在(比如黑客故意伪造一些乱七八糟的key),那么也会给数据造成压力,这就是缓存穿透,解决方案是使…...

什么是Babel?它的主要作用是什么?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…...

【APP】go-musicfox - 一款网易云音乐命令行客户端, 文件很小Mac版本只有16.5M

go-musicfox 是用 Go 写的又一款网易云音乐命令行客户端,支持各种音质级别、UnblockNeteaseMusic、Last.fm、MPRIS 和 macOS 交互响应(睡眠暂停、蓝牙耳机连接断开响应和菜单栏控制等)等功能特性。 预览 启动 启动界面 主界面 主界面 通…...

C++11三大核心特性深度解析:类型特征、时间库与原子操作

C11三大核心特性深度解析&#xff1a;类型特征、时间库与原子操作 引言 C11标准的发布标志着C语言进入了现代编程的新纪元。在众多令人瞩目的新特性中&#xff0c;类型特征&#xff08;<type_traits>&#xff09;、时间库&#xff08;&#xff09;和原子操作&#xff0…...

AI量化投资实战指南:从零开始构建强化学习市场中性策略

AI量化投资实战指南&#xff1a;从零开始构建强化学习市场中性策略 【免费下载链接】qlib Qlib is an AI-oriented Quant investment platform that aims to use AI tech to empower Quant Research, from exploring ideas to implementing productions. Qlib supports diverse…...

Eidolon与Artsy生态系统的集成:如何构建企业级移动应用

Eidolon与Artsy生态系统的集成&#xff1a;如何构建企业级移动应用 【免费下载链接】eidolon The Artsy Auction Kiosk App. 项目地址: https://gitcode.com/gh_mirrors/ei/eidolon Eidolon作为Artsy Auction Kiosk App&#xff0c;是企业级移动应用开发的典范之作。本文…...

PaveBench:一个用于路面病害感知与交互式视觉语言分析的多功能基准

作者 Dexiang Li, Zhenning Che, Haijun Zhang∗, Dongliang Zhou∗, Zhao Zhang, Yahong Han ∗ 通讯作者 https://arxiv.org/pdf/2604.02804v1 摘要 路面状况评估对道路安全与养护至关重要。现有研究已取得显著进展。然而&#xff0c;大多数研究侧重于分类、检测和分割等传统…...

Seata 1.6.1 + Nacos配置避坑指南:Windows环境从安装到整合SpringBoot的完整链路

Seata 1.6.1与Nacos深度整合实战&#xff1a;Windows环境下的全链路配置精要 当微服务架构遇上分布式事务&#xff0c;Seata无疑是Java开发者手中的瑞士军刀。但在Windows环境下&#xff0c;从零搭建Seata服务端到与SpringBoot应用无缝集成&#xff0c;这条路上布满的配置陷阱足…...

电机控制新手必看:半桥栅极驱动芯片选型避坑指南(附英飞凌型号推荐)

电机控制新手必看&#xff1a;半桥栅极驱动芯片选型避坑指南&#xff08;附英飞凌型号推荐&#xff09; 在电机控制系统的设计中&#xff0c;半桥栅极驱动芯片的选择往往成为新手工程师的第一个技术挑战。我曾见过不少项目因为驱动芯片选型不当&#xff0c;导致电机运行不稳定…...

ElementUI 年份范围选择器实战:手把手教你封装 el-year-picker 组件(附完整代码)

ElementUI 年份范围选择器实战&#xff1a;手把手教你封装 el-year-picker 组件&#xff08;附完整代码&#xff09; 在后台管理系统开发中&#xff0c;日期选择组件是使用频率极高的功能模块。ElementUI 作为 Vue 生态中最受欢迎的 UI 框架之一&#xff0c;虽然提供了丰富的日…...

3步实现微信关系检测,让社交管理效率提升80%

3步实现微信关系检测&#xff0c;让社交管理效率提升80% 【免费下载链接】WechatRealFriends 微信好友关系一键检测&#xff0c;基于微信ipad协议&#xff0c;看看有没有朋友偷偷删掉或者拉黑你 项目地址: https://gitcode.com/gh_mirrors/we/WechatRealFriends 在数字社…...

3步解锁百度网盘SVIP特权:macOS用户必备的高速下载解决方案

3步解锁百度网盘SVIP特权&#xff1a;macOS用户必备的高速下载解决方案 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘Mac客户端的龟速…...

用Python和Keras从零搭建一个BiLSTM入侵检测模型(基于NSL-KDD数据集)

用Python和Keras从零搭建BiLSTM入侵检测模型实战指南 在网络安全领域&#xff0c;入侵检测系统(IDS)正经历着从传统规则匹配到智能分析的范式转变。本文将带您使用Python生态中的Keras框架&#xff0c;基于经典的NSL-KDD数据集&#xff0c;构建一个具备实战价值的双向长短期记…...