FFMPEG HLS - Nur Wiedergabeliste erstellen oder Segmentzeiten vor der Kodierung vorhersagen

FFMPEG HLS - Nur Wiedergabeliste erstellen oder Segmentzeiten vor der Kodierung vorhersagen

Ich verwende ffmpeg, um ein On-Demand-System zur Videotranskodierung zu erstellen, das die Medien im HLS-Format bereitstellt.

Momentan kann ich die Videos transkodieren und so bereitstellen, wie sie kodiert sind, aber ich kann die Suchfunktion meiner Player nicht verwenden, da die Wiedergabeliste (.m3u8) erst generiert wird, wenn die Chunks kodiert werden. Ich habe versucht, die -gOptionen zu verwenden und sie auf 90 mit Chunklängen von 3 s und 30 fps (29,7 fps, um genau zu sein) einzustellen. Aber die tatsächlichen Chunklängen schwanken leicht. Ich habe auch versucht, das HLS-Flag zu setzen round_durations, aber der Player funktioniert nicht, wenn es aktiviert ist.

Sind die Blockgrößen von den Szenen abhängig, die transkodiert werden, oder ist es durch Prüfen der Datei möglich, ihr Muster schnell zu ermitteln und am Anfang eine virtuelle .m3u8-Datei zu erstellen? Oder gibt es eine Option, mit der ffmpeg die Wiedergabeliste erstellen kann, ohne die Dateien tatsächlich zu kodieren?

Dies ist der Befehl, den ich gerade verwende: (mehrere Zeilen zur besseren Übersichtlichkeit)

ffmpeg.exe -i input.mkv -c:v libx264 -c:a aac -crf 22 -preset faster
-format hls -sn -hls_time 3 -hls_base_url http://localhost/media/
-hls_list_size 0 -hls_flags split_by_time -hls_playlist_type event -g 90 -r 30 index.m3u8

Antwort1

Sofern Sie nicht irgendwie manuell eine Keyframe-Kadenz erzwingen, kann die Platzierung des Ausgabe-Keyframes nicht erraten werden, ohne die Frames durch den Encoder zu leiten.

Sie können eine präzisere Platzierung der Keyframes erzwingen, indem Sie -gdie-force_key_frames expr:gte(t,n_forced*3)

verwandte Informationen