pythonでシネマスコープ画像を簡単に作成するソフトを作ってみたので配布してみる

2021年6月10日カメラカメラ,カメラ,ソフト,作ってみた

シネマスコープの画像はかっこいい

※この記事の内容は動画にしてますので、時間がある方は動画を見ていただいた方がよくわかります。よければチャンネル登録よろしくぅ

カメラで撮影した画像は基本的に二種類の縦横比率になる。

一つは4:3、

シネマスコープ変換ソフト

もう一つは16:9だ。

シネマスコープ変換ソフト

どちらもよく見る一般的な比率だ。大半の人がこのどちらかで写真を撮っている。

しかし最近Twitterでこんな横長の写真を見ることが多くなった。

シネマスコープ変換ソフト

なんとなくスタイリッシュな印象を持った。

これは2.35:1という比率らしい。

映画で多用されることから、シネマスコープとも呼ばれるとか。

私もこんな写真を作りたいと編集をしてみたが、これがなかなかめんどくさい。

こんな感じで、写真の上部を黒塗りにする必要があるからだ。

いちいちこんなことやってられん、ってことで今回はpythonでこの黒塗り作業を自動化してみた。

ソフトは無料配布するのでぜひ使てみてほしい。

※4:3の写真でこのソフトを使用すると、黒帯部分が太くなってしまうので、最後に16:9の比率にクロップするプログラムを追加しました。(2021/2/28)

シネマスコープ画像作成ソフトの使い方

まずは写真を適当なフォルダにまとめて突っ込む。

そして下記リンクより、ソフトをダウンロード

zipファイルの中身を開くと、CinemaScopeConverter.exeが入っているので、それを起動する。

フォルダ選択画面が立ち上がるので、先ほど写真を突っ込んだフォルダを選択。

シネマスコープ変換ソフト

ソフトが消えたらおわり!

写真が入っているフォルダを見てみると、シネマスコープ比率になった写真が入っているはず。

ってことで、変換した写真をちょっと見てってくだせぇ。

どう?ちょっと映画チックなそれっぽい写真になるでしょ?

シネマスコープの難しさ

このソフトを使えば、一応シネマスコープ比率になるが、その扱いは難しい。

というのも、先ほど述べたように、もともとは4:3や16:9で撮り、そこから上下を黒塗りにするので、撮影時点で「黒塗りにされるであろう部分」を想像しながら撮ることになる。

対象物を画面一杯に収めてしまうと、上下が切り取られて悲しい気分になる。

多少引きの絵で、上下に余白を残して撮影しなければならない。

pythonプログラムの中身

今回のプログラムはこんな感じ。

#モジュールインポート
from PIL import Image, ImageDraw
from glob import glob
from os import path
from tkinter import filedialog


#tkinterのフォームで写真の入ったファイルパスを取得
folder_path = filedialog.askdirectory(initialdir ='C:\\pg',title = '写真が入っているフォルダを選択してください')

#ファイルの一覧をリストで取得
files = glob(folder_path + "/*")

#ファイルのリストから一つづ配列に拾う
file_list = []
for file in files:
    #ファイル名取得
    print(file)
    file_list.append(path.dirname(file) + "/" + path.basename(file))

#もう一度ファイルを一つづ上下を黒塗りと切り取りにして保存
for index in range(len(file_list)):
    try:
        #写真を開く
        img = Image.open(file_list[index])
    except Exception:
        continue
    #黒塗り
    up_right_y = (img.height/2)-(img.width /2.35 /2)
    under_left_y = (img.height/2)+(img.width /2.35 /2)
    draw = ImageDraw.Draw(img)
    draw.rectangle((0, 0, img.width, up_right_y), fill=(0, 0, 0))
    draw.rectangle((0, under_left_y, img.width, img.height), fill=(0, 0, 0))
    #切り抜き
    up_left_y = (img.height/2)-(img.width /16*9 /2)
    under_right_y = (img.height/2)+(img.width /16*9 /2)
    img = img.crop((0,up_left_y,img.width,under_right_y))

    img.save(file_list[index])


Posted by mottiy