การแปลงไฟล์เป็น H.264/MPEG-4 AVC
posted on 20 Aug 2007 21:24 by advance in AudioVideo-Editing
Encoding to H.264/MPEG-4 AVC codec

โปรดทราบ : บทความนี้เก่าและล้าสมัยมากแล้ว อีกทั้งตัวโปรแกรมเองได้หยุดการพัฒนาไปแล้วตั้งแต่เวอร์ชั่น
[2009-04-16] ดังนั้นผมแนะนำให้ทุกคนใช้โปรแกรมอื่น เช่น MeGUI แทนจะดีกว่า เนื้อหาข้างล่างนี้ถือว่าเอาไว้
ใช้เป็นพื้นฐานเล็กๆน้อยๆก็พอครับ
รับทราบโดยทั่วกัน เลิกแถว $@%!# (*o*)/ เฮ้ !!!
การเข้ารหัสวิดีโอแบบ H.264/MPEG-4 AVC นั้นทำได้หลายวิธีมาก แต่ผมลองชั่งน้ำหนักระหว่างความยุ่งยาก เวลาที่ใช้ในการแปลงไฟล์ และคุณภาพดูแล้ว จึงคิดว่า วิธีนี้น่าจะเหมาะสมที่สุด โดยเราจะเน้นคุณภาพ และใช้เวลาให้น้อยเท่าที่จะทำได้ แต่ก่อนจะทำต้องทำใจหน่อยนึงว่า การเข้ารหัส Codec H.264 นั้นใช้เวลานานมากๆๆๆๆ อีกทั้งต้องอาศัยพลังCPUอย่างหนัก ใครCPUแรงกว่าก็ใช้เวลาน้อยขึ้น เพราะปัจจุบันการเข้ารหัสวิดีโอส่วนใหญ่อาศัยแต่CPU แต่ขณะนี้มีการ์ดจอของ ATi รุ่นใหม่ออกมาซึ่งสามารถ ใช้ GPU ช่วยในการencode video ทำให้ลดเวลาไปได้อย่างมหาศาลเลยทีเดียว ในอนาคตเราก็คงจะได้ใช้ GPU ช่วย นอกจากใช้แต่ CPU อย่างเดียว
โปรแกรมชั้นนำในปัจจุบันที่ใช้ทำ H.264 ได้อย่างมีประสิทธิภาพ เช่น MeGUI, AutoMKV, LeiMing x264 GUI, VirtualDub, GordianKnot, StaxRip, MainConcept H.264 Encoder เป็นต้น แล้ว H.264 codec ก็มีหลายเจ้า ทั้งฟรี(x264) และไม่ฟรี (MainConcept, CoreAVC)
สรุปแล้ว เราจะเลือกใช้ lmx264gui และ x264 codec
ส่วนใครไม่รู้ว่าH.264มันเยี่ยมยังไง ไปดูตัวอย่างที่ผมทำไว้ได้ที่นี่
[บทความนี้อ้างอิงจาก Leiming version 2007-06-25]
โปรแกรมที่ต้องใช้ เป็น Freeware
3- BePipe (มีมาให้ในLeimingแล้ว)
4- Nero Digital Audio หรือ aacPlus Encoder(ให้ไปเอามาจากในfolder Winamp)
5- MP4Box หรือ MP4Creator
6- MKVmerge
7- AviSynth
8- K-lite codec pack หรือ K-lite mega codec pack
ให้เอาโปรแกรมตัวที่2-6 ไปไว้ในfolder bin ของ lmx264gui แล้วก็ install AviSynth กับ K-lite (2อันนี้ใครลงแล้วก็ไม่ต้อง) ใครไม่อยากยุ่งยาก หรือกลัวทำไม่ถูก ผมได้จัด1-5รวมเป็นชุดไว้ให้แล้ว โหลดไปใช้ได้เลย ส่วนmkvmerge เอาไปรวมใน mkvtoolnix (สำหรับคนที่จะทำเป็น *.mkv)
Download Leimings x264 GUI [Pack]
http://upload.mthai.com/F1/474be66e69166
mirror
http://www.4shared.com/file/23812220/68bf4a2f/LM_x264_GUI_pack.html
Download MKVtoolnix [Pack]
http://upload.siamza.com/download.php?id=70634
Password : advance.exteen.com
Create an AviSynth script
AviSynth script คืออะไร ไปอ่านบทความก่อนหน้า ที่นี่
เราจะเขียน AviSynth Script เพื่อเป็นวัตถุดิบส่งเข้าโปรแกรม เนื่องจากโปรแกรม lmx264gui นั้นอ่านได้แต่ไฟล์ *avs เท่านั้น ยุ่งยากนิดแต่avsสามารถประยุกต์ใช้ได้หลากหลาย และมีประโยชน์มากอีกด้วย เช่น เราสามารถไฟล์อะไรเป็นinputก็ได้ ทำให้แปลงไฟล์ได้แทบทุกชนิด เป็นต้น ดังนั้น อย่างน้อยน่าจะเขียนกันเป็น ไม่ยากเลยครับ
การเขียน AviSynth Script ทำได้โดย เปิดNotepad แล้วเขียนScriptดังนี้
บรรทัดแรกจะเป็นการระบุตำแหน่งไฟล์ต้นฉบับ
สำหรับไฟล์ avi (ไม่ต้องใส่frame rate)
AVISource("D:\My Videos\video.avi")
สำหรับไฟล์วิดีโออื่นๆที่ไม่ใช่ไฟล์ avi (ต้องกำหนดframe rate)
DirectShowSource("D:\My Videos\video.mov", 29.97)
ตัวเลข 29.97 ให้เปลี่ยนตาม frame rate จริงๆของวิดีโอต้นฉบับ
ถ้าจะไม่เอาเสียงให้ต่อท้ายตัวเลข frame rate ด้วย ,false )
หมายเหตุ : รายละเอียดของไฟล์วิดีโอสามารถเปิดดูได้ด้วยโปรแกรม GSpot Codec Information ซึ่งมีมาให้พร้อมในชุด K-lite เรียบร้อยแล้ว (ยังไม่รองรับการลาก-วาง ชื่อไฟล์หรือ directory ภาษาไทย ต้องเปลี่ยนให้เป็นภาษาอังกฤษก่อน)
บรรทัดต่อๆมาจะเป็นการกำหนดค่าอื่นๆ จะไม่ใส่เพิ่มก็ได้ถ้าจะคงค่าเดิมจากต้นฉบับไว้
จะยกตัวอย่างแค่ค่าที่ใช้บ่อยๆนะครับ
Trim(2000,5000): เอาเฉพาะวิดีโอที่อยู่ในช่วงที่ต้องการ (เอาตั้งแต่frameที่2000-5000)
Crop(4, 70, -6, -72): ตัดขอบออก หน่วยเป็นpixel (ตัดขอบด้านซ้าย4,บน70,ขวา6,ล่าง72)
Letterbox(40,40): ใส่Letterbox [แถบดำ]หน่วยเป็นpixel (บน40,ล่าง40)
Lanczos4Resize(640,360): ปรับขนาด (กว้าง640,สูง360)
ConvertToYV12(): เปลี่ยน Pixel type เป็นแบบYV12
ConvertAudioTo16bit(): เปลี่ยน Audio Sample type เป็นแบบ 16 bits
ConvertFPS(23.97): เปลี่ยน Framrate (frame rate ใหม่ = 23.97)
LoadPlugin(): เรียก Plugin เข้ามาใช้งาน (ใส่ชื่อตัวที่จะเรียกไว้ในวงเล็บ)
ตัวอย่าง Script ที่สำเร็จแล้ว :
DirectShowSource("D:\My Videos\video.mov", 29.97)
Lanczos4Resize(640,360)
ConvertToYV12()
จากนั้นให้ save เป็น *.avs
-File > Save as > Save as type : All files , File name : ตั้งชื่อ.avs > Save
แล้วเราก็จะได้ไฟล์ AviSynth Script มา ทดสอบโดยเอาไปเปิดกับ Media Player Classic ดูว่าใช้ได้รึยัง เป็นตามแบบที่ต้องการรึยัง ถ้าจะแก้ไขก็ให้เอาไปเปิดกับ Notepad แล้วแก้ไขให้พอใจ แล้วSave
ถ้าใครเอาไปเปิดแล้ว error ไม่สามารถเล่นวิดีโอได้ แสดงว่าเราเขียน Script ผิด ให้แก้ไขใหม่จนกว่าจะเปิดเล่นได้
Encoding
รัน lmx264gui.exe (อยู่ใน folder bin)
ไปที่ Bitrate Tab
1.Input file: เรียกไฟล์ avs ที่เราทำไว้เข้ามา
2.Output file : เลือกชนิดไฟล์ผลลัพธ์ มีให้เลือก3แบบคือ MP4,MKV และ RAW(*.264 เป็นวิดีโอเพรียวๆ เอาไปทำอะไรต่อก็ได้) เวลาตั้งชื่อให้เขียนนามสกุลต่อท้ายไปด้วย
3.กำหนดจำนวน Pass ในการ Encode : ยิ่งหลายรอบ ก็จะดีขึ้น แต่ก็จะใช้เวลานานขึ้นเช่นกัน และถ้าเกิน 3 passขึ้นไป ก็แยกความแตกต่างไปค่อยออกแล้ว ดังนั้น 2-3 pass กำลังพอดี
Single pass คือรอบเดียว เร็ว แต่คุณภาพจะแย่กว่ามากๆ ดังนั้นแนะนำให้ทำแบบ Multipass จะดีกว่าเยอะ
การตั้งค่าสำหรับ Multipass
-ถ้าจะencode 2 รอบ ให้ครั้งแรกกำหนดเป็น Multipass First Pass ครั้งที่สองกำหนดเป็นMultipass Nth pass (แต่ถ้ารีบ หรือต้องการลดเวลาที่ใช้ในการแปลงไฟล์ ก็ให้กำหนดรอบแรกเป็น แบบ First Pass (fast) ได้)
-ถ้าจะencode 3 รอบเป็นต้นไป ให้ครั้งแรกกำหนดเป็น Multipass First Pass (fast) ครั้งต่อๆไปกำหนดเป็นMultipass Nth pass
ให้ข้ามไปก่อน เดี๋ยวจะกลับมาพูดถึงอีกที
4.ติ๊ก * Size ถ้าต้องการกำหนดขนาด output file แล้วใส่ตัวเลข (หน่วยเป็น mb)
ถ้าไม่ติ๊ก จะเป็นการกำหนดวิดีโอด้วย Bitrate (หน่วยเป็น kbps) รายละเอียดการคำนวณไปดูได้ที่ การแปลงไฟล์ทำ DVD ด้วย Cinema Craft Encoderหัวข้อย่อย Encoding the Video

ไปที่ Rate Control Tab
1.Scene Cuts :
- Sence Cut Threshold เป็นค่าความไวในการแยกแยะการเปลี่ยนเฟรม ถ้ามีการเปลี่ยนเฟรมเร็วๆมากๆ ก็ให้ใส่ค่าที่สูงขึ้น เช่น ภาพในวิดีโอมีการไหวเร็ว หรือแสงน้อย มืดๆ ทึมๆ แต่ถึงยังไงก็ให้ใส่ค่าอยู่ในช่วง 40-60 จะดีที่สุด ไม่ควรมากหรือน้อยไปกว่านี้
- Min IDR-frame interval ให้ใส่ตัวเลข frame rate ของวิดีโอเราลงไป (ต้องเป็นจำนวนเต็ม)
- Max IDR-frame interval ให้เอา frame rate คูณ 10 แล้วใส่ลงไป
ค่าอื่นๆใน tab นี้ให้ใช้ค่า default เดิม

ไปที่ MB&Frames Tab
1.Partitions : ติ๊กให้หมด
2.B Frames :
- Max consecutive : 3
- Bias : 0
- ติ๊ก * Use as references , Bidirectional ME , Adaptive , Weighted biprediction
- Direct Mode : Auto

ไปที่ More Tab
1.Motion Estimation :
- Partition decision : 7b(RDO on B-frames)
- Method : Uneven Muti-Hexagon
- Range : 16
- Max Ref.frames : 2-5
- ติ๊ก * DCT Decimate , Chroma ME , Mixed Refs
- เอาที่ติ๊ก Fast P Skip ออก
2.Misc. options :
- Sample AR : คือ Aspect Ratio แนะนำใส่ 1:1 ไว้ก่อน
- Threads : ใส่จำนวนตามCPU ของเรา เช่น Single core-ใส่1 , Single core with HT(Hyper Treading) หรือ Duo Core ใส่ 2 , Duo Core with HT หรือ Quad core ใส่ 4 เป็นต้น
- ติ๊ก * CABAC > Trellis : 2 , Deblocking fiter
3.Audio Setting :
ติ๊ก * Audio แล้วเลือก Encoder ที่จะใช้ แต่ถ้าจะไม่เอาเสียง หรือ จะทำเสียงใส่เองอีกต่างหาก ก็ไม่ต้องติ๊ก
- CT AAC คือใช้ aacPlus Encoder
- Nero คือใช้ Nero Digital Audio โดยจะมีย่อยลงไปอีกหลายโหมด
แบ่งเป็น3โหมดคือ Nero เฉยๆ คือ เป็นการเข้ารหัสแบบ CBR (Constance Bitrate)
Nero (ABR) คือ เข้ารหัสแบบ ABR (Average Bitrate)
Nero (Q) คือ เข้ารหัส โดยยึดตาม Quality
และในแต่ล่ะอันที่มี sse2 ต่อท้ายก็คือ ใช้สำหรับ CPU ที่มีเทคโนโลยี SSE2
สรุปแล้ว แนะนำให้ใช้ Nero (ABR) SSE2

หมายเหตุ : เรื่องคุณสมบัติของ CPU ทั้งหลาย ถ้าไม่รู้ ให้ใช้โปรแกรม CPU-Z เช็คดูครับ (freeware)
ช่องถัดมา จะเป็นตัวเลือกว่าจะใช้โปรแกรมอะไรในการรวมไฟล์ Video กับ Audio ก็ให้เลือกให้ตรงกับประเภทไฟล์ที่เราทำ เช่น ทำเป็น mp4 ก็ใช้ mp4box
แต่ถ้าไม่อยากเสียใจทีหลัง แนะนำให้เลือก No mux ก็คือ ไม่ต้องรวมให้ เราก็จะได้ไฟล์มา2ไฟล์ เป็น ภาพกับเสียง แล้วค่อยเอาไปรวมกันเอง เพราะถ้าหากเลือกให้มันรวมให้เลย เวลามีปัญหาที่ทำให้ไม่สามารถรวมไฟล์ได้ขึ้นมา จะกลายเป็นว่าเราเสียเวลาแปลงไฟล์นานแทบตาย แต่พอมันรวมไม่ได้ มันก็ลบหายไปหมดเลย เสียเวลาเปล่า ดังนั้น เอามารวมกันเองจะปลอดภัยที่สุด แต่สำหรับ mp4 ไม่ค่อยมีปัญหาจะให้มันรวมให้เลยก็ได้ แต่ mkv เอามารวมกันเองดีกว่า
ดังนั้น ยังไงก็ทำเป็น mp4 ไปเหอะ ถ้าจะให้สอนรวมเป็น mkv อีกมันยาวอ่ะ ขึ้เกียจ 555 งั้นเอาสั้นๆนะ ก็คือให้ใช้ mkvmerge (MKVtoolnix > mmg.exe) แล้วadd video กับ audio ที่เราทำได้เข้าไป แล้วก็Mux มันออกมา เสร็จ
1.กลับไปหน้าแรก คือ Bitrate Tab ไปกำหนดPass
ตรงนี้อ่านทำความเข้าใจให้ดี และกลับไปอ่านข้อ 3. ด้วย
เลือกเป็น First Pass แล้วกด Add จากนั้น กลับไปโหลด Input file เข้ามาใหม่ แล้วตั้งค่า Output file ให้เหมือนเดิม(ระวังเรื่องนามสกุล ให้เหมือนเดิมนะ)แล้วเลือกตั้งเป็น Passต่อไป (Nth Pass) แล้วก็กด Add เข้าไปอีกที เป็นอันเสร็จรอบสอง
ถ้าจะทำรอบ3 หรือรอบต่อๆไปก็ทำเหมือนเดิม คือกลับไปโหลดInput file ตั้งค่า Output แล้วเลือกเป็น Nth pass แล้วก็กด Add เข้าไปอีก
List ที่เรา Add เข้าไป จะไปโผล่ที่ tab Job
2.ไปที่ Job Tab เช็คดูความเรียบร้อย ถ้าต้องการตั้งให้Shutdownหลังจากแปลงไฟล์เสร็จ ให้กดปุ่ม Shut เพิ่มเข้าไป จากนั้นเริ่มEncode โดยกดปุ่ม Start รอจนเสร็จ (นานมากกกกกก *[]*)
เสร็จแล้วก็เปิดชื่นชมผลงานกันได้เลย จบแล้วครับ...
...กว่าจะเสร็จ ยาวจริงๆ...

เป็นกำลังใจให้ ขอบบคุณ ครับ
สุดยอดมากเลยท่าน ฮาโอ
แฟนพันธ์แท้เว็บนี้เลย....
ขอบคุณครับ
#1 By เดียร์ (125.24.4.82) on 2007-08-20 22:29