FFMPEG HLS - Crie apenas listas de reprodução ou preveja tempos de segmentos antes de codificar

0

Estou usando o ffmpeg para criar um sistema de transcodificação on demand que atende à mídia por meio do formato HLS.

Neste momento, eu posso transcodificar o vídeo e servi-lo como ele está codificado, mas não posso usar a função de busca dos meus players porque a playlist (.m3u8) é gerada somente quando os pedaços são codificados. Eu tentei usar as opções -g , configurando-a para 90 com pedaços de 3s e 30fps (29,7fps para ser preciso). Mas os comprimentos reais dos pedaços flutuam ligeiramente. Eu também tentei definir o sinalizador HLS round_durations , mas o player não funciona com ele.

Os tamanhos de partes dependem das cenas que estão sendo transcodificadas ou é possível, sondando o arquivo, determinar rapidamente seu padrão e gerar um virtual .m3u8 completo no início? Ou existe alguma opção para fazer o ffmpeg gerar a playlist sem realmente codificar os arquivos?

Este é o comando que estou usando agora: (várias linhas para maior clareza)

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
    
por Pedro M. Silva 03.10.2017 / 18:55

1 resposta

2

A menos que você esteja forçando manualmente uma cadência de quadro-chave de alguma forma, o posicionamento do quadro-chave de saída não poderá ser adivinhado sem passar os quadros pelo codificador.

Você pode forçar um posicionamento de quadro-chave mais preciso descartando o -g e adicionando -force_key_frames expr:gte(t,n_forced*3)

    
por 03.10.2017 / 20:00