Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การแก้ไขปัญหา >> ข้อผิดพลาด Windows

วิธีแก้ไขข้อผิดพลาด "Past Duration Too Large" ใน FFmpeg

FFmpeg เป็นโปรแกรมฟรีโอเพนซอร์ส สำหรับจัดการ Video, Audio และ Multimedia streams ออกแบบสำหรับควบคุมผ่าน Command line ในการประมวลผลไฟล์วิดีโอ/เสียง แต่เมื่อเรานี้มีรายงานข้อผิดพลาด Past Duration Too Large ขณะเข้ารหัส (encode) หรือลดขนาด (downscale) วิดีโอ

วิธีแก้ไขข้อผิดพลาด  Past Duration Too Large  ใน FFmpeg

สาเหตุของข้อผิดพลาด "Past Duration Too Large" ใน FFmpeg

จากการสำรวจพบสาเหตุและวิธีแก้ไขที่แก้ปัญหาได้:

  • ขาด Input Framerate: กรณีส่วนใหญ่ มาจากไม่ได้ระบุ Input framerate สำหรับภาพ ทำให้โปรแกรมสมมติว่า 25 fps ซึ่งอาจไม่ตรงกับความเป็นจริง
  • ไม่ได้ใช้ Sync Settings: ผู้ใช้ส่วนใหญ่แก้ได้โดยเพิ่ม Sync settings บางครั้งเฟรมไม่ซิงค์ได้ ทำให้บางเฟรมถูก Drop และก่อให้เกิดข้อผิดพลาด

เข้าใจสาเหตุแล้ว มาดูวิธีแก้ไขตามลำดับ

วิธีแก้ไข 1: เพิ่ม Input Framerate

หากไม่ได้ระบุ Input framerate อาจทำให้เฟรมถูก Drop และเกิดข้อผิดพลาด ขั้นตอนนี้เพิ่ม Input frames

  1. สังเกตคำสั่งที่ใช้แปลงวิดีโอ อาจคล้ายกับ:
    ffmpeg -i %05d.png -r 24 -c:v libx264 -crf 5 out.mkv
  2. เพียงแค่ เพิ่ม framerate เข้าไปในคำสั่ง:
    ffmpeg -framerate 24 -i %05d.png -c:v libx264 -crf 5 out.mkv
  3. ตรวจสอบว่าปัญหาแก้ไขหรือยัง

วิธีแก้ไข 2: ใช้ Sync Flags

การเพิ่ม Sync flags ช่วยซิงค์ Output และ Input ตาม Framerate เริ่มต้นของวิดีโอ หากไม่ได้เพิ่ม Sync commands เฟรมอาจไม่ซิงค์ได้ ขั้นตอนนี้เพิ่มคำสั่ง Sync

  1. ในขั้นตอนนี้ คุณอาจใช้คำสั่ง:
    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 -async 1 -vsync 1
  3. สังเกตว่าเพิ่มแค่ -async 1 -vsync 1 ท้ายคำสั่ง ต้องเพิ่มที่ท้ายคำสั่งที่คุณใช้
    หมายเหตุ: คำสั่งต้นทางของคุณอาจต่างจากตัวอย่าง แต่วิธีเพิ่ม -async 1 -vsync 1 จะเหมือนกัน