めもちょー

メモ帳代わりに使っています。

Ubuntuでスクリーンレコードした動画をはてなブログにgifとして貼る

動画変換の手順

Ubuntu22.04 LTSのスクリーンキャプチャの録画機能を使うと.webmファイルとして録画ファイルが出力されます。
これをはてなブログでGIFとして貼るには圧縮とファイルタイプの変換が必要です。
下記のように実行したら、27インチPCのスクリーンレコード30秒程度の動画を、問題なく貼ることが出来ました。

# 1. 幅を600, 高さはアスペクト比を保ったままスケール
fmpeg -i origin.webm -vf scale=600:-1 origin_scaled.webm

# 2. 1で出力されたwebmをフレームレート30のGIFに変換
ffmpeg -i origin_scaled.webm -r 30 origin_scaled.gif

再利用可能にする

上記の操作を関数化して再利用できるようにします。
本来であれば、圧縮する関数と拡張子を変換する関数で分けたほうが良いかもしれませんが、なるべく.bashrcを汚したくないため1関数にまとめました。

# scale_video
# eg1) 幅指定なし(デフォルトで600)
#      convert_video_to_gif example.webm
# eg2) 幅を指定して変換
#      convert_video_to_gif example.mp4 800
convert_video_to_gif() {
    if [ -z "$1" ]; then
        echo "Usage: convert_video_to_gif <input_video_file> [width]"
        return 1
    fi

    input_file="$1"
    width=${2:-600}  # 幅を指定, デフォルトは600
    frame_rate=${3:-30}  # フレームレートを指定, デフォルトは30

    output_file="${input_file%.*}_scaled.${input_file##*.}"
    gif_file="${input_file%.*}_scaled.gif"

    # 1. 幅を指定した値にスケーリング
    ffmpeg -i "$input_file" -vf scale=${width}:-1 "$output_file"

    # 2. スケーリングされた動画を30fpsのGIFに変換
    ffmpeg -i "$output_file" -r ${frame_rate} "$gif_file"

    echo "Conversion completed. GIF file: $gif_file"
}

下記のようなgifが出来ます。