透過GIF シェルスクリプト中心
大量のファイルを一括変換 シェルスクリプト
場合により、yes
とffmpeg
が必要。
ない人は Homeblew などで取ってくる。
目的とは関係ないところでコードを改変している部分もありますから、全部読んでもいいと思う。
---
ただのGIF
mkdir GIF
for i in *.png
do
ffmpeg -i "$i" "GIF/${i%.*}.gif"
done
一枚の静止画からGIF (パレット生成なし)
同じ背景透過画像ファイルを2つ用意し、GIFアニメにする
mkdir GIF
yes |
for i in *.png
do
FILENAME=`echo ${i} | sed 's/\.[^\.]*$//'`
mkdir ${FILENAME}
cp $i ${FILENAME}/1.png
cp $i ${FILENAME}/2.png
cd ${FILENAME}
ffmpeg -f image2 -r 1 -i %d.png "../GIF/${FILENAME}".gif
mv 1.png 2.png ~/.Trash
cd ..
done
生成したパレットも見たい 物好きな人のために、パレットは残しておきました。
消したい人は,次の スクリプトを参照。
静止画GIFアニメーション (適切なパレット生成)
LINEでも背景透過GIF
静止画に見えるが、実体は同じ画像2枚回したGIFアニメーション。
ffmpegで作った GIF
GIFD=`basename "$(pwd)"` mkdir "${GIFD} GIF" yes | for i in *.png do FILENAME=${i%.*} mkdir ${FILENAME} cp $i ${FILENAME}/1.png cp $i ${FILENAME}/2.png cd ${FILENAME} ffmpeg -i 1.png -vf palettegen palette.png && ffmpeg -f image2 -r 1 -i %d.png -i palette.png -filter_complex paletteuse "../${GIFD} GIF/${FILENAME}.gif" cd - rm -r ${FILENAME} done
私、これ エイリアスに設定しておきましたよ. よく使うので。
~/.zshrc に書き込
[部分説明]
最初の2行
◦ 生成するgif画像を出すディレクトリの名前をただの「GIF」から変えました。
今いるディレクトリのフルパスを示して(pwd
)、basename
で パスの最後(のディレクトリ名)を取得
「カレントディレクトリの名前+一つ空白を開けて GIF」という名前にしました。
◦ パスの何処かディレクトリ名に 半角スペースが入ってもいい様に ""で括った。$(pwd)
とmkdir
のとこ
◦ FILENAMEの書き方をスッキリさせた。
sed 書き換えを使わない方法。 (パラメーター展開)
${i%.*}
←
$(echo ${i} | sed 's/\.[^\.]*$//')
◦ "の位置を少し変えた。 ".gif → gif" にした. これでも動くんですよ。微妙すぎ.
◦ パレットは消したー。mv ${FILENAME} ~/.Trash
で一気にゴミ箱へ
残したい人は 1つ上の項目のスクリプトの記述を参考に。
◦ cd -
最後の、気づきましたでしょうか。
cd ..
だと一階層上のディレクトリに移動
cd -
は(時間的に)1つ前のディレクトリに移動
この場合どちらを使ってもいい。
実際使ってみた例 LINEに上げてみました。
私が描いた 透けるうさぎちゃん(APNG)と メロのフィギュア(GIF)ですね。
APNG透けなかった。
-
GIF画像を 後で探して移動させる
mkdir GIF;
find . -type f -name "*.gif" -print0 | xargs -0 -J{} mv {} GIF
findのオプション -maxdepth 1
を使えば、一階層のみで検索できる。
-
----
後書き LINEの仕様変化に注意
「仕様が変わって透過GIFは勝手に白背景が付くようになった」という記事をどこかで見かけましたが,上の「静止画GIFアニメーション」の方法で作成した透過GIF(サイズはオリジナルの倍になる)は執筆当時のversionでは背景も透過されたままでした。
透過GIFでも背景が付くものと付かないものがあります。
ただ ffmpeg -i in.png out.gif
や (透過アニメーションの作り方の)「一枚のGIFを作る場合」 で作った透過GIF(サイズ倍になっていない)はLINEに送信すると勝手に白背景が付きました。
iPhoneの写真.appで見ても 白背景が付いているように見えたので LINEが原因ではないかも。
LINEで背景が透過されるGIFは動画のような扱いをされているようです。
2枚以上まとめて送ろうとしてもバラバラに送られます。
ファイルサイズも倍になる。
透過されないGIFは2枚以上まとめて送ろうとすると,まとめて送られました。
画像は纏めて 送れるが、GIFアニメと動画は 纏めて選択しても, バラバラに投下される。しかし、動画だと「〇〇 sent a video 」だが
GIFアニメでも 画像と同じく「〇〇 sent a photo」と表示される。
昔のLINEでは普通の透過GIFも投稿できていたみたいですが。
LINEで画像をアルバムに入れると勝手に変換されます。
なので、LINEのアルバムから透過GIFを送ることはできません。
*端末かクラウドかLINE Keep*などに保存しておくといいかも。
当たり前だけど,読み込まれないと透過して見えませんね。
透過のグラデーションが表現できないのが残念だなぁ
「ただの」と「適切なパレット生成」ではグラデーションを色で埋める形が異なる。
「ただの」だと少しでも色がついていたら全部埋める,対して「適切なパレット生成」では適切な感じの範囲まで埋める。
ImageOptim通すとLINEで透過できないので注意!
--------
つらつらと
-
昔のLINEは透過画像はそのまま透過されて表示されたそうです。しかし、今のバージョンだと 多分、スタンプを売りたいが為に、透過画像でも勝手に背景が付いてしまう様になりました。
スタンプなんか買うか、LINEは嫌いだ。LINEに一銭も払ってやらない、というポリシーを持つ 私は、この策を 一生懸命考えました。…それが、上記の上から2,3つ目の項目です。
あ でも、誰かさんが 私のために せっせとポイントを稼いで デスノートのLINEスタンプをgiftしてくれました。愛してます。(ちなみに母です)
LINEでも透過して表示される画像を作る。
ー