Jak kontrolować generowanie klatek kluczowych w ffmpeg?
Tworzę segmentator, który interweniuje funkcję write_frame ffmpeg i zapisuje dane wyjściowe do oddzielnych plików. Każdy plik podzielony na segmenty zawiera segment wideo o długości około 3 sekund.
Kod wykonuje następujące czynności:
1 - Get transcoded packet
2 - Check if it contains key frame data, if yes goto 3.
3 - Check the duration of current segment, if it exceed 3 seconds, goto 4
4 - Close file, and create new segment, write packet to segment file, goto-1
Mówiąc ogólnie, każdy segment zawiera co najmniej 3 sekundy danych wideo i zaczyna się od klatki kluczowej.
Problem polega na tym, że czas trwania wyjściowego wideo jest bardzo różny, niektóre zawierają 3 sekundy, inne zawierają 5 lub 6.
Podejrzewam, że problem wynikający z tego, jak ffmpeg generuje klatki kluczowe podczas transkodowania. Jeśli „odległość” między dwiema sąsiednimi klatkami kluczowymi wynosi 6s, mam segment 6 sekund.
Oto moje pytania:
czy to prawda, że ffmpeg generuje klatki kluczowe w nieregularnych odstępach czasu (a odstęp czasu może wynosić do kilku sekund (np. 6)?
Jak możemy kontrolować generowanie klatek kluczowych ffmpeg? (Domyślam się, że powinien to być argument polecenia ffmpeg, -force_key_frames, ale nie jestem pewien)