Um pouco hacky, mas este é o melhor que eu criei, também considerando a tarefa bastante ambígua, onde não está claro qual deve ser o tamanho do quadro de saída ou como o tempo deve ser garantido.
ffmpeg -f lavfi -i "color=color=black:d=10:s=1280x720:r=24" \
-filter:v "subtitles=sample.srt,mpdecimate,setpts=N/FRAME_RATE/TB" \
images/out-%04d.bmp
Veja o que isso faz:
- Crie uma cor de fundo preta com um tamanho de 1280 × 720px, 10 segundos de duração e 24 quadros por segundo. Você pode alterar o tamanho do pixel, obviamente, e terá que alterar a duração com base na duração geral do fluxo de legendas. A taxa de quadros pode ser reduzida, mas isso afeta a precisão da saída renderizada.
- Renderize as legendas usando o filtro
subtitles
(veja suas opções para definir o estilo das legendas) . - Elimine quadros duplicados com
mpdecimate
e redefina a base de tempo. Isso pode ser deixado de fora se você não quiser que apenas imagens distintas sejam exibidas. - Saída de cada quadro restante para uma imagem BMP, ordenada sequencialmente.
Agora, no caso de haver partes sem legendas, isso produzirá um quadro preto vazio - elas precisarão ser removidas mais tarde, por exemplo, com base em uma soma de verificação de arquivos.