
저는 ffmpeg를 사용하여 HLS 형식을 통해 미디어를 제공하는 주문형 비디오 트랜스코딩 시스템을 만들고 있습니다.
지금은 비디오를 트랜스코딩하고 인코딩된 대로 제공할 수 있지만 재생 목록(.m3u8)은 청크가 인코딩될 때만 생성되기 때문에 플레이어의 탐색 기능을 사용할 수 없습니다. 나는 -g
옵션을 사용해 보았고 청크 길이는 3초, 30fps(정확히는 29.7fps)로 90으로 설정했습니다. 그러나 실제 청크 길이는 약간 변동됩니다. 또한 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)