見出し画像

【配布】note用に動画をGIFに変換して透かしを入れるツールを作った ~Python x OpenCV x Pillow 画面録画を貼り付けて快適記事作成~

こんにちはRcatです。
プログラミングに関する記事ではあんまり気にならなかったのですが、3Dプリンターの話を書き始めた瞬間、静止画だけだとやりづらいなということに気づきました。

動画をYouTubeにアップロードして、リンクを貼るのでもいいかもしれませんが、通信量もかかりますし、アップロードも意外と手間です。
しかし、画像にもアニメーションするものがありますよね、そうGIFです。
というわけで今回は、画面録画をGIFに変換し、ついでに自分の著作権表記を書き込むということをやっていこうと思います。

↓実行結果(本作の使い方)
このように画像として読み込まれる。中央に著作権表記が埋め込まれる。


使い方

まず、最初に本ツールの使い方を紹介します。
配布は一番下で行っているので、そこから取得してください。

最初のステップはPythonのインストールです。
初めての方は以下の記事を参考にインストールしてください。

配布データの確認

インストールが完了すると配布したデータのうちpyというファイルがPythonのアイコンに変わります。

配布データ

実行環境の構築

インストールしたらstartという名前の歯車マークをダブルクリックしてください。
しばらく黒い画面が起動して落ちると思います。
本作は自動環境構築対応なので、これで環境が構築されます。

黒い画面が閉じるとデータに変化があります。
まずVENVというフォルダが出来上がっています。そしてMP4Togifという名前のファイルも出来上がっています。このうち"mp4togif.json"を開いてみましょう。

設定ファイルの変更

Windowsのメモ帳で開くとこんな感じ。これは設定ファイルです。現在はデフォルトの設定が入っていますが、これを個人個人で好きなように書き換えてください。

  • FPS
    GIFファイルの1秒あたりのコマ数を設定します。
    増やすと滑らかに動きますがサイズが大きくなるので、増やしすぎないようにすることをおすすめします。

  • watermark
    電子透かしを入れます。
    使わない場合は文字を消して””にしておいてください。多分日本語は使えないです。

  • size
    画像のサイズです。縦横を直接指定するか、片方だけを指定したり、一定範囲内に収まるようにしたりできます。

    • 直接指定する場合
      [1920,1080]このような書き方の場合は、このサイズになるように画像がリサイズされます。

    • 片方を-1にする
      [500,-1]このような書き方の場合は、数値が入っている辺のサイズが優先されます。この場合横500縦???です。

    • 片方を0にする
      [500,0]このような書き方の場合、長い方の編または短い方の辺が優先されます。[短辺,長辺]。例の場合は短い方の辺が500になるようにリサイズされます。

    • 両方をマイナスにする
      [-1000,-1000]デフォルトです。この枠内に収まるようにリサイズされます。

  • color
    電子透かしの文字の色をRGBで指定します。
    数値は0から255までの間です。[255,0,0]この場合は真っ赤になります。

  • opacity
    不透明度を指定します。値が小さいほど透過します。

  • fontsize
    文字の大きさを指定します。画像の高さ方向に対してパーセンテージで指定できます。この設定は%と入力する必要があります。

  • position
    文字の位置です。パーセンテージで指定します。
    正の値の場合は左から。負の値の場合は右から。100以上の場合は中央に来るように調整されます。デフォルトは真ん中です。

デフォルトの設定では、画像は縦横どちらかが1000ピクセル以下になるようにリサイズされ、灰色の文字列で透過率70%でフォントサイズが高さ方向10%中央でrcatの著作権表記が入ります。
長いですね…。

設定ファイルの書き方を間違えてしまい、起動できなくなった場合は一旦削除すればデフォルトでまた出てきます。

実行方法

設定と環境構築が終わったら変換したい動画をstart.batにドラッグアンドドロップしてください。
正常に環境構築と設定が行われていれば、黒い画面が立ち上がりしばらくすると動画があったフォルダの中にGIFファイルが同じ名前で作成されています。

出来上がったGIFファイルのサイズについては、大体3mb程度がnoteにアップロードできる限界みたいです。何度かやってみて失敗するようならサイズが小さくなるように画像のサイズを変えたり、FPSを下げたりしましょう。しましょう。

FAQ

pillowでエラーが出ます

付属の環境構築、バッチを使って環境を構築しましたか?
本作はpillowのバージョン9番台を使っています。最新のバージョンのライブラリでは動きません。

おまけ Windowsでの画面録画方法

今回の記事でも紹介しているツールを使って動画を変換していますが、そもそもこの動画どうやって撮ったの?っていう話です。
Windows11現在、方法は2つあります。

ウィンドウをキャプチャする場合

Win + Alt + R を押すと即座に録画が開始されます。
画面に小さく録画中のウィンドウが出てくるので、終了時はそのボタンを押します。

もしも起動しない場合はWin + Gを押してゲームツールバーを開いて録画が起動できるか確認してください。

保存先はマイビデオのキャプチャです。


指定範囲をキャプチャする場合

Win + Shift + R を押すとスクリーンショットみたいに画面が暗くなり範囲選択ができるようになります。
範囲を選択すると画面上にスタートボタンが出てくるので、そのボタンを押すことで録画ができます。

保存先はマイビデオの画面録画です。

どちらの方法を使用しても本ツールで画像に変換できることは確認済みです。


解説

ここからは利用者というよりかはプログラミング関係のネタを見てくれている方向けです。
使いたいだけの方は一番最後までスキップしてください。
今回はそこまで複雑ではないので、ある程度を解説します。

全体像

メインのソースコードは画像1枚に収まりました。
別で作った関数は入っていませんが…。

まず、最初クラスのインスタンス部分については、設定ファイルの読み込みやデフォルトの設定の出力などを行っているだけです。
あと、色だけはタプルにしておかないとプログラムの都合上エラーが出るのでタプルに変換しています。

読み込みと変換部分

一番大事なのはやっぱここですよね。
ここではビデオを読み込みながら必要なフレームだけをpillowオブジェクトに変換して読み込んでいます。
プログラムの書き方的には、ビデオの読み込みとGIFの変換は分けたいところですが、この書き方の方が高速でメモリ消費量が少ないのでこういう書き方になっています。
具体的には動画のフレームレートとGIFのフレームレートの差から何フレームに1フレーム抜き出すか決定し、その通りに抜き出しています。
抜き出されたフレームはpillowオブジェクトには変換し、設定で必要があればリサイズと印字を行います。
全ての画像の処理が終わったら、いつも通りGIFの出力手順を踏んでいます。

しかし、まぁこれだけで動画をGIFに変換できてしまうなんて、本当にPythonは素晴らしいですね。
apngのライブラリとかもあるみたいなので、LINEスタンプ以外見たことありませんが、apngも出力できるみたいです。どっちがいいんでしょうね。

リサイズと印字については、他の有料作品でも使っているソースを使い回しているので、ダウンロードしてご覧ください。


最後に

利用規約

情報や作品の活用時は事前に利用規約をご確認ください。

コメントについて

利用規約のガイドラインを確認の上コメントしてください

配布

以下のURLから配布しています。

https://script.google.com/macros/s/AKfycbxdcr8pnazR7RbjaSICTtaNWfN7h_rjQrKlZ3h9CZpPRFzRILk1OGc8mZqKbF-NXNO9/exec?name=MP4_GIF変換

ダウンロードに必要な配布情報は下記をご確認ください


いいなと思ったら応援しよう!

Rcat999 情報が役に立ったと思えば、僅かでも投げ銭していただけるとありがたいです。

この記事が参加している募集