普通の PNG で投稿しても画質の悪い JPEG に変換されるのでこれを透過PNG で投稿することで PNG のまま投稿できた(2019年2月11日頃まで)。
仕様変更の告知:Upcoming changes to PNG image support – Announcements – Twitter Developers
公式の仕様:Media Best Practices — Twitter Developers
2019年2月11日以降で写真は今まで通りJPEGで投稿。イラストのPNGは色が少なければPNG-8に減色する。色が多ければ長辺1200ピクセル、または900ピクセル以下にリサイズする。
2019年2月17日時点でIE10から投稿すると解像度制限は長辺1200ピクセルを超えると最大長辺1200ピクセルにリサイズされた。tween(1.7.2.0)では3899X3001のPNG-8で投稿しPNG-8で表示された。ただし容量制限の5MBのような大容量のPNGはtweenに制限があるのか投稿できなかった。
PNG-8
ffmpeg -i img -filter_complex "split[a][b];[a]palettegen=reserve_transparent=0[pal];[b][pal]paletteuse" -pix_fmt pal8 output.png
長辺1200ピクセル以内にリサイズ
ffmpeg -i img -vf "scale=if(gte(iw\,ih)\,min(1200\,iw)\,-2):if(lt(iw\,ih)\,min(1200\,ih)\,-2)" output.png
長辺900ピクセル以内にリサイズ
ffmpeg -i img -vf "scale=if(gte(iw\,ih)\,min(900\,iw)\,-2):if(lt(iw\,ih)\,min(900\,ih)\,-2)" output.png
コマンド例
コマンドの説明
nullsrc:映像のテストソース。テストソースの中では一番負荷が軽い
scale2ref:映像フィルタ。2入力して、相手側の解像度に合わせることができる
lutrgb:映像フィルタ。特定のRGBに色を変更する
overlay:映像フィルタ。2映像を重ねる
alphamerge:映像フィルタ。2入力して、2入力のグレースケール具合で1入力を透過させる
palettegen:映像フィルタ。最大256色のパレットを作る
paletteuse:映像フィルタ。パレットから元映像を減色する
24bit透過PNG
ffmpeg -i input -f lavfi -i nullsrc=d=1:s=1x1 -filter_complex [1:0]split[a][b];[a][0:0]scale2ref[a0][0];[a0]lutrgb=r=255:g=255:b=255[a1];[b]lutrgb=r=254:g=254:b=254[b0];[a1][b0]overlay=format=rgb[ab];[0][ab]alphamerge output.png
バッチファイル
8bit透過PNG(減色するので容量が減る)
ffmpeg -i input -lavfi palettegen=stats_mode=single[pal],[0:v][pal]paletteuse=new=1 256colors.png
ffmpeg -i 256colors.png -f lavfi -i nullsrc=d=1:s=1x1 -filter_complex [1:0]split[a][b];[a][0:0]scale2ref[a0][0];[a0]lutrgb=r=255:g=255:b=255[a1];[b]lutrgb=r=254:g=254:b=254[b0];[a1][b0]overlay=format=rgb[ab];[0][ab]alphamerge output.png
関連記事
比較する動画の解像度に合わせる scale2ref
映像の上に映像をのせる overlay
Windows の ffmpeg で生放送する方法 : LUT(ルックアップテーブル)
ffmpeg で 256色を最適化する palettegen, paletteuse:高画質アニメGIFを作る方法