2015-06-22 50 views
11

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

16

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.

+1

Dzięki za to ... i masz rację, częściej niż nie, obcięcie z interwałami klatek kluczowych psuje się jakością. –

+0

Czy masz jakieś źródło, które mówi: "jeśli ustawimy interwał klatki kluczowej, coś złego dzieje się z jakością"?! –

+1

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

9

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.

+0

Dla pełnej dokładności powinieneś użyć 'frame = key_frame'. Możliwe są klatki I, które nie są klatkami kluczowymi. – Mulvya