💬
movファイルをブログに貼り付けるためにgifに変換するコマンド
$ bloggif input.mov output.gif
で最大横幅800のきれいなgifに変換する
#!/bin/bash
# bloggif
# Usage: bloggif input.mov output.gif
# スクリプトがエラー発生時に終了するように設定
set -e
# エラーハンドリング: 引数の数をチェック
if [ "$#" -ne 2 ]; then
echo "Usage: $0 input.mov output.gif"
exit 1
fi
# 引数を変数に代入
INPUT_FILE="$1"
OUTPUT_FILE="$2"
PALETTE_FILE="/tmp/palette.png"
# 中間生成ファイルの存在を確認し、存在する場合は削除
if [ -f "$PALETTE_FILE" ]; then
echo "既存のパレットファイルを削除します: $PALETTE_FILE"
rm "$PALETTE_FILE"
fi
# 入力動画の横幅を取得
echo "入力動画の横幅を取得しています..."
WIDTH=$(ffprobe -v error -select_streams v:0 -show_entries stream=width -of csv=p=0 "$INPUT_FILE")
# スケール値を決定
if [ "$WIDTH" -gt 800 ]; then
SCALE=800
echo "入力の横幅は$WIDTHピクセルなので、800ピクセルにダウンスケールします。"
else
SCALE="$WIDTH"
echo "入力の横幅は$WIDTHピクセルなので、そのままのサイズで使用します。"
fi
# カラーパレットの生成
echo "カラーパレットを生成しています..."
ffmpeg -y -i "$INPUT_FILE" -vf "fps=10,scale=${SCALE}:-1:flags=lanczos,palettegen" "$PALETTE_FILE"
# カラーパレットを使用してGIFを作成
echo "GIFを作成しています..."
ffmpeg -y -i "$INPUT_FILE" -i "$PALETTE_FILE" -filter_complex "fps=10,scale=${SCALE}:-1:flags=lanczos [x]; [x][1:v] paletteuse" "$OUTPUT_FILE"
# 中間生成ファイルの削除
echo "中間ファイルを削除しています..."
rm "$PALETTE_FILE"
echo "GIFの作成が完了しました: $OUTPUT_FILE"
Discussion