24 มีนาคม 2557

[Android Dev Tips] การบันทึกวีดีโอบนหน้าจอด้วย Screen Record สำหรับ Android 4.4


        ผู้ที่หลงเข้ามาอ่านไม่น้อยที่อยากจะอัดวีดีโอหน้าจออุปกรณ์แอนดรอยด์ตอนใช้งาน แต่ทว่าไม่รู้จะทำยังไง จะใช้แอปพลิเคชันที่มีอยู่ใน Google Play ก็ต้องรูทเครื่องอีก แถมไม่แน่ใจว่าจะรองรับกับเครื่องที่ใช้อยู่ได้ดีแค่ไหน

        หลังจากที่ Android 4.4 หรือในชื่อ KitKat ถูกปล่อยออกมา ผู้พัฒนาได้ใส่ฟีเจอร์ที่เรียกว่า Screen Record ไว้ด้วย เพื่อให้นักพัฒนาสามารถอัดวีดีโอบนหน้าจอได้สะดวกขึ้น โดยไม่จำเป็นต้องรูทเครื่องเลย ซึ่งในตอนนี้ก็มีหลายๆเครื่องที่ได้รับการอัปเดทเป็น Android 4.4 กันแล้ว

        แต่ก็มีหลายๆคนที่ไม่รู้ว่ามันมีฟีเจอร์นี้เข้ามาด้วย และใช้ยังไง ดังนั้นบทความนี้เจ้าของบล็อกจะมาสอนวิธีการบันทึกวีดีโอบนหน้าจอโดยใช้ฟีเจอร์ Screen Record ที่มากับ Android 4.4 กัน

        สำหรับ Screen Recorder จะมีทั้งหมด 3 วิธีด้วยกันที่เจ้าของบล็อกจะพูดถึง แบบแรกคือวิธีพื้นฐานที่เป็นพื้นฐานหลักในการเรียกใช้งาน Screen Recorder เลย เพราะอีกสองวิธีหลังจะทำแบบวิธีที่หนึ่งนั่นแหละ สำหรับวิธีที่สองจะเป็นวิธีแบบง่าย เพราะว่าใน Android SDK มีตัวช่วยบันทึกหน้าจอไว้ให้แล้ว และวิธีสุดท้ายคือใช้แอปพลิเคชันช่วย ซึ่งอุปกรณ์แอนดรอยด์นั้นๆจะต้องรูทด้วย ซึ่งมีข้อดีกว่าแอปพลิเคชันที่บันทึกหน้าจอแบบไม่ได้ใช้ Screen Recorder ของ 4.4 เพราะว่าจะลื่นกว่า


วิธีพื้นฐาน

        การเรียกใช้งาน Screen Record นั้นทำผ่าน ADB Shell Command ดังนั้นจึงต้องต่อกับคอมแล้วเปิด USB Debugging ด้วย ซึ่งไม่น่าจะมีปัญหา เพราะปกติเวลาเขียนแอปพลิเคชันแอนดรอยด์ก็ต้องเปิด USB Debugging เพื่อให้เห็น LogCat อยู่แล้ว

        อย่างแรกสุดเปิด USB Debugging ก่อนนะ แล้วลง ADB Driver ให้เรียบร้อยซะล่ะ [Android Dev Tips] รวม ADB Driver สำหรับอุปกรณ์แอนดรอยด์

        ก่อนอื่นเปิด Command Prompt โดย Path ไปที่โฟลเดอร์ sdk เสียก่อน



       สำหรับ Windows Vista ขึ้นไปให้กด Shift ค้างไว้แล้วคลิกขวาที่โฟลเดอร์ platform-tools แล้วเลือก Open command windows here เพื่อเปิด Command Prompt ที่นี่ได้เลย (สำหรับ Windows XP จะทำไม่ได้นะ แต่ถึงกระนั้น ยังใช้ Windows XP อยู่อีกหรือ?)



        จากนั้นจะสามารถเริ่มคำสั่งเพื่อเรียกใช้ Screen Record ได้ทันทีเลย โดยคำสั่ง Screen Record มีรูปแบบดังนี้

adb shell [option] [filename]
        - options คือกำหนดค่าเพิ่มเติมสำหรับบันทึกวีดีโอ

        - filename คือที่อยู่ของไฟล์ที่จะทำการบันทึก


        ให้ลองพิมพ์คำสั่งแบบนี้ดูก่อน
adb shell screenrecord /sdcard/vid.mp4

        คำสั่งดังกล่าวคือทำการบันทึกหน้าจอโดยเก็บไฟล์ไว้ที่ /sdcard/ โดยกำหนดชื่อไฟล์ว่า vid.mp4 หรือก็คือ filename เป็น /sdcard/vid.mp4

        พอพิมพ์คำสั่งแล้วกด Enter ปุ๊ป ก็จะเห็นว่า Command Prompt หยุดอยู่ที่ตรงนั้นแล้ว ซึ่งหมายความว่าเริมทำการบันทึกหน้าจอแล้ว



        โดยปกติแล้วจะสามารถบันทึกหน้าจอได้สูงสุด 3 นาที แต่ถ้าต้องการหยุดก่อนเวลาก็เพียงแค่กด Ctrl + C ได้เลย



        เมื่อบันทึกเสร็จเรียบร้อยแล้ว ให้ลองเข้าไปเปิดไฟล์ในอุปกรณ์แอนดรอยด์ดูตามที่อยู่ที่ได้กำหนดไว้ ก็จะพบกับไฟล์ที่บันทึกไว้ สามารถดึงลงคอมเพื่อใช้งานได้เลย (การเชื่อมต่อแบบ MTP บางทีเปิดในคอมจะยังไม่เห็นในทันที ต้องถอดสาย USB แล้วเสียบใหม่ถึงจะขึ้นให้เห็น)



        Screen Record ดีแค่ไหน?

        ถ้าบันทึกการใช้งานแอปพลิเคชันธรรมดาๆทั่วไปรับรองได้ว่าลื่น (ถ้าเครื่องไม่ห่วยจนเกินไป) แต่ถึงกระนั้นเพื่อการยืนยันเจ้าของบล็อกจึงทดสอบด้วยการเล่นเกม Asphalt 8 ให้ดู โดยใช้ Moto X ปรับกราฟฟิคในเกมไว้ที่ Very High ได้ผลออกมาดังนี้


        อันนี้เป็นการตั้งค่า Default (เพราะในคำสั่งไม่ได้กำหนดอะไรเพิ่มเติม) Bitrate จะอยู่ที่ราวๆ 4 Mbps จะเห็นได้ว่าภาพแตกเป็นบางช่วง แต่ในการบันทึกแค่แอปพลิเคชันเล็กๆน้อยๆ ภาพก็จะไม่ค่อยแตกซักเท่าไรนัก


        ทีนี้มาดูกันต่อว่าสามารถกำหนดอะไรเพิ่มเติมได้บ้าง

        --size
                กำหนดขนาดของวีดีโอ ถ้าไม่กำหนดจะอิงขนาดหน้าจอเป็นหลัก

                ตัวอย่าง
                        กำหนดให้บันทึกหน้าจอที่ขนาด 800x480 พิกเซล
adb shell screenrecord --size 800x480 /sdcard/video.mp4


        --bit-rate
                กำหนด Bitrate ของวีดีโอ ถ้าไม่กำหนดจะอิงที่ 4 Mbps

                ตัวอย่าง
                        กำหนดให้บันทึกหน้าจอด้วย Bitrate ที่ 10 Mbps
adb shell screenrecord --bit-rate 10000000 /sdcard/video.mp4


        --time-limit
                กำหนดระยะเวลาของวีดีโอที่จะบันทึก กำหนดได้สูงสุด 180 วินาที

                ตัวอย่าง
                        กำหนดให้บันทึกหน้าจอเป็นเวลานาน 120 วินาทีหรือ 2 นาที
adb shell screenrecord --time-limit 120 /sdcard/video.mp4


        --rotate
                 กำหนดให้วีดีโอที่บันทึกหมุนไป 90 องศา

                 ตัวอย่าง
                          กำหนดให้ไฟล์วีดีโอหลังจากบันทึกถูกหมุนไป 90 องศา
adb shell screenrecord --rotate /sdcard/video.mp4


        --verbose
                แสดงข้อมูลที่จำเป็นออกมาทาง Command Prompt

                ตัวอย่าง
                        กำหนดให้แสดงข้อมูลออกมาทาง Command Prompt
adb shell screenrecord --verbose /sdcard/video.mp4


        สามารถกำหนดค่าพร้อมๆกันทั้งหมดก็ได้ ไม่จำเป็นต้องกำหนดแค่เพียงอย่างเดียวเท่านั้น อย่างเช่น เจ้าของบล็อกอยากจะบันทึกหน้าจอโดยให้ Bitrate เป็น 15 Mbps และบันทึกที่ขนาดหน้าจอ 1280x720 พิกเซล ก็จะพิมคำสั่งดังนี้
adb shell screenrecord --size 1280x720 --bit-rate 15000000 /sdcard/video.mp4

        จากการทดสอบก็จะเห็นว่าที่ 15 Mbps จะมีความละเอียดภาพที่คมชัดกว่าแบบไม่ได้กำหนดค่าอะไร




วิธีที่ง่ายกว่า

        นอกจากการใช้ ADB Shell Command แล้วยังสามารถใช้งานผ่าน DDMS ได้อีกด้วย โดยจะต้องเป็น Android SDK เวอร์ชันล่าสุดนะ ข้อดีคือใช้ง่าย ไม่ต้องพิมพ์คำสั่งและสามารถบันทึกลงคอมพิวเตอร์ได้โดยทันที

        เปิด DDMS ขึ้นมาซะ โดยจะอยู่ใน ../sdk/tools/ddms.bat




        ให้เลือกที่อุปกรณ์แอนดรอยด์ที่ต้องการบันทึกหน้าจอซะ แล้วเลือกที่ Device Screenrecord



     จะมีหน้าจอให้กำหนด Bitrate กับ Size ของวีดีโอ และที่อยู่ของไฟล์ที่จะเซฟบนคอมพิวเตอร์ เมื่อกำหนดเสร็จแล้วกดปุ่ม OK



        จากนั้นก็จะเริ่มทำการบันทึกหน้าจอทันที เมื่อบันทึกจนเสร็จก็จะมีข้อความแจ้งขึ้นมา




        ไฟล์ที่บันทึกไว้ก็จะอยู่บนคอมทันที




แอปพลิเคชันสำหรับเครื่องที่รูทแล้ว

        สำหรับเครื่องที่รูทแล้วก็ไม่จำเป็นต้องต่อกับคอมแต่อย่างใด เพราะสามารถ Execute Command บนเครื่องโดยใช้แอปพลิเคชันได้เลย

        เจ้าของบล็อกได้เขียนเล่นๆไว้เป็นแอปพลิเคชันที่ชื่อว่า Screen Recorder for KitKat


        สามารถดาวน์โหลดได้ที่ Screen Recorder for KitKat [Google Play]

        นอกจากแอปพลิเคชันตัวนี้ก็มีของนักพัฒนาคนอื่นๆเขียนไว้แทนก็ได้นะ




เหล่าพันธมิตรแอนดรอยด์

Devahoy Layer Net NuuNeoI The Cheese Factory Somkiat CC Mart Routine Artit-K Arnondora Kamonway Try to be android developer Oatrice Benz Nest Studios Kotchaphan@Medium Jirawatee@Medium Travispea@Medium