Jak naprawić błąd „Past Duration Too Large” w FFmpeg?
FFmpeg to darmowy program typu open source, który służy do obsługi strumieni wideo, audio i innych strumieni multimedialnych. Program został zaprojektowany do obsługi przetwarzania plików wideo i audio na podstawie wiersza poleceń. Jednak całkiem niedawno pojawiło się wiele raportów o błędzie „ Zbyt długi czas trwania ” podczas kodowania lub zmniejszania skali wideo.
Co powoduje błąd „Zbyt długi czas trwania” w FFmpeg?
Po otrzymaniu licznych raportów od wielu użytkowników postanowiliśmy zbadać problem i opracowaliśmy zestaw rozwiązań, aby go całkowicie naprawić. Przyjrzeliśmy się również przyczynom, dla których ten błąd został uruchomiony, i wymieniliśmy je w następujący sposób:
- Brak wejściowej liczby klatek na sekundę : W większości przypadków problem jest spowodowany tym, że wejściowa liczba klatek na sekundę nie została wprowadzona dla obrazów. Powoduje to, że program zakłada, że wejściowa liczba klatek na sekundę wynosi 25 fps, co może powodować problemy, jeśli tak nie jest.
- Ustawienia synchronizacji nie zostały zaimplementowane: U większości użytkowników wdrożenie niektórych ustawień synchronizacji rozwiązało problem. Czasami ramki mogą nie zostać poprawnie zsynchronizowane, z powodu których niektóre ramki mogą zostać upuszczone i może zostać wyzwolony ten błąd.
Teraz, gdy znasz już podstawy problemu, przejdziemy do rozwiązań. Pamiętaj, aby zaimplementować je w określonej kolejności, w jakiej są przedstawione, aby uniknąć konfliktu.
Rozwiązanie 1: Dodanie ramek wejściowych
Jeśli wejściowa liczba klatek na sekundę wideo nie została dodana, może to spowodować upuszczenie niektórych klatek i wyzwolenie błędu. Dlatego w tym kroku dodamy do tego ramki wejściowe:
- Obserwuj konwokację, której użyłeś do konwersji wideo, może być podobny do poniższego
ffmpeg -i% 05d.png -r 24 -c: v libx264 -crf 5 out.mkv
- Teraz wystarczy dodać liczbę klatek na sekundę do konwokacji w następujący sposób
ffmpeg -framerate 24 -i% 05d.png -c: v libx264 -crf 5 out.mkv
- Sprawdź, czy problem nadal występuje.
Rozwiązanie 2: Używanie flag synchronizacji
Dodanie flag synchronizacji może pomóc zsynchronizować wyjście i wideo wejściowe zgodnie z początkowymi szybkościami klatek wideo. Dlatego jeśli komendy synchronizacji nie zostały dodane, możliwe, że ramki nie są poprawnie synchronizowane. W tym kroku dodamy polecenia synchronizacji
- Na tym etapie prawdopodobnie używasz następującego konwokacji
ffmpeg -framerate 24 -i% 05d.png -c: v libx264 -crf 5 out.mkv
- Zamiast tego użyj następującego konwokacji
ffmpeg -framerate 24 -i% 05d.png -c: v libx264 -crf 5 out.mkv -async 1 -vsync 1
- Zauważ, że właśnie dodaliśmy „ -async 1 -vsync1 ” do konwokacji i należy to dodać na końcu używanej konwokacji.
Uwaga: Twoje początkowe zwołanie może różnić się od tego użytego jako przykład. Zmiany dodane do zwołania nie powinny się jednak różnić.