Deepseek中輸入提示詞: 寫一個(gè)m4b格式文件(帶有章節(jié)的 AAC 編碼的音頻文件)轉(zhuǎn)換為mp3格式的Python腳本,,具體步驟如下: 用戶輸入m4b格式音頻的文件地址,,比如:"F:\有聲英文書\Life 3.0 Being Human in the Age of Artificial Intelligence (Unabridged).m4b" 接受這個(gè)文件地址,,然后將其轉(zhuǎn)換為mp3格式的音頻,; 新建一個(gè)子文件夾,,文件名名稱為m4b格式音頻的主文件名,; 讀取m4b格式音頻中的章節(jié)信息,,將這個(gè)mp3文件按照m4b格式音頻中的章節(jié)分割成多個(gè)mp3音頻,,保存在剛才新建的子文件夾中,; 如果m4b格式音頻中沒有章節(jié)信息,就按照每段1個(gè)小時(shí)時(shí)長(zhǎng)將這個(gè)mp3文件分割,; 注意:每一步都要輸出信息到屏幕上 如果用戶輸入的不是m4b格式音頻,,而是mp3音頻文件,就跳過轉(zhuǎn)換步驟,,直接按照每段1個(gè)小時(shí)時(shí)長(zhǎng)將其分割,; Deepseek的回復(fù): 要實(shí)現(xiàn)將帶有章節(jié)的 m4b 格式音頻轉(zhuǎn)換為 mp3 格式,并根據(jù)章節(jié)信息分割成多個(gè) mp3 文件的 Python 腳本,,可以使用 ffmpeg-python 庫和 mutagen 庫來讀取章節(jié)信息,。以下是實(shí)現(xiàn)該功能的完整腳本: 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): # 提取文件名和擴(kuò)展名 file_name, _ = os.path.splitext(os.path.basename(input_path)) # 創(chuàng)建子文件夾 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}") # 檢查輸入文件是否已經(jīng)是mp3格式 if input_path.lower().endswith('.mp3'): print(f"Input file is already an mp3 file: {input_path}") output_mp3_path = input_path else: # 轉(zhuǎn)換為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}") # 讀取章節(jié)信息并分割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] # 讀取章節(jié)信息 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文件,每章節(jié)一段 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] # 計(jì)算每小時(shí)的秒數(shù) hour_in_seconds = 3600 # 獲取音頻的總時(shí)長(zhǎng) probe = ffmpeg.probe(input_mp3_path) duration = float(probe['format']['duration']) # 計(jì)算需要分割的段數(shù) 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: # 轉(zhuǎn)換并分割音頻 convert_m4b_to_mp3(input_path) 腳本說明: 輸入路徑:用戶輸入 m4b 或 mp3 文件的路徑,。 創(chuàng)建子文件夾:根據(jù) m4b 或 mp3 文件的主文件名創(chuàng)建一個(gè)子文件夾,。 轉(zhuǎn)換為 mp3:如果輸入文件是 m4b 格式,則使用 ffmpeg-python 將其轉(zhuǎn)換為 mp3 格式,,并保存在新建的子文件夾中,。如果輸入文件已經(jīng)是 mp3 格式,則跳過轉(zhuǎn)換步驟,。 讀取章節(jié)信息:使用 mutagen 庫讀取 m4b 文件中的章節(jié)信息,。 分割 mp3 文件:根據(jù)章節(jié)信息將 mp3 文件分割成多個(gè) mp3 文件,,并保存在同一子文件夾中。 依賴庫: ffmpeg-python:用于調(diào)用 ffmpeg 進(jìn)行音頻處理,。 mutagen:用于讀取 m4b 文件中的章節(jié)信息,。 安裝依賴: bash 復(fù)制 pip install ffmpeg-python mutagen 運(yùn)行腳本: 將腳本保存為 convert_m4b_to_mp3.py,然后在終端或命令行中運(yùn)行: bash 復(fù)制 python convert_m4b_to_mp3.py 注意事項(xiàng): 確保 ffmpeg 已安裝并配置在系統(tǒng)路徑中,,以便 ffmpeg-python 可以調(diào)用它,。 腳本會(huì)自動(dòng)創(chuàng)建子文件夾并保存轉(zhuǎn)換后的文件,因此請(qǐng)確保輸入路徑正確且有寫權(quán)限,。 如果 m4b 文件中沒有章節(jié)信息,,腳本會(huì)提示并跳過分割步驟。 |
|