前段时间写一篇贴子,当时需要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)
虽然adb操作很方便,但是也会有一系列的缺点,比如录制过程中,声音不会被录制下来,录制的仅仅是手机屏幕操作,再者就是不支持录制过程中屏幕旋转,如果录制过程中旋转,有可能画面被切断,如果不设置时间,录制的文件可能会比较大,在这之前录制了一个10s的视频,接近6M的样子,180s就大约100M左右,有点小夸张。
当然,在DDMS和Monitor中也可以录制,这些都不是重点,接下来,我们将MP4格式通过ffmpeg转换成gif格式,详情见下一篇。
微信扫我,_