Friday, December 03, 2004

ใช้ transcode แปลงวิดีโอ

วันก่อนถามโต้งว่าใช้โปรแกรมอะไรแปลง MPEG2 เป็น DIVX แกแนะนำให้ใช้ ffmpeg แต่แนะนำเพิ่มว่า ได้ยินมาว่า transcode ดีกว่า

สรุปว่าลอง transcode ก็แล้วกัน

apt-get transcode ไม่ได้ ไม่เจอ transcode อะไรเลย เริ่มจะรู้สึกว่า Debian ไม่สะดวกอย่างที่คิด โต้งบอกว่า Debian มันเอาแพคเกจที่ติดปัญหา License ฯลฯ ทั้งหลายออกไป ทำให้ตอนนี้แกเองเปลี่ยนมาใช้ Gentoo แทนแล้ว

สรุปว่าต้องไปเอา Source มาคอมไพล์เอง ซึ่งก็ไม่ยากอะไร แต่สุดท้ายทำไปสองรอบ รอบแรกคอมไพล์แล้วยังเปิดไฟล์ MPEG2 ไม่ได้ มันบอกว่าต้องการ libLAME-dev ซึ่ง apt-get ไม่ได้เหมือนกัน ต้องเอา Source มาคอมไพล์เอง

** อุตส่าห์ใช้ Debian แล้วยังต้องเอา Source มาคอมไพล์เอง **

transcode มีตัวเลือกมากไปหน่อย กว่าจะเข้าที่เข้าทางต้องลองหลายรอบ สรุปว่าสำหรับรายการวิดีโอ (720x480 MPEG2) ที่อัดไว้ที่บ้านมากมายนั้น สามารถแปลงเป็น DIVX แล้วยังได้คุณภาพที่พอดูได้ด้วยคำสั่ง

transcode -b 96 -w 900 -Z 640x480,fast -V -i 'file.mpg' -o 'file.avi' 
    -x mpeg2 -y ffmpeg -F mpeg4
โดยที่ -b 96 คือ bandwidth ของเสียง, -w 900 คือ bandwidth ของภาพ, -Z 640x480,fast คือสัดส่วนภาพที่ต้องการ ใช้วิธีการย่อภาพแบบรวดเร็ว (fast), -V ทำงานใน YUV Domain ไม่งั้นจะแปลงเป็น RGB ก่อนแล้วแปลงกลับ เท่าที่ทดลองถ้าไม่มี -V มันไม่ใช่ช้าลงอย่างเดียว แต่สีจะเพี้ยนและภาพตีลังกาอีกด้วย, -i 'file.mpg' -o 'file.avi' คือ ชื่อไฟล์เข้าออก, -x mpeg2 คือ ฟอร์แมตไฟล์ต้นทาง, -y ffmpeg คือ ฟอร์แมตไฟล์ปลายทาง ในที่นี้ระบุให้ใช้โมดูล ffmpeg ทำให้ต้องกำหนดฟอร์แมตจริงๆเป็นตัวเลือกไปให้ ffmpeg อีกทีด้วย -F mpeg4

ความจริง -y ffmpeg กับ -F mpeg4 สามารถแทนได้ด้วย -y divx5 อันเดียว แต่ลองดูแล้วมันต้องการ .so ของ DIVX5 ไปดาวน์โหลดมาจาก divx.com แล้วเจอบ่นว่าคนละเวอร์ชั่น เรื่องมากก็เลยใช้ของ ffmpeg แทน

ถ้าอยากทำ Two-Pass Encoding ก็ใช้คำสั่ง

transcode -b 96 -w 900 -Z 640x480,fast -V -i file.mpg -o /dev/null 
    -x mpeg2,null -y ffmpeg,null -F mpeg4 -R 1

transcode -b 96 -w 900 -Z 640x480,fast -V -i file.mpg -o file.avi 
    -x mpeg2 -y ffmpeg -F mpeg4 -R 2
รอบแรกทำเพื่อเก็บข้อมูล เลยไม่ต้องกำหนดไฟล์ขาออก (/dev/null ไปเลย) และไม่ต้องทำการแปลงเสียง (,null ในส่วนของ -x, -y) ในรอบแรก(-R 1)จะได้ไฟล์ divx4.log ออกมา ซึ่งจะถูกใช้ในรอบสอง(-R 2)

4 comments:

ziddik::zdk said...

แล้วถ้าใช้ Gentoo emerge package พวกนั้นได้ทันทีเลยเหรอครับ?
อย่าง package expocity เนี่ยมีให้ emerge ป่ะ ถ้ามีเด๋วได้ลอง Gentoo บ้าง

ถ้าเทียบกับการต้องใช้ rpm กับ compile เองผมว่ามันต่างกันเลย...ลำบากทั้งสองอย่าง..
ดังนั้นใช้ Debian เพราะ package ที่ดังๆหลายตัว apt-get มาได้ทันที (เร็วด้วย)
ถึงแม้บางครั้งต้อง compile เองบ้าง...มีทั้ง work (มักจะ apt-get พวก library มาได้) และไม่ work (หา library ไม่เจอ)
ส่วน rpm พูดง่ายๆว่าห่วย ใช้แล้วไม่ประทับใจ จะใช้ yum ก็ทนรอไม่ไหว..

ถ้า Gentoo มี package เยอะๆก็น่าใช้มากๆ...^^

poonlap said...

ดูจาก emerge -s transcode ffmpeg expocity มีเป็นแพกเกจไว้ให้หมดครับ.

Hui/ฮุ้ย said...

Otto บอกให้เพิ่มนี่เข้าไปใน /etc/apt/sources.list

deb ftp://ftp.nerim.net/debian-marillat/ unstable main

ได้ผล หา transcode/liblame-dev เจอแล้ว

ziddik::zdk said...

source นี้ไม่มี expocity อ่ะครับ - -'

อยากได้ source ที่มี expocity บ้างครับ พยายาม compile มันแล้วแต่ติดหลาย library จัง ไม่รู้วันไหนจะสำเร็จ