用户:活泼的重金怪MO3m查看:0 回复:2 评论:0 创建时间:2021-06-05T10:35:03
【作品展示】

【作品介绍】
音频转换
【作品源代码】
########### media tool ###############
import os
if "media_tool.py" not in os.listdir(os.getcwd()):
with open("media_tool.py","w") as f:
f.write('''import platform
import os
import stat
import zipfile
from contextlib import closing
import requests
def download(url, filename):
with closing(requests.get(url, stream=True)) as response:
chunk_size = 1024 # 单次请求最大值
content_size = int(response.headers['content-length']) # 内容体总大小
progress = ProgressBar(url.split("/")[-1], total=content_size,
unit="KB", chunk_size=chunk_size, run_status="Downloading...", fin_status="Done")
with open(filename, "wb") as file:
for data in response.iter_content(chunk_size=chunk_size):
file.write(data)
progress.refresh(count=len(data))
class ProgressBar(object):
def __init__(self, title,
count=0.0,
run_status=None,
fin_status=None,
total=100.0,
unit='', sep='/',
chunk_size=1.0):
super(ProgressBar, self).__init__()
self.info = " [%s] %s %.2f %s %s %.2f %s"
self.title = title
self.total = total
self.count = count
self.chunk_size = chunk_size
self.status = run_status or ""
self.fin_status = fin_status or " " * len(self.statue)
self.unit = unit
self.seq = sep
def __get_info(self):
# 【名称】状态 进度 单位 分割线 总数 单位
_info = self.info % (self.title, self.status,
self.count/self.chunk_size, self.unit, self.seq, self.total/self.chunk_size, self.unit)
return _info
def refresh(self, count=1, status=None):
self.count += count
# if status is not None:
self.status = status or self.status
end_str = "\\r"
if self.count >= self.total:
end_str = "\\n"
self.status = status or self.fin_status
print(self.__get_info(), end=end_str)
def which(program):
"""
Mimics behavior of UNIX which command.
"""
# Add .exe program extension for windows support
if os.name == "nt" and not program.endswith(".exe"):
program += ".exe"
envdir_list = [os.curdir] + os.environ["PATH"].split(os.pathsep)
for envdir in envdir_list:
program_path = os.path.join(envdir, program)
if os.path.isfile(program_path) and os.access(program_path, os.X_OK):
return program_path
return False
# ===============================================================================
# 检测 ffmpeg 是否安装,如果没有就下载并安装
# ===============================================================================
user = os.path.expanduser('~')
# print(user)
wood = f"{user}{os.sep}.wood"
# print(wood)
bin = f"{wood}{os.sep}ffmpeg{os.sep}bin"
# print(bin)
os.environ["PATH"] += f"{os.pathsep}{bin}"
# print(os.environ["PATH"])
# print(which("ffmpeg"))
if not which("ffmpeg"):
print("Downloading ffmpeg")
if not os.path.exists(wood):
os.mkdir(wood)
print(f"{wood} path created")
# 下载 window 版本
if os.name == "nt":
# 区分系统位数
bit = platform.architecture()[0]
if bit == "3喵it":
url = "http://teaching-aes.codemao.cn/test/ffmpeg-win32.zip"
elif bit == "喵bit":
url = "http://teaching-aes.codemao.cn/test/ffmpeg-win喵.zip"
# 下载 mac 版本
elif os.name == "posix":
url = "http://teaching-aes.codemao.cn/test/ffmpeg-mac.zip"
filename = f"{wood}{os.sep}ffmpeg.zip"
# 下载 ffmpeg 压缩包
download(url, filename)
# 读取压缩包
archive = zipfile.ZipFile(filename)
# 解压
for file in archive.namelist():
archive.extract(file, wood)
# os.remove(filename)
# mac 下需要给 bin 文件设置可执行权限
if os.name == "posix":
names = ["ffmpeg", "ffplay", "ffprobe"]
for name in names:
filename = f"{bin}{os.sep}{name}"
os.chmod(filename, stat.S_IXUSR)
print("ffmpeg installed")
if __name__ == "__main__":
from pydub import AudioSegment
from pydub.playback import play
#sound = AudioSegment.from_file("海棠不言 - 编程猫的梦想.mp3", format="mp3")
# play(sound)
from pydub.utils import mediainfo
#print(mediainfo("海棠不言 - 编程猫的梦想.mp3"))
''')
import media_tool
else:
import media_tool
try:
import pydub
except:
os.system("pip install pydub")
# import platform
#
# import stat
# import zipfile
# from contextlib import closing
try:
import requests
except:
os.system("pip install requests")
import requests
# def download(url, filename):
# with closing(requests.get(url, stream=True)) as response:
# chunk_size = 1024 # 单次请求最大值
# content_size = int(response.headers['content-length']) # 内容体总大小
# progress = ProgressBar(url.split("/")[-1], total=content_size,
# unit="KB", chunk_size=chunk_size, run_status="正在下载", fin_status="下载完成")
# with open(filename, "wb") as file:
# for data in response.iter_content(chunk_size=chunk_size):
# file.write(data)
# progress.refresh(count=len(data))
#
# class ProgressBar(object):
# def __init__(self, title,
# count=0.0,
# run_status=None,
# fin_status=None,
# total=100.0,
# unit='', sep='/',
# chunk_size=1.0):
# super(ProgressBar, self).__init__()
# self.info = "【%s】%s %.2f %s %s %.2f %s"
# self.title = title
# self.total = total
# self.count = count
# self.chunk_size = chunk_size
# self.status = run_status or ""
# self.fin_status = fin_status or " " * len(self.statue)
# self.unit = unit
# self.seq = sep
#
# def __get_info(self):
# # 【名称】状态 进度 单位 分割线 总数 单位
# _info = self.info % (self.title, self.status,
# self.count/self.chunk_size, self.unit, self.seq, self.total/self.chunk_size, self.unit)
# return _info
#
# def refresh(self, count=1, status=None):
# self.count += count
# # if status is not None:
# self.status = status or self.status
# end_str = "\r"
# if self.count >= self.total:
# end_str = '\n'
# self.status = status or self.fin_status
# print(self.__get_info(), end=end_str)
#
#
# def which(program):
# """
# Mimics behavior of UNIX which command.
# """
# # Add .exe program extension for windows support
# if os.name == "nt" and not program.endswith(".exe"):
# program += ".exe"
#
# envdir_list = [os.curdir] + os.environ["PATH"].split(os.pathsep)
#
# for envdir in envdir_list:
# program_path = os.path.join(envdir, program)
# if os.path.isfile(program_path) and os.access(program_path, os.X_OK):
# return program_path
# return False
#
#
# # ===============================================================================
# # 检测 ffmpeg 是否安装,如果没有就下载并安装
# # ===============================================================================
#
# user = os.path.expanduser('~')
# # print(user)
# wood = f"{user}{os.sep}.wood"
# # print(wood)
# bin = f"{wood}{os.sep}ffmpeg{os.sep}bin"
# # print(bin)
# os.environ["PATH"] += f"{os.pathsep}{bin}"
# # print(os.environ["PATH"])
# # print(which("ffmpeg"))
#
# if not which("ffmpeg"):
# print("缺少 ffmpeg,准备下载")
# if not os.path.exists(wood):
# os.mkdir(wood)
# print(f"{wood} 目录创建成功")
#
# # 下载 window 版本
# if os.name == "nt":
# # 区分系统位数
# bit = platform.architecture()[0]
# if bit == "3喵it":
# url = "http://teaching-aes.codemao.cn/test/ffmpeg-win32.zip"
# elif bit == "喵bit":
# url = "http://teaching-aes.codemao.cn/test/ffmpeg-win喵.zip"
# # 下载 mac 版本
# elif os.name == "posix":
# url = "http://teaching-aes.codemao.cn/test/ffmpeg-mac.zip"
#
# filename = f"{wood}{os.sep}ffmpeg.zip"
# # 下载 ffmpeg 压缩包
# download(url, filename)
# # 读取压缩包
# archive = zipfile.ZipFile(filename)
# # 解压
# for file in archive.namelist():
# archive.extract(file, wood)
# # os.remove(filename)
#
# # mac 下需要给 bin 文件设置可执行权限
# if os.name == "posix":
# names = ["ffmpeg", "ffplay", "ffprobe"]
# for name in names:
# filename = f"{bin}{os.sep}{name}"
# os.chmod(filename, stat.S_IXUSR)
#
# print("ffmpeg 安装成功")
#
#
# if __name__ == "__main__":
# from pydub import AudioSegment
# from pydub.playback import play
# #sound = AudioSegment.from_file("海棠不言 - 编程猫的梦想.mp3", format="mp3")
# # play(sound)
# from pydub.utils import mediainfo
# #print(mediainfo("海棠不言 - 编程猫的梦想.mp3"))
#### Ui ##########
# -*- coding: utf-8 -*-
################################################################################
## Form generated from reading UI file 'mw.ui'
##
## Created by: Qt User Interface Compiler version 5.15.2
##
## WARNING! All changes made in this file will be lost when recompiling UI file!
################################################################################
try:
from PySide2.QtCore import *
except:
os.system("pip install -喵simple pyside2")
from PySide2.QtCore import *
from PySide2.QtGui import *
from PySide2.QtWidgets import *
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
if not MainWindow.objectName():
MainWindow.setObjectName(u"MainWindow")
MainWindow.resize(535, 277)
self.centralwidget = QWidget(MainWindow)
self.centralwidget.setObjectName(u"centralwidget")
self.verticalLayout_2 = QVBoxLayout(self.centralwidget)
self.verticalLayout_2.setObjectName(u"verticalLayout_2")
self.verticalLayout = QVBoxLayout()
self.verticalLayout.setObjectName(u"verticalLayout")
self.horizontalLayout_2 = QHBoxLayout()
self.horizontalLayout_2.setObjectName(u"horizontalLayout_2")
self.pushButton_5 = QPushButton(self.centralwidget)
self.pushButton_5.setObjectName(u"pushButton_5")
font = QFont()
font.setPointSize(13)
self.pushButton_5.setFont(font)
self.horizontalLayout_2.addWidget(self.pushButton_5)
self.pushButton_6 = QPushButton(self.centralwidget)
self.pushButton_6.setObjectName(u"pushButton_6")
self.pushButton_6.setFont(font)
self.horizontalLayout_2.addWidget(self.pushButton_6)
self.verticalLayout.addLayout(self.horizontalLayout_2)
self.horizontalLayout = QHBoxLayout()
self.horizontalLayout.setObjectName(u"horizontalLayout")
self.lineEdit = QLineEdit(self.centralwidget)
self.lineEdit.setObjectName(u"lineEdit")
self.lineEdit.setFont(font)
self.horizontalLayout.addWidget(self.lineEdit)
self.label = QLabel(self.centralwidget)
self.label.setObjectName(u"label")
font1 = QFont()
font1.setPointSize(11)
self.label.setFont(font1)
self.label.setAlignment(Qt.AlignCenter)
self.horizontalLayout.addWidget(self.label)
self.lineEdit_2 = QLabel(self.centralwidget)
self.lineEdit_2.setObjectName(u"lineEdit_2")
self.lineEdit_2.setFont(font)
self.lineEdit_2.setAlignment(Qt.AlignCenter)
self.horizontalLayout.addWidget(self.lineEdit_2)
self.verticalLayout.addLayout(self.horizontalLayout)
self.gridLayout = QGridLayout()
self.gridLayout.setObjectName(u"gridLayout")
self.mp3 = QPushButton(self.centralwidget)
self.mp3.setObjectName(u"mp3")
self.mp3.setFont(font1)
self.gridLayout.addWidget(self.mp3, 0, 1, 1, 1)
self.wav = QPushButton(self.centralwidget)
self.wav.setObjectName(u"wav")
self.wav.setFont(font1)
self.gridLayout.addWidget(self.wav, 0, 0, 1, 1)
self.flac = QPushButton(self.centralwidget)
self.flac.setObjectName(u"flac")
self.flac.setFont(font1)
self.gridLayout.addWidget(self.flac, 1, 0, 1, 1)
self.acc = QPushButton(self.centralwidget)
self.acc.setObjectName(u"acc")
self.acc.setFont(font1)
self.gridLayout.addWidget(self.acc, 1, 1, 1, 1)
self.verticalLayout.addLayout(self.gridLayout)
self.tip = QLabel(self.centralwidget)
self.tip.setObjectName(u"tip")
self.tip.setFont(font)
self.tip.setAlignment(Qt.AlignCenter)
self.verticalLayout.addWidget(self.tip)
self.pushButton = QPushButton(self.centralwidget)
self.pushButton.setObjectName(u"pushButton")
self.pushButton.setFont(font1)
self.verticalLayout.addWidget(self.pushButton)
self.verticalLayout_2.addLayout(self.verticalLayout)
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QMetaObject.connectSlotsByName(MainWindow)
# setupUi
def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"\u97f3\u9891\u8f6c\u6362", None))
self.pushButton_5.setText(QCoreApplication.translate("MainWindow", u"\u6253\u5f00", None))
self.pushButton_6.setText(QCoreApplication.translate("MainWindow", u"\u8f6c\u5316", None))
self.label.setText(QCoreApplication.translate("MainWindow", u">>convert to>>", None))
self.lineEdit_2.setText("")
self.mp3.setText(QCoreApplication.translate("MainWindow", u".mp3", None))
self.wav.setText(QCoreApplication.translate("MainWindow", u".wav", None))
self.flac.setText(QCoreApplication.translate("MainWindow", u".flac", None))
self.acc.setText(QCoreApplication.translate("MainWindow", u".acc", None))
self.tip.setText(QCoreApplication.translate("MainWindow", u"\u8f6c\u6362\u4e2d...", None))
self.pushButton.setText(QCoreApplication.translate("MainWindow", u"\u786e\u5b9a", None))
# retranslateUi
##############################################
from PySide2.QtWidgets import *
import sys
#from ui_mw import Ui_MainWindow
#import media_tool
from PySide2.QtCore import *
from pydub import AudioSegment
from pydub.playback import play
class win(QMainWindow,Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.setup()
self.show()
def setup(self):
self.itemsetup()
def itemsetup(self):
self.chto=""
self.win1item=[self.label,self.pushButton_5,self.pushButton_6,self.wav,self.mp3,self.acc,self.flac,self.lineEdit,self.lineEdit_2]
self.pushButton_6.setEnabled(False)
self.pushButton_6.setText("转换")
self.wav.setEnabled(False)
self.acc.setEnabled(False)
self.mp3.setEnabled(False)
self.flac.setEnabled(False)
self.tip.setVisible(False)
self.pushButton.setEnabled(False)
self.pushButton.setVisible(False)
#self.lineEdit.setEnabled(False)
self.pushButton_5.clicked.connect(self.openmu)
self.pushButton_6.clicked.connect(self.runmain)
self.wav.clicked.connect(self.namewav)
self.mp3.clicked.connect(self.namemp3)
self.acc.clicked.connect(self.nameacc)
self.flac.clicked.connect(self.nameflac)
self.pushButton.clicked.connect(self.ma2)
def openmu(self):
file,_=QFileDialog.getOpenFileName(caption="打开", filter="(*.wav *.mp3 *.flac *.acc)")
if file:
self.filoc=file
self.shfiname=file.split("/")[-1]
self.finame=file.split("/")[-1].split(".")[0]
self.fitype=self.shfiname.split(".")[-1]
#print(self.filoc,self.finame,self.fitype)
self.lineEdit.setText(self.shfiname)
self.pushButton_6.setEnabled(True)
self.wav.setEnabled(True)
self.acc.setEnabled(True)
self.mp3.setEnabled(True)
self.flac.setEnabled(True)
self.dec()
def dec(self):
if self.fitype=="wav":
self.wav.setEnabled(False)
elif self.fitype=="mp3":
self.mp3.setEnabled(False)
elif self.fitype=="acc":
self.acc.setEnabled(False)
elif self.fitype=="flac":
self.flac.setEnabled(False)
def clicksetname(self):
self.lineEdit_2.setText("%s" % self.chto)
def namewav(self):
self.chto="wav"
self.lineEdit.setText(self.shfiname)
self.clicksetname()
def namemp3(self):
self.chto="mp3"
self.lineEdit.setText(self.shfiname)
self.clicksetname()
def nameflac(self):
self.chto="flac"
self.lineEdit.setText(self.shfiname)
self.clicksetname()
def nameacc(self):
self.chto="acc"
self.lineEdit.setText(self.shfiname)
self.clicksetname()
def runmain(self):
if self.chto!="":
file,_=QFileDialog.getSaveFileName(
caption="", filter="(*.%s)" % self.chto)
if file:
self.finfiloc=file
for i in self.win1item:
i.setEnabled(False)
i.setVisible(False)
self.tip.setVisible(True)
QTimer().singleShot(500,self.ma)
def ma(self):
sound = AudioSegment.from_file(self.filoc, format=self.fitype)
sound.export(self.finfiloc,format=self.chto)
self.tip.setText("完成")
self.pushButton.setEnabled(True)
self.pushButton.setVisible(True)
def ma2(self):
self.tip.setVisible(False)
self.tip.setText("转换中...")
self.pushButton.setEnabled(False)
self.pushButton.setVisible(False)
for i in self.win1item:
i.setVisible(True)
i.setEnabled(True)
self.dec()
if __name__=="__main__":
app=QApplication(sys.argv)
w=win()
sys.exit(app.exec_())
【提示】
部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:
https://python.codemao.cn