一、软件实测图:
1、软件载入初始界面:

2、格式转换过程界面:

3、格式转换完成界面:

二、源代码
# 整个文件夹批量转换(添加开始转换和重置按钮)
import streamlit as st
from pydub import AudioSegment
import os
import sys
def convert_audio_format(input_file, output_format, output_folder):
try:
audio = AudioSegment.from_file(input_file)
base_name = os.path.splitext(os.path.basename(input_file))[0]
output_filename = os.path.join(output_folder, f"{base_name}.{output_format}")
export_params = {
'format': output_format,
'bitrate': '192k'
}
if output_format == 'wav':
export_params['parameters'] = ['-acodec', 'pcm_s16le']
audio.export(output_filename, **export_params)
return output_filename
except Exception as e:
return f"转换失败: {input_file} - {str(e)}"
def clear_recover():
st.session_state.dynamic_text = ""
st.session_state.clear()
# 初始化session状态
if 'converted_files' not in st.session_state:
st.session_state.converted_files = []
if 'error_messages' not in st.session_state:
st.session_state.error_messages = []
if 'output_folder' not in st.session_state:
st.session_state.output_folder = ""
if "dynamic_text" not in st.session_state:
st.session_state.dynamic_text = ""
st.title("🎵 音频文件格式批量转换工具")
st.markdown("支持格式: MP3, WAV, FLAC, OGG, AAC")
with st.expander("📂 文件夹设置", expanded=True):
folder_path = st.text_input("请输入源文件夹路径:", value=st.session_state.dynamic_text,
key="dynamic_text", help="应包含要转换的音频文件")
if folder_path:
if not os.path.exists(folder_path):
st.error("路径不存在,请检查输入!")
st.stop()
if not os.path.isdir(folder_path):
st.error("请输入有效的文件夹路径!")
st.stop()
output_format = st.selectbox("选择目标格式:", ["mp3", "wav", "flac", "ogg", "aac"], index=0)
col1, col2, col3 = st.columns([1,1,3])
with col1:
start_btn = st.button("🚀 开始转换")
with col2:
st.button("🔄 重置", on_click=clear_recover)
if start_btn and folder_path:
parent_dir = os.path.dirname(folder_path.rstrip(os.sep))
base_folder = os.path.basename(folder_path.rstrip(os.sep))
st.session_state.output_folder = os.path.join(parent_dir, f"{base_folder}_converted_{output_format}")
os.makedirs(st.session_state.output_folder, exist_ok=True)
supported_ext = ['.mp3', '.wav', '.flac', '.ogg', '.aac', '.m4a']
file_list = []
for root, _, files in os.walk(folder_path):
for file in files:
if os.path.splitext(file)[1].lower() in supported_ext:
file_list.append(os.path.join(root, file))
if not file_list:
st.error("未找到支持的音频文件!")
st.stop()
progress_bar = st.progress(0)
status_text = st.empty()
total_files = len(file_list)
for index, input_file in enumerate(file_list):
try:
status_text.markdown(f"正在处理:`{os.path.basename(input_file)}`")
result = convert_audio_format(input_file, output_format, st.session_state.output_folder)
if "转换失败" in result:
st.session_state.error_messages.append(result)
else:
st.session_state.converted_files.append(result)
progress = (index + 1) / total_files
progress_bar.progress(progress)
except Exception as e:
st.session_state.error_messages.append(f"严重错误: {input_file} - {str(e)}")
progress_bar.empty()
st.balloons()
st.success(f"转换完成!共处理 {len(file_list)} 个文件,成功 {len(st.session_state.converted_files)} 个")
if st.session_state.converted_files or st.session_state.error_messages:
st.subheader("📋 转换结果")
tab1, tab2 = st.tabs(["✅ 成功文件", "❌ 错误信息"])
with tab1:
if st.session_state.converted_files:
st.write(f"输出目录:`{st.session_state.output_folder}`")
for file in st.session_state.converted_files:
st.markdown(f"- `{os.path.basename(file)}`")
else:
st.info("暂无成功转换的文件")
with tab2:
if st.session_state.error_messages:
for msg in st.session_state.error_messages:
st.error(msg)
else:
st.info("没有错误发生")
st.markdown("---")
st.markdown("""
**使用说明:**
1. 输入包含音频文件的文件夹路径
2. 选择要转换的目标格式
3. 点击开始转换按钮
4. 转换后的文件会保存在新创建的文件夹中
""")