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 -f image2 -r 1 -i %d.png -filter_complex "split [a][b];[a] palettegen [p];[b][p] paletteuse" "../${GIFD} GIF/${FILENAME}.gif"
cd ..
rm -rf ${FILENAME}
done
ー
使い方
まず、背景 透過画像を用意。
スタンプみたいに表示したい 透過画像が置いてあるディレクトリに cd
して
このシェルスクリプトを実行
使用例
桜ちゃん かわいい
透けるAPNG
試し 結果
LINEのスタンプは APNG形式だが
自作のAPNGおよびWebPアニメも透けなかった。
比較的サイズの軽い GIFだけが 自前画像でも透ける。 (LINEで)
ー
透ける
APNGアニメーションの作り方
↑この画像は WebPですが (2loop)1.unscreenで 透過
フレームたちをDL
2.抜粋して APNG Assembler でアニメーションにする
23枚ほど にした (ffprobe調べで 10fpsだった)
アニメ画像に変換する君 だと APNG ,WebP, HTMLの出力ができる。
webで表示したかったら これでも良い。
ー
GIFの場合
連番にしてから
ffmpeg -i %d.png -filter_complex "[0:v] fps=150,scale=640:-1,split [a][b];[a] palettegen [p];[b][p] paletteuse" tuka.gif
とでもする。
グローバルパレット使用で 綺麗にしている。
サイズはでかし
ー
プレビューで GIFの中身を調整して サイズ軽くする。
画像サイズ 370px 以下にすると
ファイルサイズが少なくなって良い
ー
resizeする時は
リサイズしない状態で パレット作成してから、リサイズしたものを回すと良いです。
450pxくらいが良さそう
------
Pythonで書く
import os
import glob
import shutil
import subprocess
os.makedirs('./GIF')
pngtati = glob.glob("*.png")
for f in pngtati:
filename = os.path.splitext(os.path.basename(f))[0]
os.makedirs('kari')
shutil.copyfile(f, "kari/1.png")
shutil.copyfile(f, "kari/2.png")
os.chdir('./kari')
subprocess.call('ffmpeg -f image2 -r 1 -i %d.png -filter_complex "split [a][b];[a] palettegen [p];[b][p] paletteuse" "../GIF/' + filename + '.gif"', shell=True)
os.chdir('..')
shutil.rmtree('kari')
ffmpegのところは FORMAT関数使って
cmd = 'ffmpeg -f image2 -r 1 -i %d.png -filter_complex \"split [a][b];[a] palettegen [p];[b][p] paletteuse\" \"../GIF/{}.gif\"'.format(filename)
subprocess.call(cmd, shell=True)
でも良い。