はじめに
以前、こんな記事を書きました。
簡単にまとめると、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)
これで、次のプログラムが得られました。
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からプログラムを得ることができました。
おわりに
次にチャットの内容を示します。