O próprio ffmpeg não pode fazer isso, pois o que você está se referindo são segmentos HLS e não capítulos reais que o fluxo M3U8 especifica. O ffmpeg analisa o stream e o vê como um único fluxo de vídeo. Então, o que você precisa fazer é:
- Analise o arquivo M3U8
- Crie sua própria lista de capítulos de acordo com a especificação de formato do capítulo MKV
- Use
mkvmerge
para adicionar esses capítulos ao arquivo MKV que o ffmpeg gerou
Mais especificamente, você quer analisar o M3U8 e extrair todo o comprimento do segmento (conforme especificado por EXTINF
) e seu nome:
#EXTINF:16.000,
seg-1-v1-a1.ts
#EXTINF:16.000,
seg-2-v1-a1.ts
#EXTINF:24.000,
seg-3-v1-a1.ts
#EXTINF:24.000,
seg-4-v1-a1.ts
#EXTINF:24.000,
Em seguida, para cada segmento, você cria um novo capítulo com o início definido para a duração do segmento acumulado e o nome definido para o nome do segmento:
CHAPTER01=00:00:00.000
CHAPTER01NAME=seg-1-v1-a1.ts
CHAPTER02=00:00:16.000
CHAPTER02NAME=seg-2-v1-a1.ts
CHAPTER03=00:00:32.000
CHAPTER03NAME=seg-3-v1-a1.ts
CHAPTER04=00:00:56.000
CHAPTER04NAME=seg-4-v1-a1.ts
...
Isso pode ser feito usando scripts Bash ou Python, qualquer que seja a linguagem de programação mais adequada para você. (Eu não tenho tempo para escrever o roteiro agora, mas você tem a ideia.)
Salve esse arquivo como chapters.txt
.
Em seguida, instale mkvtoolnix
e execute:
mkvmerge input.mkv --chapters chapters.txt -o output.mkv