フォルダ内にある動画ファイルをGIFファイルに一括変換する方法

Linux(Ubuntu 24)でSimpleScreenRecorderなどを使って録画した動画をブログ用のGIFファイルに変換するのが面倒だったので、フォルダ内にある動画ファイル(mkv)を一括でGIFファイルに変換するツールを作成してみたので紹介します。

試したのはLinuxのみですがFFmpegとffmpeg-pythonパッケージが使えれば他のプラットフォームでも利用できるかと思います。

システムにFFmpegがインストールされている必要があります。


サンプルソースコード(Python)

Python仮想環境にPipenvを利用していますがffmpeg-pythonをインストールできればvenvでもPython仮想環境を使わないpip/pipxダイレクトでもお好みの方法でOKです。

Pipfile:

[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]
ffmpeg-python = "*"

[dev-packages]

[requires]
python_version = "3.12"
python_full_version = "3.12.3"

convert_to_gif.py:

import os
import glob
import ffmpeg

def convert_mkv_to_gif(input_folder):
    # 入力フォルダ内にある.mkvファイルのリストを取得
    input_files = glob.glob(os.path.join(input_folder, "*.mkv"))

    for input_file in input_files:
        # 出力ファイル名を取得(入力ファイルのベース名はそのまま拡張子をgifに変更)
        output_file = os.path.splitext(input_file)[0] + ".gif"

        # 出力ファイル名に該当するファイルが既に存在する場合はスキップ
        if os.path.exists(output_file):
            print(f"Skipping {os.path.basename(input_file)}: GIF already exists")
            continue

        try:
            # FFmpegを使用してMKVをGIFに変換
            (
                ffmpeg
                .input(input_file)
                .output(output_file)
                .run()
            )

            print(f"Converted {os.path.basename(input_file)} to GIF")

        except ffmpeg.Error as e:
            print(f"Error converting {os.path.basename(input_file)}:")
            print(f"stdout: {e.stdout.decode('utf8') if e.stdout else ''}")
            print(f"stderr: {e.stderr.decode('utf8') if e.stderr else ''}")

# カレントディレクトリのファイルを変換対象とする
input_folder = os.getcwd()
convert_mkv_to_gif(input_folder)


使い方

動画のあるフォルダに今回作成したconvert_to_gif.pyファイルを配置して実行すると、FFmpegでフォルダ内の*.mkvファイルをGIFに変換して元のベースファイル名+.gifというファイル名で同じフォルダに出力します。
画質やサイズを調整したい等については、参考ウェブサイトのffmpeg-pythonのドキュメントをご参照ください。


参考ウェブサイトなど

  • GitHub
    kkroening/ffmpeg-python


以上です。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする