見出し画像

ChatGPTで動画編集〜動くグラフをTwitterに投稿したい〜

さて、巷で話題のChatGPTですが、コードも書けるとの噂でしたので、動く損益グラフというのを以下の記事で作成してみました。

ほとんど私が指示役で、ChatGPTがプログラマーという力関係で見事に完成させることが出来ました。


Twitterに動くグラフを投稿したい

作成したのはGIF形式の動くグラフなのですが、それをTwitterにも投稿してみようかなと思ったところ、以下の通り動画はMP4で投稿してみたいな表示が出てしまいました。

そこで、良い機会なのでChatGPTを使ってGIF動画をMP4動画に変換してみることにしました。

GIF動画をMP4動画に変換する方法

これまでですと、あまり知識がなくて「GIF動画をMP4動画に変換してみたい」と思った時にまず行う方法は、

  • ”GIF動画をMP4動画に変換 方法”などで検索する。

  • GIF動画をMP4動画に変換可能な無料ツールを見つけ出し、変換する。

といったステップが一般的だったかと思います。

ところが今は、AIに聞ける時代です。
チャット型AIであるChatGPTに同じことを聞いたら、どうなるでしょうか。

ChatGPTに動画の変換方法を聞いてみる

GIFをMP4に変換できますか?

はい、GIFをMP4に変換することは可能です。変換には多くの画像編集ソフトやオンラインコンバーターが使用できます。例えば、PhotoshopやOnline-Convert.comなどがあります。また、コマンドラインベースのツールも使用できます。例えば、FFmpegというツールがあります。

ChatGPT

Pythonでできますか?

はい、PythonでGIFをMP4に変換することもできます。これは、画像処理ライブラリーを使用することで実現できます。例えば、OpenCVまたはImageMagickなどがあります。
具体的には、GIFから各フレームを抽出して、それらを結合して動画ファイルを作成することができます。このような処理は、高度な画像処理のスキルが必要となる場合がありますが、Pythonを使用することで簡単に実現することができます。

ChatGPT

良い感じの回答です。これはもう少し具体的にお願いしたら対応してくれそうです。

ChatGPTにコードをお願いしてみる

コードをお願いします。

次のようなPythonコードを使用することで、GIFをMP4に変換することができます。このコードは、OpenCVライブラリを使用します。

ChatGPT
import cv2
import numpy as np

# GIFファイル名
filename = "sample.gif"

# 動画ファイル名
output_filename = "sample.mp4"

# GIFを読み込む
gif = cv2.VideoCapture(filename)

# 動画情報を取得
width = int(gif.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(gif.get(cv2.CAP_PROP_FRAME_HEIGHT))
fps = int(gif.get(cv2.CAP_PROP_FPS))

# 出力先の VideoWriter の設定
fourcc = cv2.VideoWriter_fourcc(*"mp4v")
video = cv2.VideoWriter(output_filename, fourcc, fps, (width, height), isColor=True)

# 各フレームを取り出して保存
while True:
    ret, frame = gif.read()
    if not ret:
        break

    # 各フレームを動画に追加
    video.write(np.array(frame))

# 動画の保存とリソースの解放
gif.release()
video.release()

このコードを実行すると、入力となるGIFファイルからMP4形式の動画ファイルが生成されます。

ChatGPT

cv2がインポートできませんでした

申し訳ございません。cv2ライブラリを使用するには、事前にOpenCVパッケージをインストールする必要があります。
次のコマンドを使用して、OpenCVをインストールできます。

ChatGPT
pip install opencv-python

インストールが完了したら、再度コードを実行してみてください。

ChatGPT

このような感じで、少しでもエラーが出たらすぐ聞くという流れで、エラーが出る度にググるといった流れを省略して効率化出来ている実感があります。

動画の長さを短くしてもらう

出来上がった動画が2:12とTwitterに投稿するには少し長めだったので、少し調整をお願いしました。

MP4の動画を倍速にして時間を短くすることはできますか?

はい、MP4形式の動画を倍速にすることは可能です。このような変換には、動画編集ソフトやオンラインコンバーターを使用することができます。例えば、Adobe Premiere ProやOnline-Convert.comなどがあります。また、コマンドラインベースのツールも使用できます。例えば、FFmpegというツールがあります。
Pythonでも、OpenCVやMoviePyなどのライブラリを使用することで、動画を倍速にすることができます。具体的には、動画から各フレームを抽出して、必要な数だけスキップすることで、動画を倍速化することができます。

ChatGPT

Pythonでコードを教えて下さい

次のようなPythonコードを使用することで、MP4形式の動画を倍速にすることができます。このコードは、OpenCVライブラリを使用します。

ChatGPT
import cv2

# 入力動画のファイル名
input_filename = "input.mp4"

# 出力動画のファイル名
output_filename = "output.mp4"

# 倍速の倍率
speed_factor = 2.0

# 入力動画の読み込み
cap = cv2.VideoCapture(input_filename)

# 出力先の VideoWriter の設定
frame_width = int(cap.get(3))
frame_height = int(cap.get(4))
fps = int(cap.get(cv2.CAP_PROP_FPS))
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out = cv2.VideoWriter(output_filename, fourcc, fps, (frame_width, frame_height))

# 各フレームを取り出して保存
frame_count = 0
while True:
    ret, frame = cap.read()
    if not ret:
        break

    frame_count += 1

    # 倍速の倍率に応じて、フレームを追加するか判定
    if frame_count % int(speed_factor) == 0:
        out.write(frame)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 動画の保存とリソースの解放
cap.release()
out.release()
cv2.destroyAllWindows()

このコードを実行すると、入力動画を倍速にした動画ファイルが生成されます。

ChatGPT

縦横比を16:9にしてもらう

作成した動画の縦横比がイマイチだったみたいで、Twitterにアップロード拒否されてしまいました。さらに修正をお願いしてみます。

MP4の縦横比を16:9に変換したいです

OpenCVを使用して、MP4の縦横比を16:9に変換することができます。次のようなコードを使用してください。

ChatGPT
import cv2

# 元の動画の読み込み
cap = cv2.VideoCapture("input.mp4")

# 出力する動画の設定
fourcc = cv2.VideoWriter_fourcc(*"mp4v")
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
aspect_ratio = 16 / 9
new_height = int(width * aspect_ratio)

# 新しい縦横比を保ったまま動画サイズを変更する
if new_height > height:
    new_height = height
    width = int(new_height / aspect_ratio)

# 動画を保存するための準備
out = cv2.VideoWriter("output.mp4", fourcc, cap.get(cv2.CAP_PROP_FPS), (width, new_height))

# 動画を読み込みながら、変換して保存する
while True:
    ret, frame = cap.read()
    if not ret:
        break
    frame = cv2.resize(frame, (width, new_height))
    out.write(frame)

# 動画の保存
cap.release()
out.release()

このコードでは、元の動画から縦横比を16:9に保ったまま動画サイズを変更し、新しい動画を生成して保存します。

ChatGPT

Twitterに投稿成功

そんなこんなで、以下の通り無事にTwitterに投稿することが出来ました。

まとめ

以上、見てきたようにChatGPTで動画編集というのも上手く誘導してコードを書いてもらうようにすれば、そのコードをコピペしていくだけで実現出来てしまいそうです。Pythonで出来ることなら大体出来るのかもしれません。

やはり使い方次第では、ChatGPTはかなり有用です。

最後に、こんな質問をしてみました。

本当にあなたはなんでも出来ますね。Pythonで出来ることだったら何でも出来てしまうのですか?

私はOpenAIによってトレーニングされた言語モデルです。一定の範囲内では、プログラミング言語Pythonに関する質問に対する回答をすることができます。ただし、すべてのことが出来るわけではありません。特定のタスクが可能かどうかは、そのタスクに必要なデータやリソースが利用可能かどうかなどによって異なります。

ChatGPT

思ったより謙虚な回答でした。ChatGPTは遜ったりするのも得意ですよね。

いやいや、ご謙遜を。

どういたしまして、お手伝いできることがありましたら、お気軽にお尋ねください。

ChatGPT

お後がよろしいようで。

よろしければサポートお願いします。いただいたサポートは今後の記事の執筆に活用させていただきます。