编辑代码

import os
from pydub import AudioSegment

def add_watermark(input_audio, watermark_audio, position_ms):
    """
    在指定位置插入音频水印
    :param input_audio: 原始音频 (AudioSegment 对象)
    :param watermark_audio: 水印音频 (AudioSegment 对象)
    :param position_ms: 插入水印的时间点(毫秒)
    :return: 添加水印后的音频 (AudioSegment 对象)
    """
    # 确保水印音频不超过原始音频的剩余长度
    if position_ms + len(watermark_audio) > len(input_audio):
        raise ValueError("水印音频超出原始音频长度")

    # 在指定位置叠加水印音频
    output_audio = input_audio.overlay(watermark_audio, position=position_ms)
    return output_audio

def convert_mp3_to_m4a(input_dir, output_dir, watermark_file, position_ms=30000, bitrate="64k"):
    """
    将指定目录下的 MP3 文件批量转码为 M4A 格式,并在指定时间点插入音频水印
    :param input_dir: 输入 MP3 文件目录
    :param output_dir: 输出 M4A 文件目录
    :param watermark_file: 水印音频文件路径
    :param position_ms: 插入水印的时间点(毫秒,默认 30000 毫秒,即 30 秒)
    :param bitrate: 输出音频的比特率(默认 64kbps)
    """
    # 确保输出目录存在
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)

    # 加载水印音频
    watermark = AudioSegment.from_file(watermark_file)

    # 遍历输入目录下的所有 MP3 文件
    for filename in os.listdir(input_dir):
        if filename.endswith(".mp3"):
            # 输入文件路径
            input_file = os.path.join(input_dir, filename)
            # 输出文件路径
            output_file = os.path.join(output_dir, filename.replace(".mp3", ".m4a"))

            # 加载原始音频
            audio = AudioSegment.from_mp3(input_file)

            # 在指定时间点插入水印
            try:
                audio = add_watermark(audio, watermark, position_ms)
                # 导出为 M4A 格式,并设置比特率
                audio.export(output_file, format="ipod", bitrate=bitrate)
                print(f"转码完成:{output_file}")
            except ValueError as e:
                print(f"跳过文件 {filename}{e}")

if __name__ == "__main__":
    # 输入 MP3 文件目录
    input_dir = "/music/mp3/"
    # 输出 M4A 文件目录
    output_dir = "/music/m4a/"
    # 水印文件路径
    watermark_file = "watermark.mp3"
    # 插入水印的时间点(30 秒)
    watermark_position = 30000

    # 检查输入目录是否存在
    if not os.path.exists(input_dir):
        print(f"错误:输入目录 {input_dir} 不存在")
    else:
        # 执行批量转码
        convert_mp3_to_m4a(
            input_dir=input_dir,
            output_dir=output_dir,
            watermark_file=watermark_file,
            position_ms=watermark_position,
            bitrate="64k"
        )