หน้าเว็บ

วันศุกร์ที่ 24 เมษายน พ.ศ. 2569

ffmpeg คู่มือเข้ารหัสวิดีโอ H.264 (x264)

โหมดการควบคุมอัตราการส่งข้อมูล (Rate Control)

1. การควบคุมอัตราบิต (Rate Control)

หน้าเว็บเน้นย้ำ 2 โหมดหลักที่ต้องเลือกใช้ตามจุดประสงค์

  • Constant Rate Factor (CRF) - เน้นคุณภาพ:

    • หลักการ: เลือกคุณภาพที่ต้องการ แล้วให้ Encoder จัดการ Bitrate เองตามความยากง่ายของภาพ

    • ค่าที่ควรทราบ: สเกลคือ 0-51

      • 0: Lossless (ชัดเท่าต้นฉบับแต่ไฟล์ใหญ่มาก)

      • 17–18: Visually Lossless (ทางสายตาดูไม่ออกว่าต่างจากต้นฉบับ)

      • 23: ค่าเริ่มต้น

      • 28: คุณภาพยังดีอยู่แต่ไฟล์จะเล็กกว่า 23 มาก

    • สูตรคำนวณ: ถ้าเพิ่มค่า CRF ไป +6 ขนาดไฟล์จะลดลงประมาณครึ่งหนึ่ง ในทางกลับกันถ้าลด -6 ขนาดไฟล์จะใหญ่ขึ้นประมาณเท่าตัว

  • Two-Pass - เน้นขนาดไฟล์:

    • หลักการ: ต้องรันคำสั่ง 2 รอบ รอบแรกเพื่อวิเคราะห์วิดีโอ (สร้าง Log file) รอบที่สองเพื่อ Encode จริงให้ได้ขนาดไฟล์ตามที่คำนวณไว้เป๊ะๆ

    • วิธีคำนวณ Bitrate: (ขนาดไฟล์ที่ต้องการในหน่วย MiB * 8388.608) / ความยาววิดีโอเป็นวินาที = Bitrate รวม

2. การเลือก Preset และ Tune (หัวใจของ x264)

  • Presets (ความเร็ว vs ประสิทธิภาพ): ไล่จากเร็วสุดไปช้าสุด: ultrafast, superfast, veryfast, faster, fast, medium (Default), slow, slower, veryslow, placebo

    • สิ่งที่ควรรู้: ยิ่งใช้ Preset ช้าลง (เช่น slow หรือ slower) ตัว Encoder จะวิเคราะห์ภาพได้ละเอียดขึ้น ทำให้ได้คุณภาพวิดีโอดีขึ้นในขณะที่ขนาดไฟล์เท่าเดิม หรือได้ไฟล์เล็กลงในขณะที่คุณภาพเท่าเดิม

  • Tune (ปรับแต่งตามเนื้อหา):
    ใช้ตัวเลือก -tune เพื่อเปลี่ยนการตั้งค่าตามรายละเอียดของข้อมูลป้อนเข้าของคุณได้ การตั้งค่าปัจจุบันได้แก่

    • film: สำหรับหนังทั่วไป (รักษาความละเอียดของภาพ)

    • animation: สำหรับการ์ตูน (ใช้ deblocking มากขึ้นและ reference frames เยอะขึ้น)

    • grain: สำหรับหนังเก่าที่มี Noise/Grain เยอะ (รักษาความขลังของเนื้อฟิล์ม)

    • stillimage: สำหรับภาพนิ่งหรือสไลด์โชว์

    • zerolatency: สำหรับงานถ่ายทอดสดที่ต้องการความหน่วงต่ำที่สุด

3. ข้อมูลเชิงลึกด้าน Compatibility (การนำไปเปิดเล่น)

  • Profiles: ปกติ x264 จะเลือกให้เองอัตโนมัติ แต่ถ้าต้องส่งไฟล์ไปเล่นในอุปกรณ์เก่ามากๆ อาจต้องระบุ:

    • -profile:v baseline: สำหรับมือถือรุ่นเก่ามาก

    • -profile:v main: มาตรฐานทั่วไป

    • -profile:v high: อุปกรณ์สมัยใหม่ (แนะนำตัวนี้ถ้าไม่ได้ระบุอะไร)

  • Pixel Format: หาก Encode แล้วเปิดใน QuickTime หรือโปรแกรมเล่นวิดีโอทั่วไปไม่ได้ ให้เพิ่ม -pix_fmt yuv420p เข้าไปเสมอ เพราะอุปกรณ์ส่วนใหญ่รองรับแค่มาตรฐาน 4:2:0

4. ฟีเจอร์เสริมที่น่าสนใจ

  • Faststart for Web: การใส่ -movflags +faststart จะช่วยย้ายข้อมูล Header ไปไว้ส่วนหน้าของไฟล์ ทำให้วิดีโอบนเว็บกดปุ๊บเล่นปั๊บได้เลย (ไม่ต้องรอโหลดเสร็จทั้งไฟล์)

  • Hardware Acceleration: หน้าเว็บมีการเอ่ยถึงการใช้การ์ดจอช่วย (เช่น h264_nvenc ของ Nvidia หรือ h264_qsv ของ Intel QuickSync) ซึ่งจะทำงานได้เร็วมาก แต่คุณภาพต่อบิตอาจจะไม่กริบเท่าการใช้ CPU (libx264) รันเพียวๆ


ตัวอย่างคำสั่งแบบจัดเต็ม: ffmpeg -i input.mp4 -c:v libx264 -preset slower -crf 20 -tune film -pix_fmt yuv420p -movflags +faststart -c:a aac -b:a 192k output.mp4

ที่มา

https://trac.ffmpeg.org/wiki/Encode/H.264

ไม่มีความคิดเห็น:

แสดงความคิดเห็น