การใช้ ffmpeg ทำ screencast โดยการเข้ารหัสวิดีโอด้วย QTRLE codec

การทำ screencast ใน linux โดยทั่วไปนั้นจะใช้การเข้ารหัสวิดีโอโดยใช้ codec จำพวก mpeg, ogg หรือ flv ซึ่งเป็น codec ที่เป็นชนิดที่มีการสูญเสีย (lossy compression) ที่มีข้อดีคือขนาดวิดีโอที่ได้นั้นเล็ก แต่ภาพที่ได้ไม่คมชัดนัก ซึ่งน่าจะเหมาะกับการโชว์พวก Desktop effect เช่น beryl/compiz เป็นต้น แต่กับงานพวกสื่อการสอนนั้น ต้องการความชัดเจนของวิดีโอมาก ทำให้ codec แบบ mpeg, ogg หรือ flv ไม่น่าจะเหมาะนัก สำหรับท่านที่เคยใช้โปรแกรม sceencast บน windows ชื่อ Techsmith Camtasia studio นั้น อาจต้องทึ่ง ในความชัดของวิดีโอที่ได้ อันเป็นผลมาจาก codec ที่ยอดเยี่ยมของ Techsmith เอง สำหรับใน linux นั้นมีทางเลือกในการทำ screencast หลายโปรแกรมได้แก่ Istanbul, xvidcap, yukon หรือ ffmpeg เป็นต้น

โดยตัว ffmpeg นั้นถือว่าสนับสนุน codec หลากหลายมาก และเมื่อเร็วๆ นี้ ได้ เพิ่มการสนับสนุน QTRLE codec เข้าไปด้วย ทำให้ ffmpeg นั้นเหมาะมากทีเดียว สำหรับการทำ screencast ในงานพวกสื่อการสอน

QTRLE คืออะไร

QTRLE นั้นคือ Apple Quicktime Animation Run Length Encoding เป็น codec ที่ไม่มีการสูญเสีย (lossless codec) เหมาะกับข้อมูลที่ซ้ำกันมาก ๆ ซึ่งในการทำ screencast พวกสื่อการสอนนั้น การเปลี่ยนแปลงของ pixel ในแต่ละ frame ที่ต่อเนื่องกันมีน้อย (หรือการซ้ำกันของ pixel มีมากนั่นเอง) ดังนั้น QTRLE จึงเป็นทางเลือกที่ดีเยี่ยม (ศึกษาการทำงานของ RLE)

ทำไม ffmpeg ใน debian ไม่สนับสนุน QTRLE?

การตรวจสอบการสนับสนุน qtrle ของ ffmpeg จากคำสั่ง

$ ffmpeg -formats

ในส่วนของ section Codecs: ควรจะมีข้อความนี้

DEV D qtrle

ตัว ' E ' หมายถึง ffmpeg สามารถเข้ารหัส qtrle ได้

แต่ใน debian (ผมใช้ sid) นั้นไม่สนับสนุน และจากการตรวจสอบ debian source ก็ยังไม่มีการสนับสนุน ดังนั้นเราต้อง compile เอาจาก svn ของ ffmpeg เอง โดย

$ svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg
$ cd ffmpeg
$ ./configure --enable-gpl --enable-x11grab --enable-faad
$ make

จะได้ binary ของ ffmpeg ออกมาครับ ไม่ต้อง make install นะครับ เดี๋ยวจะไปทับของเดิมซะ เราจะรันมันใน directory นี้เลย

$ ./ffmpeg -vcodec qtrle -r 10 -g 300 -s 1024x768 \
-f x11grab -i :0.0 ~/Desktop/test1.mov

จากตัวอย่างเป็นการ เข้ารหัสจาก X11 (-f x11grab -i :0.0) ที่ความละเอียด 1024x768 (-s 1024x768) อัตราเฟรม 10 fps (-r 10), ใส่ key frame ทุกๆ 300 frame (-g 300) เก็บไฟล์ที่ ~/Desktop/test1.mov

ถ้าขนาดไฟล์ใหญ่เกินให้ลอง ลด frame rate (-r) กับเพิ่ม group size ดูครับ ที่เหลืออ่านได้จาก man page ครับ :{i

Comments

ขอบคุณครับ คงจะได้เอาไปใช้

แต่ configure option ใน debian ไม่ --enable-x11grab ด้วยแฮะ T_T

file wishlist bug ดีมะ?

ผมก็แปลกใจนะครับ เพราะ --enable-x11grab ค่า default มันเป็น no อยู่ แต่ compile แล้วมันสนับสนุนเฉย แก้บทความกันความสับสนเลยก็ดีครับ

คือว่า แพกเกจของ debian เองไม่ได้ --enable-x11grab ไว้ และผมลองเรียกดู โดยลองกับ codec อื่นก่อน มันฟ้องว่า "Unknown input or output format: x11grab"

สรุปว่า ทั้งเรื่อง qtrle และ x11grab ถ้าจะลอง ต้องคอมไพล์เองอย่างเดียวตามบทความเลยครับ คิดว่าคงไม่ต้องแก้ แต่ที่ผมบ่นคือ ทำไม debian ไม่ enable มาให้เลย(ฟะ) :P

อยากจะ file wishlist bug ไว้ ขอให้เขาเปิดให้เหมือนกันครับ แต่ผมไม่แน่ใจว่าเข้าใจปัญหาดีพอ

อ้อ ครับผม สนับสนุน wishlist ด้วย 1 เสียงครับ

มีคน file wishlist สำหรับ --enable-x11grab ไว้แล้วแฮะ

http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=441983

Creative Commons License ลิขสิทธิ์ของบทความเป็นของเจ้าของบทความแต่ละชิ้น
ผลงานนี้ ใช้สัญญาอนุญาตของครีเอทีฟคอมมอนส์แบบ แสดงที่มา-อนุญาตแบบเดียวกัน 3.0 ที่ยังไม่ได้ปรับแก้