透過GIF シェルスクリプト中心

 

大量のファイルを一括変換 シェルスクリプト


場合により、yesffmpegが必要。
ない人は 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 usagi      GIF mello figu

APNG透けなかった。


アニメーションも作った。
https://cdn-ak.f.st-hatena.com/images/fotolife/a/asrine/20201129/20201129214451.gif

-



 

 

 

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でも透過して表示される画像を作る。

 

サイトポリシー
お問い合わせ