• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > 一键生成Android录屏gif的脚本

一键生成Android录屏gif的脚本

作者:What a Chance to Learn 字体:[增加 减小] 来源:互联网 时间:2017-07-23

What a Chance to Learn通过本文主要向大家介绍了ubuntu,android,bash等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

目的

编写 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 5 和 convert -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
}
trap CTRL_C SIGINT

有了这个方法获取录制结束事件, 再往下就简单了.
这里遇到一个坑, 就是如果捕获 ctrl-c 后直接开始转换 gif 的操作, 会失败. 试过几次后, 发现是 ctrl-c 后其实 Android 的 screenrecord 命令并没有处理完, 这时候的视频还不可用. 解决的办法简单粗暴, 让脚本原地 sleep 2秒, 再去操作所生成的 MP4 文件就可用了.

最终脚本

也不知道该写些啥了, 直接贴出完整脚本吧:

#!/bin/bash
# author : liuxu-0703@163.com

#========================================================
# define param group here

QUALITY_1=("360x640"  1000000  4  25)
QUALITY_2=("360x640"  1000000  5  20)
QUALITY_3=("360x640"  1000000  10  10)
QUALITY_4=("720x1280"  1000000  4  25)
QUALITY_5=("720x1280"  1000000  5  20)

#========================================================

QUALITY=(${QUALITY_2[@]})

RESOLUTION=${QUALITY[0]}
BIT_RATE=${QUALITY[1]}
GIF_FPS=${QUALITY[2]}
GIF_DELAY=${QUALITY[3]}

# GIF_FPS and GIF_DELAY must meet the following condition:
# GIF_FPS * GIF_DELAY = 100

OUTPUT_FILE_NAME=android_screen_record.$(date +%m%d%H%M%S).gif
OUTPUT_FILE_DIR=$(pwd)
OUTPUT_VIDEO_NAME=screenrecord_$(date +%m%d%H%M%S).mp4
OUTPUT_VIDEO_DEVICE_DIR=/sdcard
TMP_DIR=/tmp/android_screen_to_gif_$(date +%m%d%H%M%S)

RECORDING=true

# you may use adb by absolute file path. if so, specify it here
ADB="adb"

#========================================================

# catch ctrl-c signal
CTRL_C() {
    if $RECORDING; then
        echo "stop recording. start convert..."
        RECORDING=false
    else
        # ctrl-c hit but not for stop recording, just exit.
        exit $?
    fi

    # adb screenrecord may still deal with mp4 file creating,
    # just wait for it a little while.
    sleep 2s
    adb pull $OUTPUT_VIDEO_DEVICE_DIR/$OUTPUT_VIDEO_NAME $TMP_DIR
    if [ -f $TMP_DIR/$OUTPUT_VIDEO_NAME ]; then
        # remove video on phone
        adb shell rm $OUTPUT_VIDEO_DEVICE_DIR/$OUTPUT_VIDEO_NAME

        echo "converting fil
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 一键生成Android录屏gif的脚本
  • ubuntu vncserver搭建
  • 一个pycharm引起ubuntu桌面丢失的惨案
  • ubuntu下ssh的应用
  • VMware中ubuntu忘记密码的解决办法(转)
  • android 和Ubuntu 同步使用Xmind
  • ubuntu下安装AndroidStudio
  • Ubuntu Android Studio 无法通过起动器开启,android起动器

相关文章

  • 2017-05-26React Native控件之PullToRefreshViewAndroid下拉刷新组件讲解
  • 2017-05-26Android View体系(九)自定义View
  • 2017-05-26硅谷商城3--购物车数据存储器,3--购物车
  • 2017-05-26手机安全卫士——闪屏页相关处理,手机安全卫士
  • 2017-05-26Android开发技术周报 Issue#67
  • 2017-05-26Unity实现滑页嵌套(解决ScrollRect嵌套冲突问题)
  • 2017-05-26Android表单UI及相应控件的事件处理,android表单ui控件
  • 2017-05-26ActionBar设置自定义setCustomView()留有空白的问题,setcustomview空白
  • 2017-05-26android --多线程下载过程分析
  • 2017-05-26解决 file /isolinux/vmlinuz0 not found

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 8.3.10 Paint API之—— ColorFilter(颜色过滤器)(2-3)
    • Android阻止AlertDialog关闭,androidalertdialog
    • Android开发学习——画横线竖线,android横线
    • 我的Android进阶之旅之Android自定义View来实现解析lrc歌词同步滚动、上下拖动、缩放歌词等功能
    • Android的Dialog工具
    • Android MVP 设计模式,androidmvp
    • SDK manager.exe 运行时报错:系统找不到指定的文件 android.bat,sdkmanager.bat
    • RK3288开发过程中遇到的问题点和解决方法之Kernel,rk3288kernel
    • Android属性系统简介,android属性简介
    • android-webview的使用小结,android-webview

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有