แนวทางปฏิบัติแนะนำในการแชร์วิดีโอ

ผู้คนจำนวนมากแชร์วิดีโอโดยใช้อุปกรณ์ Android คุณภาพของ วิดีโอมักจะด้อยกว่าวิดีโอต้นฉบับเนื่องจากการประมวลผล จากแอปการแชร์ เอกสารนี้อธิบายวิธีเพิ่มประสิทธิภาพคุณภาพของ วิดีโอที่แชร์และข้อผิดพลาดทั่วไปในการประมวลผลวิดีโอที่ควรหลีกเลี่ยง เพื่อเพิ่มประสิทธิภาพ สำหรับการแชร์เนื้อหาวิดีโอ HDR โปรดดูที่ ใช้โมดูล Transformer เพื่อแปลง HDR เป็น SDR ในหน้านี้

สิ่งสำคัญที่ต้องทำคือการรักษาความละเอียดให้คงที่และทำให้วิดีโอมีคุณภาพอยู่เสมอ ให้นานที่สุดเท่าที่จะทำได้ขณะเตรียมแชร์วิดีโอ

ไปป์ไลน์การแชร์

รูปที่ 1 แสดงขั้นตอนทั่วไปในการแชร์วิดีโอ

การแชร์ไปป์ไลน์วิดีโอ รูปที่ 1 ไปป์ไลน์การแชร์วิดีโอ

ไปป์ไลน์ประกอบด้วยขั้นตอนเหล่านี้

  1. จับภาพและเข้ารหัสวิดีโอ โดยอาจเพิ่มเอฟเฟกต์ระหว่างที่ถ่าย หรือผู้ใช้สามารถข้ามขั้นตอนนี้แล้วเลือกวิดีโอจากพื้นที่เก็บข้อมูลก็ได้ ที่บันทึกไว้ล่วงหน้าจากแอปอื่น
  2. แก้ไข กรอง ปรับแต่ง หรือประมวลผลวิดีโอ
  3. ปรับขนาดหรือปรับขนาดวิดีโอเพื่อเตรียมการแปลง
  4. แปลงวิดีโอเพื่อแชร์ การกรองในขั้นตอนที่ 2 มักจะใช้เป็น ของขั้นตอนนี้

มี 2 ขั้นตอนในกระบวนการที่คุณมีโอกาสตั้งค่า พารามิเตอร์ที่กำหนดคุณภาพของวิดีโอของคุณ: การเข้ารหัสในช่วงเริ่มต้น การบันทึก และการแปลงข้อมูลก่อนแชร์ นอกจากนี้ คุณอาจต้อง ปรับขนาดวิดีโอใหม่ก่อนขั้นตอนการแปลงขั้นสุดท้าย ซึ่งอาจส่งผลต่อคุณภาพด้วยเช่นกัน

คำแนะนำ

ตารางที่ 1 แสดงพารามิเตอร์หลัก 5 รายการสำหรับคุณภาพวิดีโอ และ จะใช้ขั้นตอนใด

พารามิเตอร์ จับภาพ แชร์
โปรไฟล์ Y Y
ความละเอียด Y Y
อัตราบิต Y Y
พารามิเตอร์การกำหนดปริมาณ (QP) (น้อยครั้ง) Y
เฟรม B ไม่ใช่ Y

ตาราง 1 พารามิเตอร์หลักที่กำหนดคุณภาพวิดีโอ

โปรไฟล์

เพื่อให้ได้ผลลัพธ์ที่ดีขึ้น ให้ใช้โปรไฟล์ขั้นสูงจาก ตัวแปลงรหัส สำหรับการเข้ารหัส AVC ให้เลือก "โปรไฟล์สูง" และ ระดับ 4

ความละเอียด การครอบตัด และการปรับขนาด

คุณสามารถเปลี่ยนความละเอียดเริ่มต้นของวิดีโอที่บันทึกได้ในขั้นตอนการปรับขนาด ก่อนการแปลงเพื่อแบ่งปัน แต่การปรับขนาดสามารถทำให้คุณภาพของ ในการสร้างสรรค์วิดีโอ เราขอแนะนำให้คุณหลีกเลี่ยงการปรับขนาดและเลือกความละเอียดสำหรับ ที่คุณสามารถใช้ตลอดไปป์ไลน์ได้ และโปรดจำไว้ว่า การครอบตัดจะทำให้รูปภาพมีคุณภาพต่ำ โดยเฉพาะอย่างยิ่งหากคุณเพิ่มขนาดรูปภาพที่ครอบตัด รูปภาพ โดยทำตามหลักเกณฑ์ต่อไปนี้

  • เลือกความละเอียดอย่างน้อยให้ใหญ่ที่สุดเท่าความละเอียดสุดท้ายของการแชร์
  • ความละเอียดในการบันทึกไม่ควรเกินความละเอียดของการแชร์มากเกินไป หากขั้นตอนระดับกลางทั้งหมดไม่ได้ออกแบบมาเพื่อรองรับการ (เช่น อัตราบิตที่สูงขึ้นในระหว่างการจับภาพครั้งแรก)

    • ถ้าการเข้ารหัสการแชร์มีความละเอียด 720x1280 เราขอแนะนำ ความละเอียดการจับภาพ 720x1280
    • หากขั้นตอนระดับกลางระหว่างการจับภาพและการแชร์มีการครอบตัด ให้ใช้ ความละเอียดในการจับภาพที่สูงขึ้น เช่น 1080x1920 และเพิ่ม ในการจับภาพที่จะจัดการกับจำนวนพิกเซลเพิ่มเติม
  • การครอบตัดที่สูงมากจะทำให้รูปภาพมีคุณภาพต่ำ โดยเฉพาะถ้าครอบตัด เพิ่มขนาดรูปภาพแล้ว

  • หลีกเลี่ยงการเพิ่มความละเอียดจากความละเอียดต่ำเป็นความละเอียดที่สูงขึ้น การพยายามเพิ่มความละเอียด เพื่อสร้างรายละเอียดที่ไม่มีอยู่ พกความละเอียดที่สูงกว่าที่ต้องการ ไปด้วยกันตั้งแต่ต้น

  • หากต้องเพิ่มความละเอียด ให้ปรับพารามิเตอร์การเข้ารหัส ตัวอย่างเช่น หาก ความละเอียดที่ได้เพิ่มความละเอียดมีพิกเซลมากกว่า 2 เท่า และมีอัตราบิตเป็น 2 เท่า

ความละเอียดและอัตราบิตมีความเชื่อมโยงกัน ตัวอย่างเช่น การพกพาโมเดลความละเอียดสูง วิดีโอผ่านไปป์ไลน์การแชร์ที่จะแปลงเป็นอัตราบิตต่ำในที่สุด จะให้รูปภาพที่มีคุณภาพต่ำกว่าการเริ่มต้นด้วยความละเอียดที่ต่ำกว่า ตามที่ อัตราบิตลดลง มีการครอสโอเวอร์จุดที่ใช้ความละเอียดน้อยลง เพื่อผลลัพธ์ที่ดีขึ้น:

อัตราบิต ความละเอียด
5 Mbps ขึ้นไป 1080x1920
1.5-5 Mbps ขึ้นไป 720x1280
1.5 Mbps หรือน้อยกว่า เทียบเท่ากับ SD จำนวนพิกเซลเท่ากันในสัดส่วนภาพ 9:16 คือประมาณ 416x736

ตาราง 2 อัตราบิตกับความละเอียด

แอปยอดนิยมจำนวนมากแชร์วิดีโอที่ความละเอียด 720p หรือต่ำกว่า ข้อมูลบ่งชี้ ความละเอียด 720p เป็นตัวเลือกที่เหมาะสมสำหรับการกำหนดเป้าหมายอัตราบิตระหว่าง 1.5 และ 5 Mbps

อัตราบิต

กำลังบันทึก

การใช้อัตราบิตในการเข้ารหัสที่สูงขึ้นจะช่วยเพิ่มการปรับปรุงวิดีโอได้มากที่สุด คุณภาพ เราขอแนะนำให้เลือกอัตราบิตที่ตรงกับแอปกล้องที่มาพร้อมเครื่อง สำหรับ ความละเอียด 720x1280 เราขอแนะนำให้ใช้อัตราบิตการจับภาพที่ 10 Mbps

เนื่องจากการเข้ารหัสการบันทึกนั้นดำเนินการในอุปกรณ์ คุณจึงใช้อัตราบิตที่สูงขึ้นเพื่อ ชดเชยการเปลี่ยนแปลงขั้นตอนการแบ่งปันข้อมูลส่วนใหญ่ซึ่งมีค่าลบเพียงเล็กน้อย ผลกระทบ ไฟล์ผลลัพธ์ที่มีขนาดใหญ่ขึ้นจะใช้สำหรับการจัดการในอุปกรณ์เท่านั้น

คุณสามารถลดอัตราบิตในขั้นตอนการแปลงขั้นสุดท้ายดังที่แสดงในตารางที่ 2

การแชร์

บิตเรตจะมีผลกระทบมากที่สุด ณ เวลานี้ เนื่องจากบิตเรตจะมีความเกี่ยวข้องโดยตรงกับ ขนาดของวิดีโอที่จะอัปโหลด มีข้อดีข้อเสียระหว่างวิดีโอ คุณภาพ เวลาในการส่งไฟล์ และต้นทุนของพื้นที่เก็บข้อมูลระบบคลาวด์

นอกจากนี้ ตัวเลือกโปรไฟล์การเข้ารหัส, เฟรม B และค่าขอบเขต QP ยังมีให้เลือกมากกว่า มีความสำคัญในขั้นตอนนี้มากกว่า ในระหว่างการบันทึกข้อมูล

เราขอแนะนำให้ใช้อัตราบิตระหว่าง 4-5 Mbps (สำหรับความละเอียด 720x1280) เพื่อให้แน่ใจว่าคุณภาพดี และคุณภาพของภาพ

พารามิเตอร์การกำหนดปริมาณ (QP)

ใน Android 12 ขึ้นไป คีย์ QP เป็นคีย์มาตรฐานและพร้อมใช้งานใน MediaFormat API และใน คลังสื่อ NDK ใน Android เวอร์ชันก่อนหน้า การจัดการ QP ใช้งานได้ผ่านเฟรมเวิร์กเท่านั้น ทำงานโดยใช้คีย์เฉพาะผู้ให้บริการในการกำหนดค่า MediaFormat

กำลังบันทึก

ในระหว่างการจับภาพวิดีโอ ให้ใช้การควบคุมอัตราบิตแทนการตั้งค่า QP ในบางครั้ง

เราไม่แนะนำให้ปรับการตั้งค่า QP สำหรับอัตราบิตการจับภาพ 10 Mbps (สำหรับ 720x1280) ถ้าอัตราบิตในการจับภาพต่ำกว่ามาก ให้ต่ำกว่า 5 Mbps สำหรับ 720x1280 การตั้งค่า QP ที่ 40 ถือว่าเหมาะสมดีระหว่างคุณภาพที่เพิ่มขึ้น โดยไม่บังคับให้ตัวแปลงรหัสบันทึกอัตราบิตเป้าหมายบ่อยเกินไป

การแชร์

เราขอแนะนำให้กำหนด QP สูงสุดที่ 40 โดยเฉพาะอย่างยิ่งเมื่ออัตราบิตต่ำกว่า 4 Mbps แม้ว่าวิธีนี้ทำให้วิดีโอที่เข้ารหัสมีคุณภาพขั้นต่ำ แต่ก็สามารถสร้าง ด้วยอัตราบิตที่สูงขึ้น อัตราบิตที่เพิ่มขึ้นขึ้นอยู่กับ ความซับซ้อนของวิดีโอ แม้ว่าแอปการแชร์อาจยอมรับความแตกต่างบางประการใน อัตราบิตของวิดีโอที่สร้างขึ้น อาจไม่ยอมให้มีการเพิ่มขึ้นนอกเหนือจาก เกณฑ์บางอย่าง

คุณสามารถจำกัดอัตราบิตที่เพิ่มขึ้นได้โดยการเข้ารหัสวิดีโออีกครั้งเพื่อแชร์กับ ขอบเขต QP สูงสุดที่จำกัดน้อยกว่า (สูงกว่า) ซึ่งทำให้ตัวแปลงรหัสมีอิสระมากขึ้นในการ ลดคุณภาพและรักษาส่วนอื่นๆ ของวิดีโอ คุณสามารถเข้ารหัส วิดีโอสำหรับแชร์เนื่องจากเป็นการดำเนินการแปลง คุณมี ได้บันทึกวิดีโอที่คุณต้องการจะแชร์

ข้อเสียก็คือ ต้องทำตามขั้นตอนการแปลงซ้ำโดยใช้ จะเพิ่มระยะเวลาที่ใช้ในการแชร์วิดีโอ วิธีหนึ่งในการลดจำนวน เวลาในการตอบสนองนี้คือการดูวิดีโอที่แปลงบางส่วนเพื่อตัดสินใจว่าไม่ใช่ ภายในความอดทนต่อการใช้งานอัตราบิตมากเกินไป หากไม่ คุณสามารถหยุด แล้วลองใหม่อีกครั้งโดยใช้พารามิเตอร์ QP ที่เหมาะสมยิ่งขึ้น

B-Frame และโปรไฟล์การเข้ารหัส

พิจารณาใช้ B-Frame เฉพาะในขั้นตอนการแชร์และใช้เมื่อเรียกใช้เท่านั้น Android 10 ขึ้นไป

แอปควรตรวจสอบโปรไฟล์การเข้ารหัสที่รองรับโดยใช้ CodecCapabilities เนื่องจากอุปกรณ์บางชนิดไม่รองรับโปรไฟล์หลัก หรือโปรไฟล์ระดับสูง ใช้โปรไฟล์สูงสุด สนับสนุนโดยโปรแกรมเปลี่ยนไฟล์ AVC: สูง > หลัก > เกณฑ์พื้นฐาน เพื่อให้ได้ผลลัพธ์ที่ปลอดภัยที่สุด โปรดอย่า กำหนดค่า B-Frame (KEY_LATENCY หรือ KEY_MAX_B_FRAMES) เมื่อใช้เกณฑ์พื้นฐาน เนื่องจากโปรแกรมเปลี่ยนไฟล์อาจกำหนดค่าไม่สำเร็จ

ส่วนโค้ดต่อไปนี้ถือว่าเป็น 'MediaFormat format' ที่จะใช้เพื่อ กำหนดค่าโปรแกรมเปลี่ยนไฟล์ AVC

Android 10

API 29 ขึ้นไป

ใช้โปรไฟล์สูงสุดที่รองรับและตั้งค่าพารามิเตอร์ B-Frame เป็น 1 ดังนี้

format.setInt32(KEY_PROFILE, AVCProfileHigh);
format.setInt32(KEY_MAX_B_FRAMES, 1);

อย่าตั้งค่า KEY_LATENCY ในสถานการณ์นี้

Android 8, 8.1 และ 9

API 26, 27, 28

ใช้โปรไฟล์สูงสุดที่รองรับ แต่ปิดใช้การสร้าง B-Frame ช่วงเวลานี้ รองรับข้อจำกัดบางอย่าง MediaMuxer ในเวอร์ชันระบบเหล่านี้

format.setInt32(KEY_PROFILE, AVCProfileHigh);
format.setInt32(KEY_LATENCY, 1);

ค่า KEY_LATENCY ไม่อนุญาตให้ตัวแปลงรหัสสร้างเฟรม B แต่ยังคง ใช้ประโยชน์จากตัวแปลงรหัสอื่น ๆ

หากแอปไม่ได้ใช้ MediaMuxer ในการประกอบไฟล์เอาต์พุตขั้นสุดท้าย คุณอาจ เปิดใช้ B-Frame โดยตั้งค่า KEY_LATENCY เป็น 2 แทน 1 สิ่งนี้ควร ทำให้ตัวแปลงรหัสสามารถสร้างเฟรม B

Android 7.1 และเก่ากว่า

API 25 และเวอร์ชันก่อนหน้า

ใช้โปรไฟล์พื้นฐานเพื่อผลลัพธ์ที่ปลอดภัยที่สุด

format.setInt32(KEY_PROFILE, AVCProfileBaseline);

ก่อนเวอร์ชัน 7 Android AOSP รองรับเฉพาะโปรไฟล์พื้นฐานเท่านั้น อย่างไรก็ตาม มีแนวโน้มว่า OEM ได้เปิดใช้โปรไฟล์หลัก/ระดับสูงในอุปกรณ์บางเครื่อง โดยอาจเป็นดังนี้ โดยใช้โปรไฟล์เฉพาะผู้ให้บริการ

หากแอปไม่ได้ใช้ MediaMuxer คุณสามารถใช้โปรไฟล์หลักหรือโปรไฟล์ระดับสูงเมื่อ ที่ตัวแปลงรหัสรองรับ ไม่มีคีย์สาธารณะสำหรับควบคุมจำนวน B- ของเฟรม

ใช้โมดูล Transformer เพื่อแปลง HDR เป็น SDR

สำหรับ Android 13 (API ระดับ 33) เป็นต้นไป เราขอแนะนำให้ใช้ Jetpack Media3 ตัวเปลี่ยนรูปแบบ สำหรับแชร์เนื้อหา HDR กับแอป บริการ และอุปกรณ์ที่ไม่ รองรับ HDR โมดูล Transformer ทำงานโดยการทำแผนที่โทนสี ป้อนข้อมูลสตรีมวิดีโอ HDR ลงใน SDR แล้วบันทึกผลลัพธ์เป็น MP4 ซึ่งจะช่วยให้ การเล่นที่ประสบความสำเร็จโดยไม่สูญเสียรายละเอียดหรือความสว่างของภาพ

หมายเหตุ: ในอุปกรณ์ที่กำหนดเป้าหมายเป็นระบบเวอร์ชันระหว่าง Android 12 (API ระดับ 32) ไปจนถึง Android 7.0 (API ระดับ 24) โมดูล Transformer จะทำงานต่างออกไป ถ้า อุปกรณ์รองรับ HDR แอปของคุณจะเล่นเนื้อหาโดยไม่ต้องกำหนดโทนสี หากอุปกรณ์ไม่รองรับ HDR อุปกรณ์จะแสดงข้อผิดพลาดที่ระบุว่า HDR ไม่สนับสนุนการแมปโทนสี

โค้ดต่อไปนี้จะตั้งค่า Transformer ให้จับคู่อินพุตกับ SDR และ จากนั้นเข้ารหัสอีกครั้งในรูปแบบอินพุต (เช่น H.264/AVC)

Kotlin

val transformer = Transformer.Builder(context)
    .setTransformationRequest(
        TransformationRequest.Builder()
            .setHdrMode(TransformationRequest.HDR_MODE_TONE_MAP_HDR_TO_SDR)
            .build())
    .addListener(/* ... */)
    .build()

Java

Transformer transformer = new Transformer.Builder(context)
    .setTransformationRequest(
        new TransformationRequest.Builder()
            .setHdrMode(TransformationRequest.HDR_MODE_TONE_MAP_HDR_TO_SDR)
            .build())
    .addListener(/* ... */)
    .build();

หากต้องการลองใช้ฟังก์ชันการทำแผนที่โทนสี ให้ดู แอปเดโม Transformer

นอกจากนี้คุณยังตั้งค่าการแมปโทนสีได้โดยใช้ MediaCodec แม้ว่าการติดตั้งใช้งาน นั้นจะมีความซับซ้อนมากขึ้น สำหรับข้อมูลเพิ่มเติม โปรดดู เอกสารอ้างอิง MediaCodec