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)

questionAnswers(1)

yourAnswerToTheQuestion