通过adb录制视频并通过FFMPEG将MP4转换成GIF格式(一)

前段时间写一篇贴子,当时需要gif去演示一个效果,看了好多解决方案,有的是用QQ影音转换的,便下载了一个QQ影音,发现QQ影音只能通过截图方式去操作,无法直接将MP4格式的直接转换成gif,后来想起了一款神器--快播,我记得快播有转码的功能,但是快播也是通过播放时候截取一段来转码,也没法直接转成gif,得到的gif不清晰,非常小,在这不禁要来一声叹息,用一行代码表达自己的不满,

        if(Qvod.exists()){
            return "It's none of your business";
        }else{
            return "Le shit and Spheniscidae go out";
        }

在此没有针对任何公司的意思_,好了,言归正传,后来我用了格式工厂,虽然解决了我的问题,但是太被动了,没法做到自己想要的效果,我原先录制的视频是三秒,转换成gif后,一秒左右就给我跑完了,好失望,对于那次转换用一句话总结,什么不快就射得快。。。

那天问了我一个小伙伴,他发了一篇贴子给我, linux下使用 ffmpeg 实现MP4转gif ,我擦,之前和我一起共事的时候,他一直是Ubuntu,今天查了下资料,发现Windows下也可以搭建,但是网上资料好少,所以自己就整理了一篇出来。

说了那么多废话,现在才进入正题部分,首先,我们需要一部Android4.4以上系统的手机还一台windows电脑,打开cmd窗口,键入adb shell screenrecord --help,会得到如下信息:

C:\Users\zero>adb shell screenrecord --help
Usage: screenrecord [options] 

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 megabits per second.  Default 4Mbps.
--time-limit TIME
    Set the maximum recording time, in seconds.  Default / maximum is 180.
--rotate
    Rotate the output 90 degrees.
--verbose
    Display interesting information on stdout.
--help
    Show this message.

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

通过以上信息,我们一步步介绍。

1.开始录制命令

adb shell screenrecord /sdcard/zero.mp4

PS:录制手机屏幕,视频格式为mp4,存放到手机sd卡里,默认录制时间为180s。刚刚测试的时候用了10s的时常,1280*720屏幕,用了5M左右,默认的180s貌似不太合理~~~(>_<)~~~

2.指定视频分辨率大小,--size WIDTHxHEIGHT

adb shell screenrecord --size 1920x1280 /sdcard/zero.mp4

PS:录制视频,分辨率为1280720,如果不指定默认使用手机的分辨率,为获得最佳效果,请使用设备上的高级视频编码(AVC)支持的大小,这里有个很神奇的地方,如果手动键入乘号(*),那你就错了,会报Invalid size '1280720', must be width x height,必须是"x"才可以,呵呵,坑了我十分钟。。。

3.指定视频的比特率,--bit-rate RATE

adb shell screenrecord --bit-rate 3000000 /sdcard/zero.mp4

PS:指定视频的比特率为3Mbps,如果不指定,默认为4Mbps. 你可以增加比特率以提高视频质量或为了让文件更小而降低比特率。

4.旋转90度,--rotate

adb shell screenrecord --rotate /sdcard/zero.mp4

PS:旋转90度

5.在命令行显示log,--verbose

C:\Users\zero>adb shell screenrecord  --verbose  /sdcard/zero.mp4
Main display is 720x1280 @60.00fps (orientation=0)
Configuring recorder for 720x1280 video at 4.00Mbps
Content area is 720x1280 at offset x=0 y=0
Time limit reached
Encoder stopping; recorded 1 frames in 180 seconds
Stopping encoder and muxer
Executing: /system/bin/am broadcast -a android.intent.action.MEDIA_SCANNER_SCAN_
FILE -d file:///sdcard/zero.mp4
Broadcasting: Intent { act=android.intent.action.MEDIA_SCANNER_SCAN_FILE dat=fil
e:///sdcard/zero.mp4 }
Broadcast completed: result=0

6.旋转90度,--rotate

adb shell screenrecord --time-limit 10  --rotate /sdcard/zero.mp4

PS:在中兴的手机上测试,确实可以,90度旋转。

7.导出视频

adb pull /sdcard/zero.mp4

PS:这个命令在未写在帮助命令里面

8.集合上方部分命令录制一个完整的视频并导出

C:\Users\zero>adb shell screenrecord  --time-limit 10 --size 480x320 --bit-rate 3000000 /sdcard/zero.mp4

C:\Users\zero>adb pull /sdcard/zero.mp4
5448 KB/s (1115903 bytes in 0.200s)
zero

虽然adb操作很方便,但是也会有一系列的缺点,比如录制过程中,声音不会被录制下来,录制的仅仅是手机屏幕操作,再者就是不支持录制过程中屏幕旋转,如果录制过程中旋转,有可能画面被切断,如果不设置时间,录制的文件可能会比较大,在这之前录制了一个10s的视频,接近6M的样子,180s就大约100M左右,有点小夸张。

当然,在DDMS和Monitor中也可以录制,这些都不是重点,接下来,我们将MP4格式通过ffmpeg转换成gif格式,详情见下一篇。

微信扫我,_

通过adb录制视频并通过FFMPEG将MP4转换成GIF格式(一)_第1张图片

你可能感兴趣的:(通过adb录制视频并通过FFMPEG将MP4转换成GIF格式(一))