Android快速录制视频并转为gif动图
2020年10月29日 - 由Bo 0 评论 2041 阅读
有时需要快速录制android手机上的操作步骤,并转换为gif动图,比如做一些演示范例。在没有其他软件的情况下,可以用到adb和ffmpeg。
先打开usb调试,连接电脑,执行如下命令:
adb shell screenrecord /storage/0000-0000/a.mp4
此时都用的默认参数,操作完成后按ctrl+c退出即可。常用的参数是--size(长和宽默认是手机分辨率或者为1280x720), --bit-rate(默认是4000000即4Mbps), --time-limit(默认180秒)。路径可以选择手机上的目录。
此时可以把该文件拷出来:
adb pull /storage/0000-0000/a.mp4 ./
然后用ffmpeg转换为gif:
ffmpeg -i 1.mp4 1.gif
如果录制了一些无用操作或者时间太长,可以截取部分片段转换为gif。如下命令代表从5秒开始截取3秒。
ffmpeg -t 3 -ss 00:00:05 -i 1.mp4 3s.gif
不过往往转换出来的gif动图文件过大,甚至大于视频文件大小。于是可以加一些额外的参数来减小文件大小。比如:
ffmpeg -t 10 -ss 00:00:05 -i 1.mp4 -vf "fps=10,scale=320:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" -loop 0 10s.gif
此时转换出的文件大小就比较合理了。
其中fps代表每秒多少帧;scale代表缩减到宽度的像素,长度会根据宽度自动调整;loop为0代表会一直循环。
这个命令可以参考:https://superuser.com/questions/556029/how-do-i-convert-a-video-to-gif-using-ffmpeg-with-reasonable-quality/556031#556031
当然,也可以截取部分的视频,此时同时长的视频比动图文件小得多。
ffmpeg -t 10 -ss 8 -i 1.mp4 10s.mp4
如果想把两个视频合并为一个,且两个视频是左右同时播放的,可以用命令:
ffmpeg -i 11.mp4 -i 22.mp4 -filter_complex hstack output.mp4
如果想把两个视频合并为一个,且两个视频是串起来顺序播放,可以用如下两种命令:
一是:
ffmpeg -i 11.mp4 -i 22.mp4 -filter_complex "[0:v] [0:a] [1:v] [1:a]\
concat=n=2:v=1:a=1 [v] [a]" -map "[v]" -map "[a]" output.mp4
二是先创建文件记录需要转换的文件,然后运行:
ffmpeg -f concat -safe 0 -i filelist.txt -y output.mp4
# filelist.txt contains below content
# file '11.mp4'
# file '22.mp4'