【第46回PYTHON講座】MP4用アルバムソングリスト画像を作成する

PYTHON

みなさん、こんにちは。
今回はMP4用アルバムソングリスト画像の作成方法を紹介しようと思います。

前回の【第45回PYTHON講座】画像上に文字を書き込む の応用なので、あちらも併せて読んでください。

プログラムの内容

Youtubeにソングリストの動画が挙げられています。その動画の映像には曲名リストが表示されています。ただ、曲の変わっても、どの曲が再生されているかわかりません。なので、曲が演奏されている時は、その曲名を強調させるような画像を挿入すればいいと思い、今回のプログラムを作成するに至りました。

  • テキストファイルに記載したソングリストを画像上に書き込む
  • 2曲目のソングリストであれば、2曲目の曲文字を黒字にし、その他の曲は灰色にする
  • ソングリストは1行目はアルバムのタイトルにする
  • 作成される画像のファイル名は、入力画像ファイル名に数字2桁で表示する(ゼロ埋め)

ソングリストにある曲数分の画像が作成されることになります。

7曲目の画像

ソングリストファイルは下記のフォーマットになります。

Album Title
#1 Song1
#2 Song2
#3 Song3

使用するライブラリPIL(pillow)

画像ライブラリPIL(Python Imaging Library、通称pillow)を使用します。

インストールされていない方は、下記のコマンドを実施して、インストールをして下さい。

pip install pillow

プログラムコードの説明

from PIL import Image
from PIL import ImageFont
from PIL import ImageDraw

inputimg01 = "C:/Labo/buffer/input"
inputimg02 = ".jpg"
inputimg = inputimg01 + inputimg02

xpos, ypos = 400, 100
ftype = "C:/Windows/Fonts/ariblk.ttf"
fsize = 20
font = ImageFont.truetype(ftype, fsize)

filename = "C:/Labo/buffer/out/songlist.txt"
with open(filename) as f:
    l = f.readlines()


for i in range(len(l)-1):
    img = Image.open(inputimg).convert('RGB')
    draw = ImageDraw.Draw(img)

    for j in range(len(l)):
        if(i+1 == j and j != 0):
            draw.text((xpos, ypos+j*fsize), l[j], (0, 0, 0), font=font)
        else:
            draw.text((xpos, ypos+j*fsize), l[j], (100, 100, 100), font=font)

    outimg = inputimg01 + f'{(i+1):02}' + inputimg02
    img.save(outimg)
1~3行目 ライブラリのインポート
from PIL import Image
from PIL import ImageFont
from PIL import ImageDraw

Imageは画像ファイルを開くため、ImageFontは書き込む文字のフォントの設定ImageDrawは文字を書き込むために使用します。

5~7行目 入力画像の各種設定
inputimg01 = "C:/Labo/buffer/input"
inputimg02 = ".jpg"
inputimg = inputimg01 + inputimg02

出力画像のファイル名を入力画像のファイル名+数字2桁とする為に、敢えて、拡張子を分けて定義しています。

9~12行目 位置、フォント設定
xpos, ypos = 400, 100
ftype = "C:/Windows/Fonts/ariblk.ttf"
fsize = 20
font = ImageFont.truetype(ftype, fsize)

xpos、ypos は文字を書き込む座標になります。画像の左上が原点(0,0)になります。

ftypeはフォントの設定になります。太字やイタリックなどの変更するオプションが無いので、太字やイタリックにしたい場合は、そのフォントファイルを選択して下さい。

Windowsの場合、C:/Windows/Fonts/ にフォントファイルが入っているので、好きなフォントを選んでみましょう。必ずフルパスで入力してください。上記の場合は、arialの太字のフォントになります。

fsizeはフォントの大きさになります。

14~16行目 ソングリストファイルの読み込み 
filename = "C:/Labo/buffer/out/songlist.txt"
with open(filename) as f:
    l = f.readlines()

lはリスト型になり、アルバム名、曲名が入力されます。

また、ファイルを開く後は閉じなければなりませんが、withで開いた場合は、実行後に閉じる処理が自動で行われるため、closeは不要になります。

19~21行目 曲名ファイルを作成するループ
for i in range(len(l)-1):
    img = Image.open(inputimg).convert('RGB')
    draw = ImageDraw.Draw(img)

曲数分の曲名ファイルを作成する為に、基礎のファイルを開きます。

23~30行目 曲名を画像に記入
    for j in range(len(l)):
        if(i+1 == j and j != 0):
            draw.text((xpos, ypos+j*fsize), l[j], (0, 0, 0), font=font)
        else:
            draw.text((xpos, ypos+j*fsize), l[j], (100, 100, 100), font=font)

   outimg = inputimg01 + f'{(i+1):02}' + inputimg02
    img.save(outimg)

1つの曲名を黒とし、その他の曲名を灰色にします。

そして、その曲名の順番で、ファイル名に名前を付けます。f'{(i+1):02}’ とすることで、数字が一桁にはならず2桁になり、2桁目が0になります。

プログラムを実行すると、下記のように曲名が強調されたファイルが作成されます。

まとめ

いかがだったでしょうか。

MP3ファイルをMP4にまとめる場合、上記のように曲名が解る画像を挿入した方が、どの曲が再生されているかを知ることが出来、非常に有効です。

MP4にまとめられている方は、上記のプログラムを利用して、是非、曲名の画像を作ってみてはいかがでしょうか。

役に立った!」と思れましたら、下のSNSボタンで記事のシェアをしていただけると嬉しいです!

コメント

タイトルとURLをコピーしました