Converter legendas baseadas em texto em bitmaps individuais com ffmpeg

1

Temos um fluxo de legendas baseado em texto e precisamos converter cada legenda distinta nesse fluxo de legenda em um arquivo .bmp individual, com 24 bits por pixel.

Como podemos fazer isso com o ffmpeg?

    
por Advika 14.07.2017 / 08:50

1 resposta

1

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.

    
por 17.07.2017 / 14:42