見出し画像

AI・Shiori AIに「Python」のプログラム(スライドショー)を作ってもらった

前回、「BingAI」にJavascriptを使った画像一覧のプログラムを書いてもらいましたが、今日は、Pythonでスライドショーの動画を作成してもらうプログラムを「BingAI」にお願いして作ってもらいました。

まず、Pythonのインストールが必要になりますので、インストールしていない方は下記のページで親切に教えてくれていますので参考にしてください。

Pythonでプログラムをつくる。

まず、下記の内容を「BingAI」に聞くと、あっという間にコードを書いてくれました。

<依頼内容と会話の詳細>
※以下、太字部分が僕からBingAIに依頼した内容です。

1.Pythonで下記のプログラムを作成してください。
  プログラム内容:フォルダ内にある画像(JPG,PNG)をスライドショーの動画(Mp4)にするプログラム。

出来上がったコードはほぼ完成していましたが、動画サイズとフレームレートを事前に設定できる仕様に変更したいと考え、以下の修正依頼をしました。

2.動画を作成する前に、動画の幅、高さ、フレームレートの数値を設定するウインドウを表示して、入力後実行するように修正してください

出来上がったファイルは完璧に動作しましたが、画像表示時間を1秒以上(フレームレートの数値を1未満)にするとエラーになりました。

3.一枚の画像の表示時間を1秒以上に設定できるよう、フレームレートボックスに1未満の数値を入力できるようにしてください。

そうして出来上がったコードがこれです。わずか二回の修正でこの完成度ですから、相変わらず素晴らしいですね。

# 必要なモジュールをインポート
import os
import cv2
import tkinter as tk # Tkinterモジュールをインポート

# 動画の設定を入力するウインドウを作成する関数
def create_window():
    # ウインドウのオブジェクトを作成
    window = tk.Tk()
    # ウインドウのタイトルを設定
    window.title("動画の設定")
    # ウインドウのサイズを設定
    window.geometry("300x200")

    # 動画の幅を入力するラベルとエントリーを作成
    width_label = tk.Label(window, text="動画の幅(ピクセル)")
    width_label.pack()
    width_entry = tk.Entry(window)
    width_entry.pack()

    # 動画の高さを入力するラベルとエントリーを作成
    height_label = tk.Label(window, text="動画の高さ(ピクセル)")
    height_label.pack()
    height_entry = tk.Entry(window)
    height_entry.pack()

    # 動画のフレームレートを入力するラベルとエントリーを作成
    fps_label = tk.Label(window, text="動画のフレームレート(フレーム/秒)")
    fps_label.pack()
    fps_entry = tk.Entry(window)
    fps_entry.pack()

    # 動画のフレームレートが0以上かどうかチェックする関数
    def check_fps():
        # エントリーから入力された値を取得して浮動小数点数に変換
        fps = float(fps_entry.get()) # 整数ではなく浮動小数点数に変換
        # fpsが0以下ならエラーメッセージを表示してエントリーをクリア
        if fps <= 0: # 1未満ではなく0以下に変更
            tk.messagebox.showerror("エラー", "動画のフレームレートは0より大きい値にしてください。")
            fps_entry.delete(0, tk.END)
        # fpsが0より大きいならプログラムを実行
        else:
            run_program()

    # 動画の設定を反映してプログラムを実行する関数
    def run_program():
        # エントリーから入力された値を取得して整数に変換
        global width # グローバル変数にする
        global height # グローバル変数にする
        global fps # グローバル変数にする
        width = int(width_entry.get())
        height = int(height_entry.get())
        fps = float(fps_entry.get()) # 浮動小数点数に変換

        # ウインドウを閉じる
        window.destroy()


        # フォルダ内の画像ファイルのパスを取得
        folder = "images" # 画像ファイルが入っているフォルダの名前
        files = os.listdir(folder) # フォルダ内のファイル名のリスト
        images = [] # 画像ファイルのパスのリスト
        for file in files:
            if file.endswith((".jpg", ".png")): # JPGかPNGの拡張子を持つファイルだけを対象にする
                images.append(os.path.join(folder, file)) # フォルダ名とファイル名を結合してパスを作る

        # 動画ファイルのパスとエンコーダーを設定
        video = "video.mp4" # 動画ファイルの名前
        fourcc = cv2.VideoWriter_fourcc(*"mp4v") # 動画ファイルのエンコーダー

        # 動画ライターを作成
        writer = cv2.VideoWriter(video, fourcc, fps, (width, height))

        # 画像ファイルを順番に読み込んで動画に書き込む
        for image in images:
            img = cv2.imread(image) # 画像ファイルを読み込む
            img = cv2.resize(img, (width, height)) # 画像ファイルを指定したサイズにリサイズする
            writer.write(img) # 動画に書き込む

        # 動画ライターを解放する
        writer.release()

        # 完了メッセージを表示する
        print("動画ファイルが作成されました。")

    # 動画の設定を反映してプログラムを実行するボタンを作成
    run_button = tk.Button(window, text="実行", command=check_fps) # check_fps関数を呼び出すように変更
    run_button.pack()

    # ウインドウのメインループを開始
    window.mainloop()

# 動画の設定を入力するウインドウを作成する関数を呼び出す
create_window()

必要なモジュールをインストール

このコードを実行するには、「必要なモジュール」をインストール必要がありますので、インストールの方法を聞くと以下の回答をもらいました。


必要なモジュールのインストールの方法を教えてください。

  • osモジュールはPythonに標準で付属しているモジュールなので、インストールする必要はありません。

  • cv2モジュールはOpenCVという画像や動画の処理に使われるモジュールで、pipというパッケージ管理ツールを使ってインストールできます。コマンドプロンプトやターミナルで以下のコマンドを入力してください。

pip install opencv-python
  • tkモジュールはTkinterというGUIツールキットのモジュールで、Pythonに標準で付属していますが、一部の環境では別途インストールする必要があります。pipを使ってインストールする場合は、以下のコマンドを入力してください。

pip install tk

これらの指示に従ってコマンドプロンプトでインストールします。

1.Windowsキーを押して、上部の検索窓に「cmd」と入れるとアプリが表示され、開くとコマンドプロンプトの画面が開きます。
2.上部2番のcv2モジュールをインストールしました。

プログラムの起動

1.上記のコードをコピーしてメモ帳に貼って、「slideshow.py」というファイルを作ります(ファイル名は何でもよいが拡張子はpyとします)。

2.あとは、BingAIの以下の回答を参照ください。

コードをコピーして「slideshow.py」というファイルを「slideshow」というフォルダに入れました。この後、どうすればいいですか?

(1)画像ファイルが入っているフォルダを作成します。このフォルダの名前は、コード内のfolderという変数に代入されている値と同じにしてください。デフォルトではimagesという名前になっています。

  # フォルダ内の画像ファイルのパスを取得
        folder = "images" # 画像ファイルが入っているフォルダの名前      

(2)画像ファイルをフォルダに入れます。画像ファイルはJPGかPNGの拡張子を持つものだけを対象にします。画像ファイルのサイズや順番は任意ですが、動画のサイズやフレームレートに合わせて調整すると良いでしょう。

(3)コマンドプロンプトで、SlideShow.pyがあるディレクトリに移動します。
<ディレクトリの移動方法>
以下の1行目のようにパス付で「cd」コマンドを実行します。
①元々の画面表示:C:\Users\****>
②ここに「cd c:\users\****\Desktop\slideshow」と、slideshowフォルダのパスを入れます
③画面の表示が2行目のように「c:\users\****\Desktop\slideshow>」に変わります、
④そこに「python slideshow.py」と入れてエンターします。

実行すると上記のような画面が出てきて、それぞれの数値を入れて実行するとあっという間に動画ファイルが生成されます。

動画ファイルの名前は、コード内のvideoという変数に代入されている値と同じになり、デフォルトではvideo.mp4という名前になっています。

# 動画ファイルのパスとエンコーダーを設定
        video = "video.mp4" # 動画ファイルの名前

このプログラムをベースに、音楽を入れる方法や、長さを音楽に合わせたり、異なるサイズの画像ファイルを調整しながら再生する方法など、少しずつ拡張させていき、自分の使いやすいプログラムを作り上げることが出来そうです。

完成した動画例がこれです。

これは、1025x1025のpngファイルを6枚(いずれもAIで生成)imagesフォルダに入れて、プログラムを実行して作りました。フレームレートは「0.3/秒」としたので1枚当たり約3.3秒表示で、約20秒で426KBのMP4ファイルが出来ました。以下に表示しているものは、MP4ファイルをGifファイルに変換したものなので、画質があまりよくありませんが参考にしてください。

Gifファイルに返還後の動画

動画作成の手順まとめ

1.Slideshowという名前のフォルダをつくって、その中に、slideshow.pyとimagesフォルダを入れ、その中に静止画ファイルを入れる。
2.コマンドプロンプトでSlideshowフォルダのディレクトリーに移動し、
「Python slideshow.py」を実行すると「Video.mp4」という動画ファイルが一瞬で作成される。


今日は、コーヒーショップでパソコンを操作しているShioriの画像をアップします。

この記事が気に入ったらサポートをしてみませんか?