用AI将m4b格式音频批量转换为mp3格式

大模型向量数据库云通信

Deepseek中输入提示词:

写一个m4b格式文件(带有章节的 AAC 编码的音频文件)转换为mp3格式的Python脚本,具体步骤如下:

用户输入m4b格式音频的文件地址,比如:"F:\有声英文书\Life 3.0 Being Human in the Age of Artificial Intelligence (Unabridged).m4b"

接受这个文件地址,然后将其转换为mp3格式的音频;

新建一个子文件夹,文件名名称为m4b格式音频的主文件名;

读取m4b格式音频中的章节信息,将这个mp3文件按照m4b格式音频中的章节分割成多个mp3音频,保存在刚才新建的子文件夹中;

如果m4b格式音频中没有章节信息,就按照每段1个小时时长将这个mp3文件分割;

注意:每一步都要输出信息到屏幕上

如果用户输入的不是m4b格式音频,而是mp3音频文件,就跳过转换步骤,直接按照每段1个小时时长将其分割;

Deepseek的回复:

要实现将带有章节的 m4b 格式音频转换为 mp3 格式,并根据章节信息分割成多个 mp3 文件的 Python 脚本,可以使用 ffmpeg-python 库和 mutagen 库来读取章节信息。以下是实现该功能的完整脚本:

import os

import ffmpeg

import re

from mutagen.mp4 import MP4, MP4StreamInfoError

from mutagen.mp3 import MP3

from mutagen.id3 import ID3, TIT2, TALB, TPE1, TCON, TYER

def convert_m4b_to_mp3(input_path):

提取文件名和扩展名

file_name, _ = os.path.splitext(os.path.basename(input_path))

创建子文件夹

output_folder = os.path.join(os.path.dirname(input_path), file_name)

os.makedirs(output_folder, exist_ok=True)

print(f"Created folder: {output_folder}")

检查输入文件是否已经是mp3格式

if input_path.lower().endswith('.mp3'):

print(f"Input file is already an mp3 file: {input_path}")

output_mp3_path = input_path

else:

转换为mp3格式

output_mp3_path = os.path.join(output_folder, f"{file_name}.mp3")

print(f"Converting {input_path} to {output_mp3_path}...")

ffmpeg.input(input_path).output(output_mp3_path, acodec='libmp3lame').run()

print(f"Conversion complete: {output_mp3_path}")

读取章节信息并分割mp3文件

split_mp3_by_chapters_or_hour(output_mp3_path, output_folder)

def split_mp3_by_chapters_or_hour(input_mp3_path, output_folder):

提取文件名

file_name = os.path.basename(input_mp3_path).split('.')[0]

读取章节信息

try:

audio = MP4(input_mp3_path)

chapters = audio.get('\xa9chp')

except MP4StreamInfoError:

chapters = None

if chapters:

print(f"Found {len(chapters)} chapters in {input_mp3_path}")

split_mp3_by_chapters(input_mp3_path, output_folder, chapters)

else:

print("No chapters found in the m4b file. Splitting by hour.")

split_mp3_by_hour(input_mp3_path, output_folder)

def split_mp3_by_chapters(input_mp3_path, output_folder, chapters):

提取文件名

file_name = os.path.basename(input_mp3_path).split('.')[0]

分割mp3文件,每章节一段

for i, chapter in enumerate(chapters):

start_time = chapter[0]

end_time = chapter[1] if i < len(chapters) - 1 else None

chapter_name = chapter[2]

output_segment_path = os.path.join(output_folder, f"{file_name}_chapter{i+1}_{chapter_name}.mp3")

print(f"Processing chapter {i+1} '{chapter_name}' starting at {start_time} seconds...")

if end_time:

ffmpeg.input(input_mp3_path, ss=start_time, to=end_time).output(output_segment_path).run()

else:

ffmpeg.input(input_mp3_path, ss=start_time).output(output_segment_path).run()

print(f"Chapter {i+1} saved as {output_segment_path}")

def split_mp3_by_hour(input_mp3_path, output_folder):

提取文件名

file_name = os.path.basename(input_mp3_path).split('.')[0]

计算每小时的秒数

hour_in_seconds = 3600

获取音频的总时长

probe = ffmpeg.probe(input_mp3_path)

duration = float(probe['format']['duration'])

计算需要分割的段数

num_segments = int(duration // hour_in_seconds) + 1

print(f"Splitting {input_mp3_path} into {num_segments} segments...")

for i in range(num_segments):

start_time = i * hour_in_seconds

output_segment_path = os.path.join(output_folder, f"{file_name}_part{i+1}.mp3")

print(f"Processing segment {i+1} starting at {start_time} seconds...")

ffmpeg.input(input_mp3_path, ss=start_time).output(output_segment_path, t=hour_in_seconds).run()

print(f"Segment {i+1} saved as {output_segment_path}")

if __name__ == "__main__":

用户输入m4b或mp3文件路径

input_path = input("Enter the path to the m4b or mp3 file: ")

检查文件是否存在

if not os.path.exists(input_path):

print(f"File not found: {input_path}")

else:

转换并分割音频

convert_m4b_to_mp3(input_path)

脚本说明:

输入路径:用户输入 m4b 或 mp3 文件的路径。

创建子文件夹:根据 m4b 或 mp3 文件的主文件名创建一个子文件夹。

转换为 mp3:如果输入文件是 m4b 格式,则使用 ffmpeg-python 将其转换为 mp3 格式,并保存在新建的子文件夹中。如果输入文件已经是 mp3 格式,则跳过转换步骤。

读取章节信息:使用 mutagen 库读取 m4b 文件中的章节信息。

分割 mp3 文件:根据章节信息将 mp3 文件分割成多个 mp3 文件,并保存在同一子文件夹中。

依赖库:

ffmpeg-python:用于调用 ffmpeg 进行音频处理。

mutagen:用于读取 m4b 文件中的章节信息。

安装依赖:

bash

复制

pip install ffmpeg-python mutagen

运行脚本:

将脚本保存为 convert_m4b_to_mp3.py,然后在终端或命令行中运行:

bash

复制

python convert_m4b_to_mp3.py

注意事项:

确保 ffmpeg 已安装并配置在系统路径中,以便 ffmpeg-python 可以调用它。

脚本会自动创建子文件夹并保存转换后的文件,因此请确保输入路径正确且有写权限。

如果 m4b 文件中没有章节信息,脚本会提示并跳过分割步骤。

picture.image

0
0
0
0
相关资源
如何利用云原生构建 AIGC 业务基石
AIGC即AI Generated Content,是指利用人工智能技术来生成内容,AIGC也被认为是继UGC、PGC之后的新型内容生产方式,AI绘画、AI写作等都属于AIGC的分支。而 AIGC 业务的部署也面临着异构资源管理、机器学习流程管理等问题,本次分享将和大家分享如何使用云原生技术构建 AIGC 业务。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论