FFmpeg เป็นโปรแกรมโอเพ่นซอร์สที่ใช้งานได้ฟรีซึ่งใช้สำหรับจัดการวิดีโอ เสียง และสตรีมมัลติมีเดียอื่นๆ โปรแกรมนี้ได้รับการออกแบบมาเพื่อรองรับการประมวลผลไฟล์วิดีโอและไฟล์เสียงโดยใช้บรรทัดคำสั่ง อย่างไรก็ตาม เมื่อไม่นานมานี้ มีรายงานจำนวนมากที่มาจาก “ระยะเวลาที่ผ่านมามากเกินไป ” เกิดข้อผิดพลาดขณะเข้ารหัสหรือลดขนาดวิดีโอ
อะไรทำให้เกิดข้อผิดพลาด "ระยะเวลาที่ผ่านมามากเกินไป" ใน FFmpeg
หลังจากได้รับรายงานจำนวนมากจากผู้ใช้หลายคน เราจึงตัดสินใจตรวจสอบปัญหาและคิดหาวิธีแก้ไขเพื่อแก้ไขให้สมบูรณ์ นอกจากนี้ เราได้ตรวจสอบสาเหตุที่ทำให้เกิดข้อผิดพลาดนี้และแสดงรายการดังต่อไปนี้:
- อินพุตเฟรมเรตหายไป: ในกรณีส่วนใหญ่ ปัญหาเกิดขึ้นเนื่องจากไม่มีการป้อนเฟรมเรตของอินพุตสำหรับรูปภาพ ส่งผลให้โปรแกรมสมมติว่าอัตราเฟรมอินพุตอยู่ที่ 25 fps ซึ่งอาจทำให้เกิดปัญหาได้หากไม่เป็นเช่นนั้น
- ไม่ได้ใช้งานการตั้งค่าการซิงค์: กับผู้ใช้ส่วนใหญ่ การใช้การตั้งค่าการซิงค์บางอย่างช่วยแก้ไขปัญหาได้ บางครั้ง เฟรมอาจไม่ซิงค์อย่างถูกต้องเนื่องจากเฟรมบางเฟรมอาจหลุด และข้อผิดพลาดนี้อาจถูกทริกเกอร์
เมื่อคุณมีความเข้าใจพื้นฐานเกี่ยวกับธรรมชาติของปัญหาแล้ว เราจะดำเนินการแก้ไขปัญหาต่อไป ตรวจสอบให้แน่ใจว่าได้ใช้สิ่งเหล่านี้ในลำดับเฉพาะที่แสดงเพื่อหลีกเลี่ยงความขัดแย้ง
แนวทางที่ 1:การเพิ่มเฟรมอินพุต
หากไม่ได้เพิ่มอัตราเฟรมอินพุตของวิดีโอ อาจส่งผลให้บางเฟรมหลุดและเกิดข้อผิดพลาดขึ้น ดังนั้น ในขั้นตอนนี้ เราจะเพิ่มเฟรมอินพุตสำหรับสิ่งนั้น:
- สังเกตการประชุมที่คุณใช้ในการแปลงวิดีโอ มันอาจจะคล้ายกัน ต่อไปนี้
ffmpeg -i %05d.png -r 24 -c:v libx264 -crf 5 out.mkv
- ตอนนี้เพียง เพิ่ม อัตราเฟรม ไปยังการประชุมที่ใช้ดังนี้
ffmpeg -framerate 24 -i %05d.png -c:v libx264 -crf 5 out.mkv
- ตรวจสอบเพื่อดูว่าปัญหายังคงมีอยู่หรือไม่
โซลูชันที่ 2:การใช้แฟล็กการซิงค์
การเพิ่มแฟล็กการซิงค์สามารถช่วยซิงค์เอาต์พุตและวิดีโออินพุตตามอัตราเฟรมเริ่มต้นของวิดีโอ ดังนั้น หากไม่ได้เพิ่มคำสั่งการซิงค์ อาจเป็นไปได้ว่าเฟรมไม่ได้รับการซิงค์อย่างถูกต้อง ในขั้นตอนนี้ เราจะเพิ่มคำสั่งซิงค์
- ในขั้นตอนนี้ คุณต้องกำลังใช้งาน การประชุมต่อไปนี้
ffmpeg -framerate 24 -i %05d.png -c:v libx264 -crf 5 out.mkv
- อย่างไรก็ตาม แทนที่จะ ใช้ การประชุมต่อไปนี้
ffmpeg -framerate 24 -i %05d.png -c:v libx264 -crf 5 out.mkv -async 1 -vsync 1
- โปรดทราบว่าเราเพิ่งเพิ่ม “-async 1 -vsync1 ” ในการเรียกประชุมและต้องเพิ่มข้อมูลนี้เมื่อสิ้นสุดการประชุมที่คุณใช้
หมายเหตุ: การประชุมครั้งแรกของคุณอาจแตกต่างจากที่ใช้เป็นตัวอย่าง อย่างไรก็ตาม การเปลี่ยนแปลงที่เพิ่มเข้ามาในการประชุมไม่ควรแตกต่างกัน