Po przykładach plików ffmpeg: decoding_encoding.c i filtering_video.c, przetwarzam jeden plik wideo pobrany przez iPhone'a. Plik wideo: .mov, wymiary wideo; 480x272, wideo Kodek: H.264/AVC, 30 klatek na sekundę, szybkość transmisji: 605 kb/s.Dlaczego frame-> pts zwiększa się o 20, a nie o 1?
Najpierw rozpakowuję każdą klatkę, która jest YUV. Konwertuję YUV na RGB24 i przetwarzam RGB24, a następnie zapisuję RGB24 w pliku .ppm. Pokazuje, że plik .ppm jest poprawny.
Następnie planuję zakodować przetworzone ramki RGB24 do pliku wideo. Ponieważ MPEG nie obsługuje formatu obrazu RGB24, użyłem AV_CODEC_ID_HUFFYUV. Ale wyjściowy plik wideo (pokazujący 18,5 MB) nie jest odtwarzany. Odtwarzacz filmów w systemie Ubuntu zgłasza błąd: Nie można ustalić typu strumienia. Próbowałem również na VCL. To po prostu nie działa, bez żadnych informacji o błędzie.
Moje drugie pytanie brzmi: Dla każdego wydobytego FRAM z pliku wejściowego wideo, mam swoje pts następująco według filtering_video.c:
frame->pts = av_frame_get_best_effort_timestamp(frame);
mogę wydrukować pts każdej ramce, a uważają, że zwiększa się o 20, jak poniżej:
pFrameRGB_count: 0, frame->pts: 0
pFrameRGB_count: 1, frame->pts: 20
pFrameRGB_count: 2, frame->pts: 40
pFrameRGB_count: 3, frame->pts: 60
Jeżeli rama jest ekstrahowany ramki z wejściowego sygnału wizyjnego, a pFrameRGB_count jest licznik dla przetworzonego ramy w postaci RGB24.
Dlaczego się mylą?