Kaip išspręsti „Praėjusios trukmės per didelę“ klaidą „FFmpeg“?

„FFmpeg“ yra nemokama naudoti ir atviro kodo programa, naudojama tvarkant vaizdo, garso ir kitus daugialypės terpės srautus. Programa buvo sukurta tvarkyti komandų eilutėmis pagrįstą vaizdo ir garso failų apdorojimą. Tačiau visai neseniai buvo pateikta daug pranešimų apie „Praėjusi trukmė per didelė“Klaida koduojant ar mažinant vaizdo įrašą.

Kas sukelia „Praėjusios trukmės per didelę“ klaidą FFmpeg?

Gavę daugybę pranešimų iš kelių vartotojų, nusprendėme ištirti problemą ir sukūrėme sprendimų rinkinį, kad galėtume jį visiškai ištaisyti. Be to, mes ištyrėme priežastis, dėl kurių atsirado ši klaida, ir išvardijome jas taip:

  • Trūksta įvesties kadrų dažnio:Daugeliu atvejų problema kyla dėl to, kad įvesties kadrų dažnis neįvestas vaizdams. Dėl to programa daro prielaidą, kad įvesties kadrų dažnis yra 25 kadrai per sekundę, o tai gali sukelti problemų, jei taip nėra.
  • Neįdiegti sinchronizavimo nustatymai: Daugumai vartotojų problema išspręsta įgyvendinant tam tikrus sinchronizavimo nustatymus. Kartais rėmeliai gali būti netinkamai sinchronizuojami, dėl to tam tikri kadrai gali būti atmesti ir ši klaida gali būti suaktyvinta.

Dabar, kai jūs iš esmės suprantate problemos pobūdį, mes eisime prie sprendimų. Kad išvengtumėte konfliktų, būtinai juos įgyvendinkite ta tvarka, kuria jie pateikiami.

1 sprendimas: Įvesties rėmelių pridėjimas

Jei vaizdo įrašo įvesties kadrų dažnis nebuvo pridėtas, kai kurie kadrai gali nukristi ir suveikti klaida. Todėl šiame žingsnyje mes pridėsime tam įvesties rėmelius:

  1. Stebėkite šaukimą, kurį naudojote konvertuodami vaizdo įrašą, jis gali būti įjungtas panašus prie šių
    ffmpeg -i% 05d.png -r 24 -c: v libx264 -crf 5 out.mkv
  2. Dabar paprasčiausiai papildyti kadrų dažnis į sušaukimą, naudojamą taip
    ffmpeg -framerate 24 -i% 05d.png -c: v libx264 -crf 5 out.mkv
  3. Patikrinkite, ar problema išlieka.

2 sprendimas: sinchronizavimo vėliavėlių naudojimas

Pridėjus sinchronizavimo žymas, gali būti lengviau sinchronizuoti išvestį ir įvestį vaizdo įrašą pagal pradinius vaizdo įrašo kadrus. Todėl, jei sinchronizavimo komandos nebuvo pridėtos, gali būti, kad rėmeliai nėra tinkamai sinchronizuojami. Šiame žingsnyje pridėsime sinchronizavimo komandas

  1. Šiame etape tikriausiai taip ir turi būti naudojant toks sušaukimas
    ffmpeg -framerate 24 -i% 05d.png -c: v libx264 -crf 5 out.mkv
  2. Tačiau vietoj to naudoti toks sušaukimas
    ffmpeg -framerate 24 -i% 05d.png -c: v libx264 -crf 5 out.mkv -async 1 -vsync 1
  3. Atkreipkite dėmesį, kad ką tik pridėjome-asinkr 1 -vsync1“Prie sušaukimo ir tai reikia pridėti pašaukimo pabaigoje, kurį naudojate.

    Pastaba:Jūsų pradinis šaukimas gali skirtis nuo to, kuris buvo naudojamas kaip pavyzdys. Tačiau sušaukimui pridėti pakeitimai neturėtų skirtis.