2021/06/17

透過画像をLINEでも表示するシェルスクリプト

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)

でも良い。