一键生成 Android 录屏 gif 的脚本

本文介绍了一个bash脚本,用于将Android设备的屏幕录制转化为GIF动图。通过adb shell screenrecord命令录制MP4,再用ffmpeg和convert组合处理为GIF。脚本适用于Ubuntu和Mac系统,涉及关键参数如视频帧率、GIF延迟等,并提供了解决录制结束事件的方法。
摘要由CSDN通过智能技术生成

目的

编写 bash 脚本, 实现一行命令得到 Android 手机录制屏幕 gif 动图文件.

博主使用 ubuntu 系统, shell 为 bash. 这个脚本也可以用在 mac 系统上.
听说 windows 系统出了 ubuntu on windows, 不知道能不能使用这个脚本.

原理

adb shell screenrecord

Android 4.4 版本后系统内预置了一个 screenrecord 命令, 可以用来将屏幕录制为 MP4 格式. 具体命令格式可以通过 –help 参数查看:

$ adb shell screenrecord --help
Usage: screenrecord [options] <filename>

Android screenrecord v1.2.  Records the device's display to a .mp4 file.

Options:
--size WIDTHxHEIGHT
    Set the video size, e.g. "1280x720".  Default is the device's main
    display resolution (if supported), 1280x720 if not.  For best results,
    use a size supported by the AVC encoder.
--bit-rate RATE
    Set the video bit rate, in bits per second.  Value may be specified as
    bits or megabits, e.g. '4000000' is equivalent to '4M'.  Default 4Mbps.
--bugreport
    Add additional information, such as a timestamp overlay, that is helpful
    in videos captured to illustrate bugs.
--time-limit TIME
    Set the maximum recording time, in seconds.  Default / maximum is 180.
--verbose
    Display interesting information on stdout.
--help
    Show this message.

Recording continues until Ctrl-C is hit or the time limit is reached.

举例:

adb shell screenrecord --size "360x640" --bit-rate 2000000 /sdcard/android_screenrecord_test.mp4

上面的命令将把所连接的手机屏幕录制为 宽高 360x640, 比特率 2M 的视频, 保存为手机 sd 卡根目录下的 android_screenrecord_test.mp4 文件.
该命令会持续录制, 直到用 ctrl-c 终止命令, 那么录制也就结束了.
也可以用 –time-limit TIME 参数来预先指定录制时长, 到时间会自动结束. 默认的最大时长为 3 分钟.

ffmpeg

使用 ffmpeg 抽帧的命令将视频提取为一系列图片:

ffmpeg -i video.mp4 -r 5 'frames/frame-%03d.jpg'

其中: -r 5 代表抽取的帧率, 即每秒视频抽取 5 帧出来.

convert

使用 imagemagick 包中的 convert 命令将一系列图片组合为 gif 动图格式:

convert -delay 20 -loop 0 *.jpg myimage.gif

其中: -delay 20 代表所生成的 gif 动图每帧之间的时间间隔, 即每 0.2 秒显示下一帧.

如果系统内还没有 convert 命令, 可以用如下命令安装:
sudo apt-get install imagemagick
博主使用 ubuntu 16.10, 这个命令是预置在系统里的, 不需要安装.

ffmpeg 及 convert 参数设置

上面两个命令中, ffmpeg -r 5convert -delay 20 这两个参数值, 分别是 视频抽帧间隔 和 gif每帧间隔, 假设其分别为 video_fps 和 gif_delay, 那么这两个参数在设置时必须满足如下条件:
video_fps * gif_delay = 100

如果乘积小于 100, 则生成的 gif 会比原本的播放速度快;
如果乘积大于 100, 则生成的 gif 会比原本的播放速度慢.

至于原因, 结合上面对这两个参数的介绍, 思考一下就明白了.

捕获录制结束事件

上面三个命令分开调用, 实现录屏为 gif 已经相当简单了.
如果要将三条命令写在一个脚本里, 在一个过程中完成功能, 第一个要解决的是如何捕获录制结束事件, 即 ctrl-c 命令.
在 bash 中可以通过下面脚本实现:

# catch ctrl-c signal
CTRL_C() {
    # ctrl-c hit, do something
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值