Há uma maneira muito mais simples do que as sugeridas aqui, que não requer o cálculo do número de quadros ou a inserção do tamanho de arquivos individuais (especialmente melhor para o processamento em lote). Com uma versão recente do ffmpeg, você pode usar a -shortest
opção, que interrompe a codificação quando o fluxo mais curto termina - nesse caso, input.mp3 (como a imagem será repetida para sempre, possui um comprimento infinito):
ffmpeg -i input.mp3 -f image2 -loop 1 -r 2 -i input.jpg \
-shortest -c:a copy -c:v libx264 -crf 23 -preset veryfast output.mp4
Isso usa 2 quadros por segundo para a imagem / vídeo, o que deve ser bom, mas você pode configurá-lo para um padrão mais 25, se desejar.