返回

如何在 iMovie 里添加字幕|Python 脚本帮你加速

iMovie 不像剪映等工具,添加字幕是极其麻烦的。(这个链接)给出了一个方法:

  1. 随便找一个本地图片,然后把图片设置透明
  2. 然后在照片的底部位置插入文本,填写你想显示的字幕
  3. 把照片拖动视频上方,字幕照片设置为「画中画」

但如果你的字幕比较多,这非常麻烦,如果你有 50 多行的字幕,就光弄这 2 小时就没了。

下面这个 Python 脚本可以帮你根据字幕批量生成字幕照片,文字大小、字幕颜色、字体可自己修改。

考虑不同视频内容会影响字幕的显示,加了一个黑色半透明背景,透明度也可以自己调整。

from PIL import Image, ImageDraw, ImageFont

def create_subtitle_images(text_list, output_dir, font_path, font_size=28, font_color="#FFFFFF", bg_color=(0, 0, 0, 128)):
    """
    根据输入的文字列表生成带半透明黑色背景、白色字体的透明背景图片,用于制作 iMovie 字幕。

    :param text_list: 需要生成图片的文字列表
    :param output_dir: 保存生成图片的目录
    :param font_path: 字体文件路径
    :param font_size: 字体大小
    :param font_color: 字体颜色
    :param bg_color: 字幕背景颜色(包括透明度)
    """
    # 加载字体
    font = ImageFont.truetype(font_path, font_size)

    for idx, text in enumerate(text_list):
        # 创建一个透明背景的新图像,尺寸可以根据需要调整
        width, height = 1920, 1080  # iMovie 通常使用的分辨率
        new_image = Image.new("RGBA", (width, height), (255, 255, 255, 0))
        draw = ImageDraw.Draw(new_image)

        # 获取文字的尺寸
        text_bbox = draw.textbbox((0, 0), text, font=font)
        text_width = text_bbox[2] - text_bbox[0]
        text_height = text_bbox[3] - text_bbox[1]

        # 计算文字在底部居中的位置,并在文字下方留出一行的空间
        margin = 30  # 留出的空白行的高度
        padding = 10  # 背景矩形的内边距
        text_x = (width - text_width) // 2
        text_y = height - text_height - margin

        # 绘制半透明黑色背景矩形
        background_x0 = text_x - padding
        background_y0 = text_y - padding
        background_x1 = text_x + text_width + padding
        background_y1 = text_y + text_height + padding
        draw.rectangle([(background_x0, background_y0), (background_x1, background_y1)], fill=bg_color)


        # 在新图像上绘制白色文字
        draw.text((text_x, text_y), text, font=font, fill=font_color)

        # 保存新图像
        output_path = f"{output_dir}/subtitle_{idx+1}.png"
        new_image.save(output_path)

        print(f"新图像已保存到 {output_path}")

# 使用示例
if __name__ == "__main__":
    text_list = [
        "请在此处输入字幕",
        "字幕1",
        "字幕2",
        "感谢观看"
    ]
    output_dir = "/Users/XXX/Desktop/"  # 替换为保存图片的目录路径
    font_path = "/Library/Fonts/MicrosoftYaHeiUI.ttf"  # 替换为支持中文的字体路径,例如 SimSun.ttf

    create_subtitle_images(text_list, output_dir, font_path)
分享到