如何在 iMovie 里添加字幕|Python 脚本帮你加速
iMovie 不像剪映等工具,添加字幕是极其麻烦的。(这个链接)给出了一个方法:
- 随便找一个本地图片,然后把图片设置透明
- 然后在照片的底部位置插入文本,填写你想显示的字幕
- 把照片拖动视频上方,字幕照片设置为「画中画」
但如果你的字幕比较多,这非常麻烦,如果你有 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)