tg动态壁纸转MP4和GIF

tg动态壁纸转MP4和GIF

步骤

  1. lottie是一种视频格式,数据会保存为一个json,所以lottie文件是一个json文件,可以在进行https://svgsprite.com/tools/lottie-player/播放。
  2. tg的动态壁纸的后缀为tgs,官方介绍tgs是lottie格式的gzip压缩。
  3. tgs文件在手机的/storage/emulated/0/Android/data/org.telegram.messenger/cache里,虽然后缀为tgs,但其实已经解压过,直接是个json文件了可以播放了。
  4. 使用https://github.com/transitive-bullshit/puppeteer-lottie,依赖于gifskiffmpeg,可以直接装换为mp4或者gif。但是发现最后一帧会有问题,导致视频会闪一闪。
  5. 使用puppeteer-lottie对lottie转gif,会在/tmp生成一个临时目录,文件夹名字形似一个md5,保存全部帧的png,拷贝出来待用
  6. 使用ffmpeg将png压成mp4
  7. 使用ffmpeg将mp4压成gif

使用puppeteer-lottie对lottie转gif获取png

目的是获取到png而不是转为gif。所以运行到一定程度就可以control+c了。生成gif不知道为什么会调用chrome,并且生成一个都要非常久,所以异步一口气跑,会很卡。

1
2
3
4
5
6
7
8
9
10
11
const renderLottie = require('puppeteer-lottie')
const fs = require('fs')

fs.readdir("/home/home/json",function(err, files){
files.forEach(function(file){
renderLottie({
path: "/home/home/json/"+file,
output: '/home/home/gif/'+file+'.gif'
})
});
});

使用ffmpeg将png压成mp4

貌似ffmpeg的-r是指60帧,fps又好像是指60帧???反正压出来貌似还行,不懂ffmpeg怎么用

1
2
3
4
5
6
7
#!/usr/bin/env bash

for file_name in `ls /home/home/png`
do
cd '/home/home/png/'$file_name
ffmpeg -r 60 -i frame-000000000%03d.png -c:v libx264 -vf fps=60 -pix_fmt yuv420p '/home/home/mp4/'$file_name'.mp4'
done

使用ffmpeg将mp4压成gif

1
2
3
4
5
6
7
#!/usr/bin/env bash

for file_name in `ls /home/home/mp4`
do
cd '/home/home/mp4/'$file_name
ffmpeg -i '/home/home/mp4/'$file_name '/home/home/gif/'$file_name.gif
done

tg动态壁纸转MP4和GIF
https://cellargalaxy.github.io/posts/折腾/10.tg动态壁纸转MP4和GIF/
作者
cellargalaxy
发布于
2019年9月14日
许可协议