2024年3月3日 星期日

數個m4a音檔,轉換成單一 MP3

 情境:手機之「語音備忘錄」(錄音程式),產出格式為m4a音檔,但想轉換成MP3音檔🎶

 📌需預先備妥轉換程式:  

💚(開放源碼)ffmpeg轉檔工具,支援跨平台系統

💚可先安裝好Chocolatey工具,直接於Windows命令提示模式下,執行安裝ffmpeg指令
choco install ffmpeg

💚安裝 ffmpeg工具後, 執行python m4a_to_mp3.py,可將單一m4a音檔 或多個m4a(需先將自己錄好的m4a音檔,預先改檔名成 file1.m4a 、file2.m4a、 file3.m4a、  ~,以利PYHTON程式做轉換) ,轉換成Mp3音樂檔案格式

💚解決方式:可使用Python程式(如下藍色部分,另存成m4a_to_mp3.py),將數個m4a檔(檔名自file1.m4a 、file2.m4a、系統會自動將所有file*.m4a檔合併起來),最後轉換成單一MP3音檔(Output.mp3)

import os

def convert_m4a_to_mp3(input_files, output_file):
    # 確認輸入來源之檔案,是否存在?
    for file in input_files:
        if not os.path.exists(file):
            print(f"來源檔案 '{file}' 不存在.")
            return False
    
    # 合併清單M4A檔案
    input_list_path = 'input_list.txt'
    with open(input_list_path, 'w') as f:
        for file in input_files:
            f.write(f"file '{file}'\n")
    
    try:
        os.system(f"ffmpeg -f concat -safe 0 -i {input_list_path} -c copy merged.m4a")
    except Exception as e:
        print(f"合併檔案時,發生錯誤: {e}")
        return False
    
    # 轉換為MP3格式
    try:
        os.system("ffmpeg -i merged.m4a -acodec libmp3lame -ab 256k -ar 44100 -y output.mp3")
    except Exception as e:
        print(f"轉換檔案時,發生錯誤: {e}")
        return False
    
    # 删除臨時交換檔案
    os.remove(input_list_path)
    os.remove("merged.m4a")
    
    print("合併 & 轉檔完成.")
    return True

if __name__ == "__main__":
    input_files = []
    output_file = "output.mp3"  # 輸出MP3檔案名稱
    file_index = 1
    while True:
        file_name = f"file{file_index}.m4a"
        if os.path.exists(file_name):
            input_files.append(file_name)
            file_index += 1
        else:
            break

    if len(input_files) == 0:
        print("未找到file1.m4a 聲檔,系統將合併file1.m4a file2.m4a ~ 依序載入到最後,並自動轉出成Output.mp3格式.")
    else:
        if convert_m4a_to_mp3(input_files, output_file):
            print(f"轉換檔案完成,輸出檔案名稱為 '{output_file}'")