Skip to content

Instantly share code, notes, and snippets.

View novogrammer's full-sized avatar

Yusuke Kawamoto novogrammer

View GitHub Profile
@novogrammer
novogrammer / png2gif.sh
Created October 25, 2023 11:46
transparent PNG to transparent GIF
#!/bin/bash
# 50fps
convert -delay 2 -loop 0 -layers OptimizeFrame input*.png output.gif
@novogrammer
novogrammer / png2webm.sh
Last active October 24, 2023 16:42
transparent PNG to transparent WEBM
#!/bin/bash
# 60fps
ffmpeg -r 60 -i input%03d.png -crf 10 -b:v 1M output.webm
@novogrammer
novogrammer / png2mov.sh
Last active October 24, 2023 10:51
transparent PNG to transparent MOV
#!/bin/bash
# 60fps
ffmpeg -r 60 -i input%03d.png -c:v hevc_videotoolbox -colorspace bt2020nc -color_trc bt709 -color_primaries bt2020 -vf setparams=color_primaries=bt2020:color_trc=bt709:colorspace=bt2020nc -alpha_quality 0.9 -vtag hvc1 -b:v 1M output.mov
# without colorspace
#ffmpeg -r 60 -i input%03d.png -c:v hevc_videotoolbox -alpha_quality 0.9 -vtag hvc1 -crf 10 -b:v 1M output.mov
# too large
#ffmpeg -r 60 -i input%02d.png -c:v prores_ks output.mov
@novogrammer
novogrammer / mov2webm.sh
Last active October 21, 2023 11:28
transparent MOV to transparent WEBM
#!/bin/bash
ffmpeg -i input.mov -crf 10 -b:v 1M output.webm
@novogrammer
novogrammer / download100images.mjs
Created February 17, 2023 11:19
download100images.mjs
import {execSync} from "child_process"
function zeroPadding(num, qty) {
return `${"0".repeat(qty)}${num}`.slice(qty * -1);
}
async function main(){
for(let i=0;i<100;i+=1){
const text=`image${zeroPadding(i,2)}`;
const filename=`${text}.jpg`;
@novogrammer
novogrammer / LottieSprite.ts
Last active February 3, 2023 07:46
LottieSprite.ts
import {IDestroyOptions,Sprite,Texture} from "pixi.js"
import lottie, { AnimationConfigWithPath, AnimationDirection, AnimationItem, AnimationSegment } from "lottie-web";
interface LottieSpriteParams{
path?:string;
animationData?:Object;
loop?:boolean;
autoplay?:boolean;
onConfigReady?:()=>void,
}
@novogrammer
novogrammer / memory.html
Created May 9, 2022 12:03
WebAssembly.Memory test
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<style>
.run{
}
th,td{
border:1px solid #000;
@novogrammer
novogrammer / AmmoObjectSweeper.js
Last active October 16, 2021 20:53
Ammoのdestroyがめんどくさいので、後でまとめて片付ける仕組みを作った。
class AmmoObjectSweeper{
constructor(ammo){
this.ammo = ammo;
this.temporaryObjects = [];
this.permanentObjects = [];
}
markTemporary(object){
this.temporaryObjects.push(object);
return object;
}
@novogrammer
novogrammer / create-cert.sh
Created July 5, 2021 09:46
Dockerで環境構築を楽しつつ、シンプルにLet's Encryptを使う。DOMAINを実際のドメインに、CONTAINER_NAMEを稼働中のnginxコンテナ名に置き換える。
#!/bin/bash
docker run -it --rm \
-p 80:80 \
--name temp_certbot \
-v "/etc/letsencrypt:/etc/letsencrypt" \
-v "/var/lib/letsencrypt:/var/lib/letsencrypt" \
certbot/certbot certonly \
--standalone \
--agree-tos \
@novogrammer
novogrammer / range.js
Last active May 14, 2021 11:17
Pythonのrangeっぽいやつ
function range(start, stop) {
if (stop == null) {
return range(0, start);
}
if (stop < start) {
throw new Error("stop < start");
}
return [...Array(stop - start).keys()].map((e) => e + start);
}