つづき。
はじめに
引き続き、雑学動画自動生成ツールを自作できないか、検討してみているお話です。
今回は、画像を生成できるPythonライブラリ「Pillow」で、黒フチのテキスト画像を生成できるか検証してみた話です。
前回の記事で、MoviePyの字幕機能を使ってみましたが、どうにも自分のイメージした字幕にならなかったので、代替方法として「Pillow」が使えないか確認しました。
検証準備
Pythonのインストール
「Python」で雑学動画自動生成ツールを作るつもりなので、検証でも同様に使います。
詳細は以下の記事にまとめていますので、ご興味ある方は、そちらをご覧ください。
PyCharmのインストール
Pythonでの開発を楽にしてくれる統合開発環境「PyCharm」を使います。
Pythonで雑学動画自動生成ツールを作る際に使うつもりなので、検証でも同様に使います。
詳細は以下の記事にまとめていますので、ご興味ある方は、そちらをご覧ください。
検証用Pythonプロジェクトおよびvenvの作成
検証用「Pythonプロジェクト」を作成します。
PyCharmで簡単に作成できます。
Pythonプロジェクトを作成したら、その中で「venv」(Python仮想環境)を作成しておきます。
詳細は以下の記事にまとめていますので、ご興味ある方は、そちらをご覧ください。


Pythonパッケージのインストール
今回は、以下のパッケージを使用します。
| No | パッケージ | 説明 |
|---|---|---|
| 1 | pillow | Pythonで画像を開いたり、加工・保存したりできる画像処理ライブラリパッケージです。 |
検証用Pythonプロジェクトでvenvを起動し、パッケージをインストールします。
ターミナルでコマンド実行してインストールする方法やPyCharm上で画面を操作してインストールする方法がありますが、今回は、PyCharm上で画面を操作し、venvにパッケージをインストールします。

フォントファイルの準備
テキストのフォントを指定できるようなので、フォントファイルを準備します。
今回は、Googleフォントの「Noto Sans Japanese」を使います。
検証してみた
Pillowを使用した黒フチのテキスト画像生成の流れ
今回は、以下の流れで黒フチのテキスト画像を生成します。
- 適当なサイズの白背景色の画像を作成する
- 事前に準備したフォントで適当なサイズのテキストを作成する
- 改行を考慮して、1行毎のサイズを計算する
- 改行を考慮したテキストの全体サイズを計算する
- 背景画像サイズとテキスト全体サイズをもとに、テキストを背景画像の中央に配置する場合の座標を計算する
- 黒フチ用の黒色テキストと、黒フチで囲む白色テキストを重ねて、白色背景画像に描画する
- 画像を保存する
Pillowを使用した黒フチのテキスト画像生成の試し
では実際に、黒フチのテキスト画像を生成してみます。
Pillowを使ったPythonサンプルコード
from PIL import Image, ImageDraw, ImageFont
# 画像サイズと背景色(白に変更)
width, height = 1280, 720
bg_color = (255, 255, 255) # 白背景!
# フォント設定
font_path = "NotoSansJP-Regular.ttf"
font_size = 100
text = "こんにちは、\n今日はいい天気ですね。"
text_color = (255, 255, 255) # 白文字
outline_color = (0, 0, 0) # 黒フチ
# 画像作成
img = Image.new("RGB", (width, height), bg_color)
draw = ImageDraw.Draw(img)
font = ImageFont.truetype(font_path, font_size)
# 改行処理
lines = text.split("\n")
line_sizes = [font.getbbox(line) for line in lines]
line_heights = [bbox[3] - bbox[1] for bbox in line_sizes]
line_widths = [bbox[2] - bbox[0] for bbox in line_sizes]
total_height = sum(line_heights)
max_width = max(line_widths)
y_start = (height - total_height) // 2
# 行ごとに描画
y = y_start
for i, line in enumerate(lines):
bbox = font.getbbox(line)
w = bbox[2] - bbox[0]
h = bbox[3] - bbox[1]
offset_x = bbox[0]
offset_y = bbox[1]
x = (width - w) // 2 - offset_x
y_corrected = y - offset_y
# 黒フチ描画(まわりを囲む)
for dx in range(-2, 3):
for dy in range(-2, 3):
if dx != 0 or dy != 0:
draw.text((x + dx, y_corrected + dy), line, font=font, fill=outline_color)
# 白文字本体
draw.text((x, y_corrected), line, font=font, fill=text_color)
y += h
# 保存
img.save("output_black_outline_white_bg.jpg")Pythonサンプルコード実行結果
D:\PyCharmProjects\PillowTest\.venv\Scripts\python.exe D:\PyCharmProjects\PillowTest\generate_text_image_with_outline.py
プロセスは終了コード 0 で終了しましたサンプルコードで生成された画像

MoviePyの字幕よりもデザイン的にイメージに近いので、十分に、雑学動画自動生成ツールで使えると感じました。
おわりに
「Pillow」を使って、黒フチのテキスト画像を生成できることが分かりました。
動画の字幕には「Pillow」を使うのも良さそうなことが分かったので、次の技術やツールの検証に移ろうと思います。
(今回も検証用のコードは、ChatGPT(GPT-4oモデル)に出力してもらったものを微修正したものです)
今回の記事も、同じように副業に悩んでいる人、手探りで取り組んでいる人にとって、何かの参考になれば嬉しいです。
これからも記録を続けていく予定なので、よければフォローしてもらえると嬉しいです。
つづき。








