Skip to main content

Developer's notes IV. Presets for screen recording in Android 4.4 KitKat

One of the most useful Android 4.4 features for me is screen recording. This allows us to record videos of live wallpapers and upload them to YouTube. Before this we had to record videos either with camcorder (looks quite blurry) or from emulator (low-res and a bit laggy). So right after updating my Nexus 7 (1st gen) and Nexus 10 to Android KitKat I've decided to try this feature out.

Basically, everybody making app reviews will find this feature extremely useful

To record videos in Android 4.4 you should use adb shell screenrecord command. You can read Android documentation on this here:  After reading docs, first thing you would like to do is to launch utility with --help option:
c:\Program Files (x86)\Android\android-sdk\platform-tools>adb shell screenrecord --help
Usage: screenrecord [options] <filename>

Records the device's display to a .mp4 file.

    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 the output 90 degrees.
    Display interesting information on stdout.
    Show this message.

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

Recording on default settings will result in skipped frames and quality will be worse than you'd expect. On N7 you will get laggy video and on N10 you will get ugly compression artifacts - default 4Mbps bit rate is simply not enough for its enormous 2560x1600 resolution. So I've picked presets which I believe are optimal for my needs and don't cause UI lag when recording. When playing around with options, please note that you need to specify bit rate in bps, not Mbps, but yes, it reads "in megabits per second" :)

Here are command line parameters for screen recording which I believe are the most optimal:

Nexus 4:
adb shell screenrecord /sdcard/video.mp4 --bit-rate 8000000 --size 1280x768
Nexus 10:
adb shell screenrecord /sdcard/video.mp4 --bit-rate 8000000 --size 1280x720
Nexus 7 1st gen:
adb shell screenrecord /sdcard/video.mp4 --size 960x540 --bit-rate 5000000
I don't use --time-limit option but just hit Ctrl+C after I finished recording.
Because adb shell command simply executes any shell commands on device you can call screenrecord command directly on your device in Android Terminal Emulator app. But you need to run it with root permissions to be able to actually record videos so if device is not rooted you have to use adb shell from your PC. Example:
screenrecord /sdcard/video.mp4 --bit-rate 8000000 --size 1280x720

Also note that if you rotate device when recording you will get cropped video - you will have to record landscape and portrait videos separately.

So Nexus 10 is capable of recording quite good 720p videos with little to no frameskip (it is barely noticeable when recording usual apps like browser or GMail but becomes a little bit laggy recording full-screen animations like app drawer transitions). To my liking, videos recorded from Nexus 7 have more even framerate but on Nexus10 you can achieve more sharp image because of higher resolution. Nexus4 with its powerful Snapdragon S4 is capable of capturing full-size 1280x720 frame, and I haven't noticed a single sign of lag during recording (however, there were a few negligible frame-skips in recorded video) - device operated as smooth as always.

Here is a sample video recorded from 1st-gen Nexus 7. Android doesn't record audio - I've added some free audio track in Youtube Video Manager.

Two more samples from Nexus 4: and for vertical videos fans :)

Feel free to post your presets for your devices in comments - may be you will achieve better quality than me :)


  1. Great advice for those of us who use the screen recording capabilities, I use it for playing and have done 1 video, thx for the tip on the N10

  2. What do you suppose the max bitrate would be for the Nexus 4? Not sure of the flash memory speed but the screen is 768x1280.

    1. Here you go - I've updated article with parameters for Nexus 4. So far it's the best device to record video - it captures full 1280x768 video with no lag. Incredibly powerful device :)
      And here is a sample video: You can see a cropped image in the last few seconds of video - as I mentioned, Android won't rotate screen automagically for you so you will need to record vertical and horizontal videos separately.


Post a Comment

Popular posts from this blog

WebGL 2 fur simulation

WebGL 2 recently became available in latest Firefox and Chrome so it was tempting to try out some of its new features. One of the most important WebGL 2 (and OpenGL ES 3.0, which it is based upon) features is instanced rendering. This feature reduces draw calls overhead by drawing the same geometry multiple times with altered transformations. It was supported in certain implementations of WebGL 1 too but required a certain extension. Most useful for foliage and particles, this technique is also quite often used to simulate fur.

Porting Android live wallpaper to WebGL

Now WebGL works in almost any browser, including mobile ones so it was tempting to try it out. We have experience in creating Android apps using OpenGL ES 2.0. We have released quite a lot of 3D live wallpapers with rich 3D graphics. They are implemented in Java + OpenGL ES 2.0 without using third-party game engines (such as Unity) or high-level frameworks (such as libGDX). This makes our apps lightweight and well-optimized. And since WebGL is based on OpenGL ES 2.0 process of porting live wallpaper to run in browser is quite straightforward.

Developer's notes V. Custom watch faces for Android Wear with OpenGL ES 2.0

As soon as Google announced possibility to create custom watch faces with new Android 5.0 for Android Wear, we’ve ordered brand new ASUS ZenWatch to develop watch face (I believe nothing can beat quality of this device for its price). We decided not to port any of existing live wallpapers to Android Wear but to create some completely new scene for it. This resulted in creating Axiom Watch Faces app which consists of 5 digital watch faces, implemented in 3D with OpenGL ES 2.0.