การใช้ 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













Re: การใช้ ffmpeg ทำ screencast โดยการเข้ารหัสวิดีโอด้วย QTRLE c
ขอบคุณครับ คงจะได้เอาไปใช้
แต่ configure option ใน debian ไม่ --enable-x11grab ด้วยแฮะ T_T
file wishlist bug ดีมะ?
Re: การใช้ ffmpeg ทำ screencast โดยการเข้ารหัสวิดีโอด้วย QTRLE c
ผมก็แปลกใจนะครับ เพราะ --enable-x11grab ค่า default มันเป็น no อยู่ แต่ compile แล้วมันสนับสนุนเฉย แก้บทความกันความสับสนเลยก็ดีครับ
Re: การใช้ ffmpeg ทำ screencast โดยการเข้ารหัสวิดีโอด้วย QTRLE c
คือว่า แพกเกจของ debian เองไม่ได้ --enable-x11grab ไว้ และผมลองเรียกดู โดยลองกับ codec อื่นก่อน มันฟ้องว่า "Unknown input or output format: x11grab"
สรุปว่า ทั้งเรื่อง qtrle และ x11grab ถ้าจะลอง ต้องคอมไพล์เองอย่างเดียวตามบทความเลยครับ คิดว่าคงไม่ต้องแก้ แต่ที่ผมบ่นคือ ทำไม debian ไม่ enable มาให้เลย(ฟะ) :P
อยากจะ file wishlist bug ไว้ ขอให้เขาเปิดให้เหมือนกันครับ แต่ผมไม่แน่ใจว่าเข้าใจปัญหาดีพอ
Re: การใช้ ffmpeg ทำ screencast โดยการเข้ารหัสวิดีโอด้วย QTRLE c
อ้อ ครับผม สนับสนุน wishlist ด้วย 1 เสียงครับ
Re: การใช้ ffmpeg ทำ screencast โดยการเข้ารหัสวิดีโอด้วย QTRLE c
มีคน file wishlist สำหรับ --enable-x11grab ไว้แล้วแฮะ
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=441983
Post new comment