你站正式進入全面動態 Emoji 時代,處於世界領先地位
tl;dr;
modify Discourse container yaml's run block.
run:
- exec: echo "Beginning of custom commands"
- exec: sudo apt-get install zstd
- exec: wget https://xjtu.app/uploads/blob/c0/c5/c0c5750785d93fadc478709a83d016df5a760d5e243965b4168126e3beff81b0.zst -O /var/www/discourse/public/images/emoji/noto.tar.zst
- exec: tar xf /var/www/discourse/public/images/emoji/noto.tar.zst -C /var/www/discourse/public/images/emoji/
- exec: mv /var/www/discourse/public/images/emoji/noto-animated-emojis-discourse-names-72x72-avif/* /var/www/discourse/public/images/emoji/noto/
- exec: echo "End of custom commands"
經過管理員 2 晚上的努力,將 451 個 Goole Noto Animated Emojis 導入到你站,標誌著你站正式全面進入動態 Emoji 時代。
如何實現?
Discourse 的 emoji 文件都保存在 /var/www/discourse/public/images/emoji/twemoji/ 目錄下
Noto Animated Emojis 網站提供 Lottie/GIF/WebP 下載,但存在文件大小過大的問題。
例如 Pig 🐖 的 Webp 440 KiB, GIF 482 KiB(512x512),而常規靜態 Emoji(72x72)大小往往 $ \lessapprox $ 1 KiB,所以需要轉碼減少文件大小。
ffmpeg -i pig.gif -c:v libsvtav1 -s 72x72 pig-svtav1.avif
可以獲得 11KiB 的 AVIF 格式動圖。但 ffmpeg AV1 相關的編碼器都不支持不夠明度,獲得的圖片背景變成了白色。

諮詢了高人(Claude),可以用 avifenc 這個工具保留 GIF 的透明背景。
ffmpeg -i gifs/pig.gif -s 72x72 -vf "format=yuva444p" -f yuv4mpegpipe -strict -1 - | avifenc --stdin --fps 33.33 -q 40 -c rav1e -s 0 /tmp/pig-yuva.avif
經過試驗,僅 rav1e/libaom 支持透明度(yuva444p),rav1e 速度較快。-s 0設置速度為最慢以獲得更好的壓縮效果,但不明顯:17K vs 16K。
在 q=40 的質量參數下,圖片大小為 16KiB(相较于 ffmpeg svtav1 的方式体积略大)

以下為所有壓縮後的 Animated Emoji 合集(AVIF 後綴被重命名為了 PNG)
noto-animated-emojis-discourse-names-72x72-avif.tar.zst|attachment (2.5 MB)
あなたはそれが好きですか?
- はい
- いいえ
没看到诶?在哪里啊
长恨此身非我有 何时忘却营营
紫金港第一皮革<・)))><< 由於 /images/emoji route 下的 header 設置了 cache...
# cache emojis
location ~ /images/emoji/ {
expires 1y;
add_header Cache-Control public,immutable;
add_header Access-Control-Allow-Origin *;
}
...需要強制刷新(桌面瀏覽器快捷鍵:Ctrl+F5) / 清除緩存
黑暗模式下,背景填充色为白色,有点难看(

ぜーんぶ弾けなーい!
Soyo34325 我的桌面&行動瀏覽器均未出現,標題圖片為透明背景 AVIF
post deleted by author 保密
IO 疑似是 Safari 的问题

奇怪的问题,我这里查看图片元素也是被填充了的,Chrome 木有任何问题

从 Safari 下载下来的图片是这样的:

ぜーんぶ弾けなーい!
/lgtm
霍霍 这也能做