2013-05-20 15 views
5

Do tej pory robiłem całe moje kodowanie przy użyciu ustalonej klatki (programowo) przy użyciu ffmpeg. Teraz muszę obsługiwać zmienną liczbę klatek na sekundę. Zacząłem od komentowania fragmentu mojego kodu, który ustawiał szybkość klatek. Jednak to nie działa. Moja funkcja kończy się niepowodzeniem na avcodec_open2. Proszę, ktoś sugeruje mi, jak uzyskać wsparcie dla zmiennej liczby klatek na sekundę. Również poznałem nie wszystkie zmienne klatek obsługiwanych przez obsługę kodeków. Więc które kodeki są zwykle używane podczas kodowania ze zmienną liczbą klatek na sekundę. Proszę zasugeruj.Kodowanie ze zmienną liczbą klatek w ffmpeg

Dzięki Pradeep

+0

Czy wiesz, jak to zrobić? Też mnie to interesuje. @ praks411 – GangstaGraham

Odpowiedz

4

Rozumiem stanowisko jest dość stary, ale mam nadzieję, że jest w stanie pomóc niektórych ludzi mających ten sam problem (Właśnie tak) ...

Użyj fps filter lub framerate filter . Będąc również ffpmeg n00b, nie ma gwarancji na 100% poprawności, ale przynajmniej to zadziałało:

Utworzono wykres filtrowania podobnie jak w przykładzie filtering_video.c. Dla argumentu filters na przykład podałem fps=fps=30:round=near. Następnie doprowadza klatki w filtergraph każdym razem, gdy dostał się, obliczanie pts jak

float fps = (float)(codecContext->time_base.num)/codecContext->time_base.den; 
this->frame->pts = (__int64)((timestamp - timestamp0)/fps); 

gdzie timestamp czas, rama w sekund timestamp0 oznacza czas pierwszej ramki są rejestrowane. Oba są wartościami zmiennoprzecinkowymi i wynikają z mojego niestandardowego zegara. Gdy używasz biblioteki udostępniającej sygnatury czasowe przechwyconych ramek (takich jak DirectShow), powinieneś oczywiście z nich korzystać.

Powiązane problemy