Android studio 录屏并制作gif

1.录屏

Android studio 3.0之后不再有Android monitor取而代之的是 Android profile 和logcat,所以录屏功能只能用adb工具实现。
这里写图片描述

  • adb 工具配置环境变量
    为了方便使用需要将adb工具添加到环境变量当中 : 此电脑—>高级系统设置—>环境变量 在系统变量中找到PATH变量名,点新建输入sdk路径 D:\AndroidSDK\platform-tools;D:\AndroidSDK\tools 注意路径中间用分好隔开。
  • adb 录屏
    对于Android4.4的上的手机,系统自带了一个命令screenrecord,我们可以很方便的使用。
    录制命令
    adb shell screenrecord /sdcard/test.mp4
    视频保存目录可以自己指定,如上面的/sdcard/test.mp4,命令执行后会一直录制180s,按下ctrl+c可以提前结束录制
    输入 –time-limit N,限制视频录制时间为N秒

  • 华为手机录屏异常
    查了一下荣耀系列、mate系列执行命令时候都会出现这个问题
    这里写图片描述

2.ffmpeg 工具 格式转化
  • ffmepeg安装
    下载地址 https://ffmpeg.zeranoe.com/builds/
    选择版本号4.0.1 、64位 最后一个选static就可以
    这里写图片描述
    下载解压后为了使用方便仍然加入环境变量 。

  • MP4转化为高质量gif
    这条命令意思是从0秒开始截取7秒的视频,转化为360x640 分辨率,率码率控制在2000k的gif图片
    其中360X640 和2000k 为原视频一半值。
    ffmpeg -ss 0 -t 7 -i D:\mp4togif\svid.mp4 -s 360x640 -b:v 2000k D:\mp4togif\tt.gif
    如果不控制分辨率和码率直像这样直接转化 ffmpeg -i D:\mp4togif\svid.mp4 D:\mp4togif\tt.gif 得到的gif 将大大超过原视频的大小。

  • ffmpeg命令
    ffmpeg -i input.mp4 -vf scale=960:540 output.mp4
    //ps: 如果540不写,写成-1,即scale=960:-1, 那也是可以的,ffmpeg会通知缩放滤镜在输出时保持原始的宽高比。

  • ffmpeg控制码率。
    ffmpg控制码率有3种选择,-minrate -b:v -maxrate
    -b:v主要是控制平均码率。
    比如一个视频源的码率太高了,有10Mbps,文件太大,想把文件弄小一点,但是又不破坏分辨率。
    ffmpeg -i input.mp4 -b:v 2000k output.mp4
    上面把码率从原码率转成2Mbps码率,这样其实也间接让文件变小了。目测接近一半。
    不过,ffmpeg官方wiki比较建议,设置b:v时,同时加上 -bufsize
    -bufsize 用于设置码率控制缓冲器的大小,设置的好处是,让整体的码率更趋近于希望的值,减少波动。(简单来说,比如1 2的平均值是1.5, 1.49 1.51 也是1.5, 当然是第二种比较好)
    ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k output.mp4

ffmpeg -ss 0 -t 7 -i D:\mp4togif\svid.mp4 -i D:\mp4togif\201807201720.png -b:v 2000k -r 20 -lavfi fps=20,scale=360:-1:flags=lanczos[x];[x][1:v]paletteuse -y D:\mp4togif\201807201726.gif
更多ffmpeg命令参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Android Studio中实现录屏功能,你可以使用MediaProjection API。下面是一些基本步骤来实现它: 1. 在AndroidManifest.xml文件中添加以下权限: ``` <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> ``` 2. 创建一个Service类来处理录屏逻辑。在这个Service中,你需要初始化MediaProjectionManager和MediaRecorder,并获取用户的屏幕和音频权限。下面是一个简单的实现示例: ```java public class ScreenRecordService extends Service { private MediaProjectionManager mediaProjectionManager; private MediaProjection mediaProjection; private VirtualDisplay virtualDisplay; private MediaRecorder mediaRecorder; @Override public IBinder onBind(Intent intent) { return null; } @Override public int onStartCommand(Intent intent, int flags, int startId) { mediaProjectionManager = (MediaProjectionManager) getSystemService(Context.MEDIA_PROJECTION_SERVICE); mediaRecorder = new MediaRecorder(); initRecorder(); startActivityForResult(mediaProjectionManager.createScreenCaptureIntent(), REQUEST_CODE_CAPTURE); return START_NOT_STICKY; } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_CODE_CAPTURE) { mediaProjection = mediaProjectionManager.getMediaProjection(resultCode, data); virtualDisplay = createVirtualDisplay(); mediaRecorder.start(); } } private void initRecorder() { mediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE); mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); mediaRecorder.setVideoEncodingBitRate(512 * 1000); mediaRecorder.setVideoFrameRate(30); mediaRecorder.setVideoSize(DISPLAY_WIDTH, DISPLAY_HEIGHT); mediaRecorder.setOutputFile(getFilePath()); } private VirtualDisplay createVirtualDisplay() { return mediaProjection.createVirtualDisplay("MainActivity", DISPLAY_WIDTH, DISPLAY_HEIGHT, screenDensity, DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR, mediaRecorder.getSurface(), null /*Callbacks*/, null /*Handler*/); } private String getFilePath() { // 返回你想要保存录屏视频的文件路径 } } ``` 3. 在你的MainActivity(或其他需要录屏的Activity)中,启动该Service: ```java Intent intent = new Intent(this, ScreenRecordService.class); startService(intent); ``` 这只是一个基本的示例,你可能还需要处理一些其他的逻辑,如停止录屏、处理权限请求和错误处理等。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值