0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

初学者でも完走賞をとりたい!!Advent Calendar 2023

Day 23

ChatGPTでプログラミング(複数の動画ファイルの形式変換)

Last updated at Posted at 2023-12-24

はじめに

以前、こんな記事を書きました。

簡単にまとめると、mp4 形式の動画ファイル input_video.mp4 を gif 形式の動画ファイル output_video.gif に変換して保存するという内容です。

これは Qiita の記事に動画ファイルを載せるために作成したプログラムなのですが、利用する際に元動画名を input_video.mp4 に変更する必要があります。複数のgif形式を作成する場面では非常に面倒です。

そこで、ChatGPTの力を借りて、複数のmp4形式の動画をgif形式にまとめて変換するプログラムを作成していきたいと思います。

要件定義

元のプログラムはこちらです。これを次の仕様に変更していきます。

  • inputフォルダ内にあるmp4形式の動画を全てgif形式に変換する
  • 変換されたgif形式の動画はoutputフォルダ内に保存する
  • 変換されたgif形式のファイル名は元のmp4形式と同様のものにする

実装

ChatGPTで次のテキストを入力します。

次のプログラムを./inputディレクトリにあるすべてのmp4ファイルをgif形式に変換して、
./outputディレクトリに保存するプログラムに変更せよ。
生成されるgif形式のファイル名は、変換元のmp4ファイルと同じ名称とする。
例えば、./inputディレクトリにある「sample1.mp4」と「sample2.mp4」は、
プログラムが実行されると、それぞれがgif形式に変換されて、
./outputディレクトリに「sample1.gif」と「sample2.gif」として保存される。

from moviepy.editor import VideoFileClip

# 動画をGIFに変換する関数
def convert_video_to_gif(input_file, output_file, fps=10):
    # 動画ファイルの読み込み
    clip = VideoFileClip(input_file)

    # GIFに変換
    clip.write_gif(output_file, fps=fps)

# スクリプトが直接実行された場合の条件分岐
if __name__ == "__main__":
    # 入力動画ファイル名
    input_file = "input.mp4"

    # 出力GIFファイル名
    output_file = "output_video.gif"

    # GIFのフレームレート
    fps = 5

    # convert_video_to_gif 関数を呼び出して、動画を GIF に変換
    convert_video_to_gif(input_file, output_file, fps)

これで、次のプログラムが得られました。

ChatGPTの回答
import os
from moviepy.editor import VideoFileClip

# 動画をGIFに変換する関数
def convert_video_to_gif(input_file, output_file, fps=10):
    # 動画ファイルの読み込み
    clip = VideoFileClip(input_file)

    # GIFに変換
    clip.write_gif(output_file, fps=fps)

# スクリプトが直接実行された場合の条件分岐
if __name__ == "__main__":
    # 入力ディレクトリと出力ディレクトリ
    input_directory = "./input"
    output_directory = "./output"

    # GIFのフレームレート
    fps = 5

    # 入力ディレクトリ内のすべてのmp4ファイルを処理
    for filename in os.listdir(input_directory):
        if filename.endswith(".mp4"):
            # 入力ファイルと出力ファイルのパスを構築
            input_file_path = os.path.join(input_directory, filename)
            output_file_path = os.path.join(output_directory, os.path.splitext(filename)[0] + ".gif")

            # convert_video_to_gif 関数を呼び出して、動画を GIF に変換
            convert_video_to_gif(input_file_path, output_file_path, fps)

テスト

ChatGPTで得られたプログラムをconvertAllVideo.pyというファイル名で保存して、端末で実行してみます。なお、次のコマンドは、この記事での作業を終えているものとします。

# 仮想環境をアクティブにする
videoConvert\Scripts\activate

# プログラムの実行
python convertAllVideo.py

# 仮想環境を非アクティブにする
deactivate

次に実行した際に出力されるログを示します。./output\~.gif~ は元のファイル名(mp4形式)に依存します。

$ python convertAllVideo.py
MoviePy - Building file ./output\MeshLambertMaterial.gif with imageio.
MoviePy - Building file ./output\MeshPhongMaterial.gif with imageio.
MoviePy - Building file ./output\MeshPhysicalMaterial.gif with imageio.
MoviePy - Building file ./output\MeshStandardMaterial.gif with imageio.
MoviePy - Building file ./output\MeshToonMaterial.gif with imageio.

無事に複数のmp4形式のファイルをgif形式のファイルに変換して、outputフォルダに保存できました。今回はデバッグなしの一発でChatGPTからプログラムを得ることができました。

おわりに

次にチャットの内容を示します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?