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に変換できますか?
Pythonでできますか?
良い感じの回答です。これはもう少し具体的にお願いしたら対応してくれそうです。
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()
cv2がインポートできませんでした
pip install opencv-python
このような感じで、少しでもエラーが出たらすぐ聞くという流れで、エラーが出る度にググるといった流れを省略して効率化出来ている実感があります。
動画の長さを短くしてもらう
出来上がった動画が2:12とTwitterに投稿するには少し長めだったので、少し調整をお願いしました。
MP4の動画を倍速にして時間を短くすることはできますか?
Pythonでコードを教えて下さい
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()
縦横比を16:9にしてもらう
作成した動画の縦横比がイマイチだったみたいで、Twitterにアップロード拒否されてしまいました。さらに修正をお願いしてみます。
MP4の縦横比を16:9に変換したいです
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()
Twitterに投稿成功
そんなこんなで、以下の通り無事にTwitterに投稿することが出来ました。
まとめ
以上、見てきたようにChatGPTで動画編集というのも上手く誘導してコードを書いてもらうようにすれば、そのコードをコピペしていくだけで実現出来てしまいそうです。Pythonで出来ることなら大体出来るのかもしれません。
やはり使い方次第では、ChatGPTはかなり有用です。
最後に、こんな質問をしてみました。
本当にあなたはなんでも出来ますね。Pythonで出来ることだったら何でも出来てしまうのですか?
思ったより謙虚な回答でした。ChatGPTは遜ったりするのも得意ですよね。
いやいや、ご謙遜を。
お後がよろしいようで。