Chciałem ustawić interwał klatki kluczowej wejściowego wideo na 5 sekund. Tylko wtedy mogę uzyskać stałą 5 sekundową segmentację HLS przy użyciu FFmpeg. Jak ustawić interwał klatki kluczowej na 5 sekund za pomocą FFmpeg? (Mile widziane oznaczenie linii FFmpeg docenione)jak zmienić interwał klatek kluczowych w ffmpeg
Odpowiedz
Będziesz musiał ponownie kodować. Ustaw parametr key x264 na 5 * fps i wyłącz scenecut. Jeśli Twoje fps wynosi na przykład 24:
ffmpeg -i <input> -vcodec libx264 -x264-params keyint=120:scenecut=0 -acodec copy out.mp4
Oczywiście nie jest to optymalna jakość, ale odpowiada Twoim wymaganiom.
Edytowany w celu zmiany no-scenecut
na scenecut=0
, zgodnie z sugestią westchnienia chłopca.
Westchnienie.
Dezinformacja dotycząca opcji bez scenek trwa dłużej niż pamiętam. Nigdy nie wprowadzaj wartości bez przygotowania.
Łącze do dokumentacji można znaleźć here.
Dla FFmpeg trzeba użyć następujące dwa przełączniki:
-g 120 określi GOP 120 klatek stworzyć pięć drugi GOP dla 23.976fps treści. Działa to w połączeniu z opcją bez wykreślania.
-x264opts no-scenecut wymusza tworzenie klatek kluczowych na wartość GOP, z której korzysta FFmpeg. Domyślnym ustawieniem dla libx264 jest utworzenie klatki kluczowej po wykryciu zmiany sceny. Jeśli sprawdzasz plik wyjściowy za pomocą MediInfo bez tej opcji, zobaczysz "scenecut = 40". Po prawidłowym wykonaniu będzie to "scenecut = 0". Jeśli ta opcja nie zostanie użyta, klatki kluczowe będą niedopasowane pod względem zawartości ABR, a rozmiary segmentów będą nieprzewidywalne.
Nie wierz mi na słowo, uruchom następujące polecenie pod powłoką bash, gdzie $ plik_wejściowy to nazwa pliku, który chcesz przeanalizować. Jeśli użyjesz dwóch przełączników pokazanych powyżej, zobaczysz bardzo równomierny rytm zrzutów klatek kluczowych do wiersza polecenia.
ffprobe -select_streams v -show_frames -show_entries frame=pict_type -of csv $inputfile | grep -n I | cut -d ':' -f 1
Można również odwołać się artykuł, który napisałem w sprawie sposobu tworzenia odpowiedniej oprawy ABR wyrównany treści here.
Dla pełnej dokładności powinieneś użyć 'frame = key_frame'. Możliwe są klatki I, które nie są klatkami kluczowymi. – Mulvya
Dzięki za to ... i masz rację, częściej niż nie, obcięcie z interwałami klatek kluczowych psuje się jakością. –
Czy masz jakieś źródło, które mówi: "jeśli ustawimy interwał klatki kluczowej, coś złego dzieje się z jakością"?! –
Boli albo jakość, albo bitrate. Inteligentne kodowanie umieści klatki kluczowe, gdy pojawi się scenariusz, aby przyszłe ramki mogły mieć czyste odniesienie. Jeśli wymusisz interwał, klatki kluczowe nie będą w ogóle optymalne dla przyszłych ramek, co z kolei będzie miało negatywny wpływ na strumień. – Ely