🥚

Python(Google Colab)で.pngを.mp4にする

2023/12/01に公開

学校の授業で、大量の静止画(.png×300枚)をパラパラ漫画にして.mp4にしたい場面があったので、Google Colabでやってみました。

1. ノートブックをひらく

Google Colabで新しいノートブックを作成します。
ここではuntitled.ipynbとします。

2. 静止画を入れるフォルダを作る

Google Drive上に静止画を入れるフォルダを作って、そこに静止画をぶちこみます。
私の場合
MyDrive/gazou
を作り、gazouの中に全部の画像を入れてみました。

3. Google Driveをマウントする

これが一番重要。超大事です。
私はこの作業を忘れており、変数が定義されてないだのリストが空だのいろんなエラーを吐きまくって泣きながら色々試したのですが、最終的に自分のドライブにpath繋がってなかったのが原因とわかりました。バカすぎる。

untitled.ipynb
from google.colab import drive
drive.mount('/content/drive')

4. リストに全部の静止画を格納する

フォルダ「gazou」内に入れてある.pngの画像をimg_arrayというリストに格納しています。
最後に、print(len(img_array))をすることで、リストにちゃんと格納されたか確認してみます。
300枚の画像を読み込んだ場合、300と出力されるはずです。

untitled.ipynb
import glob
import cv2

img_array = []
for filename in sorted(glob.glob("/content/drive/MyDrive/gazou/*.png")):
    img = cv2.imread(filename)
    height, width, layers = img.shape
    size = (width, height)
    img_array.append(img)

print(len(img_array))

5. 動画に変換し、出力する

nameで出力先と名前を決めます。出力先はMyDrive直下、名前はdouga.mp4にしました。
outのところに書いてある引数の「20」は、フレームレートを示しているので、今回は1秒間に20枚パラパラしている感じですね。
うまくいけば、douga.mp4が出力されているかと思います。

untitled.ipynb
name = '/content/drive/MyDrive/douga.mp4'
out = cv2.VideoWriter(name, cv2.VideoWriter_fourcc(*'mp4v'), 20, size)

for i in range(len(img_array)):
    out.write(img_array[i])
out.release()

おつかれさまでした。

Discussion