FFMPEG HLS - 僅建立播放清單或在編碼前預測片段時間

FFMPEG HLS - 僅建立播放清單或在編碼前預測片段時間

我正在使用 ffmpeg 創建一個視訊轉碼點播系統,透過 HLS 格式為媒體提供服務。

現在,我可以對影片進行轉碼並在編碼時提供它們,但我無法使用播放器的搜尋功能,因為播放清單 (.m3u8) 僅在區塊編碼時產生。我嘗試使用這些-g選項,將其設置為 90,塊長度為 3 和 30fps(準確地說是 29.7fps)。但實際的塊長度略有波動。我也嘗試過設定 HLS 標誌round_durations,但播放器無法使用它。

區塊大小是否取決於正在轉碼的場景,或者是否可以透過探測檔案來快速確定其模式並在開始時產生完整的虛擬 .m3u8?或者是否有任何選項可以使 ffmpeg 產生播放清單而不實際對檔案進行編碼?

這是我現在使用的命令:(為了清晰起見,多行)

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

答案1

除非您以某種方式手動強制關鍵幀節奏,否則在不通過編碼器傳遞幀的情況下無法猜測輸出關鍵幀的位置。

您可以透過刪除-g並新增來強制更精確的關鍵影格放置-force_key_frames expr:gte(t,n_forced*3)

相關內容